如何在 pyspark 管道中打印最佳模型参数
How to print best model params in pyspark pipeline
此题与相似。我想在 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);
提前致谢。
它确实遵循@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: 您可以按照上述相同的方式修补模型以获取特定参数。
更简单(1行),只需引用模型的JVM对象
cvModel.bestModel.stages[-1]._java_obj.getMaxDepth()
在这里,你在交叉验证后获取你的最佳模型,调用该模型的 JVM 对象,并使用 getMaxDepth() 方法从 JVM 对象中提取 maxDepth 参数。
可以在此处找到所有原始 JVM get-parameters 的列表
https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/classification/RandomForestClassificationModel.html
此外,您可以浏览其他模型的其他获取参数,并参考任何模型的原始 JVM 对象提取它们
<yourModel>.stages[<yourModelStage>]._java_obj.<getParameter>()
希望对您有所帮助。
此题与
部分代码为:
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);
提前致谢。
它确实遵循@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: 您可以按照上述相同的方式修补模型以获取特定参数。
更简单(1行),只需引用模型的JVM对象
cvModel.bestModel.stages[-1]._java_obj.getMaxDepth()
在这里,你在交叉验证后获取你的最佳模型,调用该模型的 JVM 对象,并使用 getMaxDepth() 方法从 JVM 对象中提取 maxDepth 参数。
可以在此处找到所有原始 JVM get-parameters 的列表 https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/classification/RandomForestClassificationModel.html
此外,您可以浏览其他模型的其他获取参数,并参考任何模型的原始 JVM 对象提取它们
<yourModel>.stages[<yourModelStage>]._java_obj.<getParameter>()
希望对您有所帮助。