如何从pyspark的MLP管道模型中获得最佳超参数?

2024-10-03 09:13:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用MLP来自pyspark.ml.分类。我使用crossvalidation(即ParamGrid方法)将MLP模型拟合到数据集。我使用ParamGrid方法迭代几个超参数。之后,我使用交叉验证类进行训练,并获得最佳的超参数。经过培训,当我试图从交叉验证对象访问最佳超参数时,我遇到了一个错误。有谁能告诉我如何得到最佳的超参数吗?在

from pyspark.ml.classification import MultilayerPerceptronClassifier
layers = [4, 5, 4, 3]
clf = MultilayerPerceptronClassifier(labelCol='label',layers=layers)
pipeline = Pipeline(stages=[clf])
x1 = 'stepSize'
x2 = 'maxIter'
paramGrid = ParamGridBuilder() \
    .addGrid(getattr(clf,x1), [0.1, 0.2]) \
    .addGrid(getattr(clf,x2),[5,10])\
    .build()
evaluator = MulticlassClassificationEvaluator(labelCol='label',
                                                          predictionCol='prediction', metricName='f1')
crossval = CrossValidator(estimator=pipeline,
                                      estimatorParamMaps=paramGrid,
                                      evaluator=evaluator,
                                      numFolds=2)
cvModel = crossval.fit(train_data)
cvModel.bestModel.stages[0]._java_obj.getMaxIter()

错误:

^{2}$

这个cvModel.bestModel.stages版[0]。\u java_目标()在我使用logistic回归或随机森林分类器时起作用。只有当我使用MLP分类器时才会出现错误。当我们使用MLP分类器时,有没有什么方法可以得到最佳的超参数?在


Tags: 方法参数evaluator分类器layers错误ml交叉
1条回答
网友
1楼 · 发布于 2024-10-03 09:13:37

我在运行完全相同的代码时遇到了同样的错误,下面文章的下面一行为我解决了这个问题。在

How to extract model hyper-parameters from spark.ml in PySpark?

modelOnly.bestModel.stages[-1]._java_obj.parent().getRegParam()

所以您缺少的部分是“parent()”调用,您需要“parent()”调用。希望这有帮助!在

相关问题 更多 >