spark org mllib kmeans downloads clustering apache-spark pyspark apache-spark-ml

apache-spark - org - spark mllib



¿Cómo obtener los mejores parámetros después de sintonizar con pyspark.ml.tuning.TrainValidationSplit? (1)

Estoy tratando de ajustar los hiperparámetros de un modelo Spark (PySpark) ALS mediante TrainValidationSplit .

Funciona bien, pero quiero saber qué combinación de hiperparámetros es la mejor. ¿Cómo obtener los mejores params después de la evaluación?

from pyspark.ml.recommendation import ALS from pyspark.ml.tuning import TrainValidationSplit, ParamGridBuilder from pyspark.ml.evaluation import RegressionEvaluator df = sqlCtx.createDataFrame( [(0, 0, 4.0), (0, 1, 2.0), (1, 1, 3.0), (1, 2, 4.0), (2, 1, 1.0), (2, 2, 5.0)], ["user", "item", "rating"], ) df_test = sqlCtx.createDataFrame( [(0, 0), (0, 1), (1, 1), (1, 2), (2, 1), (2, 2)], ["user", "item"], ) als = ALS() param_grid = ParamGridBuilder().addGrid( als.rank, [10, 15], ).addGrid( als.maxIter, [10, 15], ).build() evaluator = RegressionEvaluator( metricName="rmse", labelCol="rating", ) tvs = TrainValidationSplit( estimator=als, estimatorParamMaps=param_grid, evaluator=evaluator, ) model = tvs.fit(df)

Pregunta: ¿Cómo obtener el mejor rango y máximo?


Puede acceder al mejor modelo utilizando la propiedad bestModel del TrainValidationSplitModel :

best_model = model.bestModel

Se puede acceder directamente al rank usando la propiedad de rank del ALSModel :

best_model.rank

10

Obtener el número máximo de iteraciones requiere un poco más de engaño:

(best_model ._java_obj # Get Java object .parent() # Get parent (ALS estimator) .getMaxIter()) # Get maxIter

10