在 pySpark 中使用 paramGrid 从 CrossValidator 中提取结果
Extract results from CrossValidator with paramGrid in pySpark
我用 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
等等
最好的方法是什么?
您必须合并不同的数据位:
Estimator
ParamMaps
使用 getEstimatorParamMaps
方法提取。
- 可以使用
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)
])
这里的回答很有帮助。以为我会为那些使用替代 pyspark 调整 class.
的人扩展
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)
])
我用 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
等等
最好的方法是什么?
您必须合并不同的数据位:
Estimator
ParamMaps
使用getEstimatorParamMaps
方法提取。- 可以使用
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)
])
这里的回答很有帮助。以为我会为那些使用替代 pyspark 调整 class.
的人扩展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)
])