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