相关疑难解决方法(0)

Pyspark-获取使用ParamGridBuilder创建的模型的所有参数

我正在使用PySpark 2.0进行Kaggle比赛。我想知道模型(RandomForest)的行为,具体取决于不同的参数。ParamGridBuilder()允许为单个参数指定不同的值,然后执行(我想)整个参数集的笛卡尔积。假设我DataFrame已经定义:

rdc = RandomForestClassifier()
pipeline = Pipeline(stages=STAGES + [rdc])
paramGrid = ParamGridBuilder().addGrid(rdc.maxDepth, [3, 10, 20])
                              .addGrid(rdc.minInfoGain, [0.01, 0.001])
                              .addGrid(rdc.numTrees, [5, 10, 20, 30])
                              .build()
evaluator = MulticlassClassificationEvaluator()
valid = TrainValidationSplit(estimator=pipeline,
                             estimatorParamMaps=paramGrid,
                             evaluator=evaluator,
                             trainRatio=0.50)
model = valid.fit(df)
result = model.bestModel.transform(df)
Run Code Online (Sandbox Code Playgroud)

好的,现在我可以使用手工功能检索简单的信息:

def evaluate(result):
    predictionAndLabels = result.select("prediction", "label")
    metrics = ["f1","weightedPrecision","weightedRecall","accuracy"]
    for m in metrics:
        evaluator = MulticlassClassificationEvaluator(metricName=m)
        print(str(m) + ": " + str(evaluator.evaluate(predictionAndLabels)))
Run Code Online (Sandbox Code Playgroud)

现在我想要几件事:

  • 最佳模型的参数是什么?这篇文章部分回答了这个问题:如何从PySpark中的spark.ml中提取模型超参数?
  • 所有型号的参数是什么?
  • 每个模型的结果(又称为召回率,准确性等)是什么?我只发现print(model.validationMetrics)显示(似乎)包含每个模型准确性的列表,但是我不知道要引用哪个模型。

如果我可以检索所有这些信息,则应该能够显示图形,条形图,并且可以像使用Panda和一样工作sklearn

python machine-learning hyperparameters pyspark apache-spark-ml

5
推荐指数
1
解决办法
4571
查看次数

使用 Pyspark 的交叉验证指标

当我们进行 k 折交叉验证时,我们正在测试模型在预测它从未见过的数据时的表现。

如果将我的数据集分成 90% 的训练和 10% 的测试并分析模型性能,则不能保证我的测试集不只包含 10% 的“最容易”或“最难”的预测点。

通过进行 10 折交叉验证,我可以确保每个点至少会用于训练一次。由于(在这种情况下)模型将被测试 10 次,我们可以对这些测试指标进行分析,这将使我们更好地了解模型在分类新数据方面的表现。

当目的应该是模型检查时,Spark 文档将交叉验证称为优化算法超参数的一种方式。

通过做这个:

lr = LogisticRegression(maxIter=10, tol=1E-4)
ovr = OneVsRest(classifier=lr)
pipeline = Pipeline(stages=[... , ovr])

crossval = CrossValidator(estimator=pipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=MulticlassClassificationEvaluator(),
                          numFolds=10)

# Run cross-validation, and choose the best set of parameters.
cvModel = crossval.fit(df)
Run Code Online (Sandbox Code Playgroud)

我能够获得(在我的理解中)具有paramGrid 中定义的最佳参数集的模型。我理解这种超参数调整的价值,但我想要的是分析模型性能,而不仅仅是获得最佳模型。

问题是(对于这种情况下的 10 倍交叉验证):

是否可以使用 CrossValidator 为 10 个测试中的每一个(或每个指标的这 10 个测试的平均值)提取指标(f1、精度、召回率等)?,. 是否可以使用 CrossValidator 进行模型检查而不是模型选择?

谢谢!


更新


正如user10465355在评论中所述,可以在此处找到类似的问题。第一个建议是在拟合之前将 collectSubModels 设置为 true …

cross-validation apache-spark pyspark apache-spark-mllib

5
推荐指数
0
解决办法
3558
查看次数