使用 SparkMLLib 获取具有交叉验证的最佳模型的参数

数据挖掘 Python 交叉验证 pyspark
2022-03-01 22:35:27

我无法访问 SparkMLlib 中模型估计器的参数。更确切地说,我的问题是:我有一个逻辑回归模型,我想为其找到最佳正则化参数(regParamelasticNetParam)。为了做到这一点,我使用CrossValidatorwhich 工作并发现我的模型比我尝试过的所有其他模型都好。问题是我不知道如何访问交叉验证器找到的参数的实际值。下面是我用来适合我的交叉验证器的代码:

from pyspark.ml.evaluation import BinaryClassificationEvaluator
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
from pyspark.ml.classification import LogisticRegression

lr_predictor = LogisticRegression(featuresCol='polyFeatures', labelCol='label', maxIter=10)
paramGrid = ParamGridBuilder() \
    .addGrid(lr_predictor.elasticNetParam, [0., 0.5, 1]) \
    .addGrid(lr_predictor.regParam, [0.1, 0.01]) \
    .build()
crossval = CrossValidator(estimator=LogRegPipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=BinaryClassificationEvaluator(),
                          numFolds=2) 
cvModel = crossval.fit(train_set)
bestModel = cvModel.bestModel
# How to get the best parameters fitted by cvModel 
1个回答

这不是最优雅的解决方案,但您可以使用以下方法至少将评估指标和超参数压缩在一起

zip(cvModel.avgMetrics, paramGrid)