2

我正在对一组超参数的数据集进行交叉验证。

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
4

2 回答 2

3

好吧,您必须首先适合您的 CrossValidator:

cv_model = cv.fit(train_data)

完成此操作后,您将拥有一个 best_model:

best_model = cv_model.bestModel

要提取参数,您将不得不做这件丑陋的事情:

best_reg_param = best_model._java_obj.getRegParam()
best_elasticnet_param = best_model._java_obj.getElasticNetParam()
于 2018-09-25T14:55:23.310 回答
2

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

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)])
于 2019-07-15T14:38:10.110 回答