【问题标题】:Extract results from CrossValidator with paramGrid in pySpark在 pySpark 中使用 paramGrid 从 CrossValidator 中提取结果
【发布时间】:2018-12-16 06:18:30
【问题描述】:

我用 pySpark 训练了一个随机森林。我想要一个带有结果的csv,网格中的每个点。 我的代码是:

estimator = RandomForestRegressor()
evaluator = RegressionEvaluator()
paramGrid = ParamGridBuilder().addGrid(estimator.numTrees, [2,3])\
                              .addGrid(estimator.maxDepth, [2,3])\
                              .addGrid(estimator.impurity, ['variance'])\
                              .addGrid(estimator.featureSubsetStrategy, ['sqrt'])\
                              .build()
pipeline = Pipeline(stages=[estimator])

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

cvModel = crossval.fit(result)

所以我想要一个 csv:

numTrees | maxDepth | impurityMeasure 

2            2          0.001 

2            3          0.00023

等等

最好的方法是什么?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-ml


    【解决方案1】:

    您必须组合不同的数据位:

    • 使用getEstimatorParamMaps方法提取EstimatorParamMaps
    • 可以使用avgMetrics 参数检索的训练指标。

    首先获取映射中声明的所有参数的名称和值:

    params = [{p.name: v for p, v in m.items()} for m in cvModel.getEstimatorParamMaps()]
    

    Thane zip 带有指标并转换为数据框

    import pandas as pd
    
    pd.DataFrame.from_dict([
        {cvModel.getEvaluator().getMetricName(): metric, **ps} 
        for ps, metric in zip(params, cvModel.avgMetrics)
    ])
    

    【讨论】:

    • 您必须使用一些过时的 Python 版本。您可以找到适用于旧版本的方法here
    • 是否可以使用上述过程获取指标accuracy
    【解决方案2】:

    这里的答案真的很有帮助。以为我会为那些使用替代 pyspark 调整类的人扩展。

    pyspark.ml.tuning.TrainValidationSplit
    

    现在使用 validationMetrics 参数检索训练指标

    将 cvModel 替换为 tvsModel(pyspark.ml.tuning.TrainValidationSplitModel 的一个实例),解决方案变为:

    params = [{p.name: v for p, v in m.items()} for m in tvsModel.getEstimatorParamMaps()]
    
    pd.DataFrame.from_dict([
        {tvsModel.getEvaluator().getMetricName(): metric, **ps} 
        for ps, metric in zip(params, tvsModel.validationMetrics)
    ])
    

    【讨论】:

      猜你喜欢
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-11
      • 2020-08-27
      • 1970-01-01
      • 2015-09-09
      • 2023-03-17
      相关资源
      最近更新 更多