这个问题类似于this one .我想在 pyspark 中执行 TrainValidationSplit 后打印最佳模型参数。我找不到其他用户用来回答问题的那段文字,因为我正在使用 jupyter 并且日志从终端消失了......
部分代码为:
pca = PCA(inputCol = 'features')
dt = DecisionTreeRegressor(featuresCol=pca.getOutputCol(),
labelCol="energy")
pipe = Pipeline(stages=[pca,dt])
paramgrid = ParamGridBuilder().addGrid(pca.k, range(1,50,2)).addGrid(dt.maxDepth, range(1,10,1)).build()
tvs = TrainValidationSplit(estimator = pipe, evaluator = RegressionEvaluator(
labelCol="energy", predictionCol="prediction", metricName="mae"), estimatorParamMaps = paramgrid, trainRatio = 0.66)
model = tvs.fit(wind_tr_va);
提前致谢。
最佳答案
它确实遵循关于 How to get the maxDepth from a Spark RandomForestRegressionModel 的答案中描述的相同推理。由@user6910411 提供。
您需要修补 TrainValidationSplitModel
、PCAModel
和 DecisionTreeRegressionModel
,如下所示:
TrainValidationSplitModel.bestModel = (
lambda self: self._java_obj.bestModel
)
PCAModel.getK = (
lambda self: self._java_obj.getK()
)
DecisionTreeRegressionModel.getMaxDepth = (
lambda self: self._java_obj.getMaxDepth()
)
现在您可以使用它来获得最佳模型并提取k
和maxDepth
bestModel = model.bestModel
bestModelK = bestModel.stages[0].getK()
bestModelMaxDepth = bestModel.stages[1].getMaxDepth()
PS:您可以按照上述相同的方式修补模型以获取特定参数。
关于python - 如何在 pyspark 管道中打印最佳模型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781529/