如何在Pyspark中获得交叉验证后的最佳超参数值?

如何在Pyspark中获得交叉验证后的最佳超参数值?,pyspark,apache-spark-mllib,Pyspark,Apache Spark Mllib,我正在数据集上对一些超参数集进行交叉验证 lr = LogisticRegression() paramGrid = ParamGridBuilder() \ .addGrid(lr.regParam, [0, 0.01, 0.05, 0.1, 0.5, 1]) \ .addGrid(lr.elasticNetParam, [0.0, 0.1, 0.5, 0.8, 1]) \ .build() evaluator = BinaryClassificationEvaluat

我正在数据集上对一些超参数集进行交叉验证

lr = LogisticRegression()
paramGrid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0, 0.01, 0.05, 0.1, 0.5, 1]) \
    .addGrid(lr.elasticNetParam, [0.0, 0.1, 0.5, 0.8, 1]) \
    .build()
evaluator = BinaryClassificationEvaluator()
cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator)
我想知道regParamelasticNetParam的最佳值。在python中,我们可以选择在交叉验证后获得最佳参数。pyspark中是否有任何方法可以在交叉验证后获得参数的最佳值

For example : regParam - 0.05 
              elasticNetParam - 0.1

首先,您必须安装CrossValidator:

cv_model = cv.fit(train_data)
完成此操作后,您将拥有以下方面的最佳_模型:

best_model = cv_model.bestModel
要提取参数,您必须执行以下操作:

best_reg_param = best_model._java_obj.getRegParam()
best_elasticnet_param = best_model._java_obj.getElasticNetParam()

假设您使用以下参数建立了逻辑回归模型

lr = LogisticRegression()
paramGrid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0, 0.01, 0.05, 0.1, 0.5, 1]) \
    .addGrid(lr.elasticNetParam, [0.0, 0.1, 0.5, 0.8, 1]) \
    .build()
cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator)
cv_model = cv.fit(train_data)
可以使用以下代码提取最佳模型参数:

print(cv_model.getEstimatorParamMaps()[np.argmax(cv_model.avgMetrics)])

我可以使用best_模型吗?_java_obj.getParam('ElasticNetparam')?@merkle这对我来说适用于带有随机林的CV,但在使用TrainValidationSplit进行网格搜索后不会打印最佳超参数。在第二种情况下,它只打印超参数的定义。