python - 如何在 pyspark 管道中打印最佳模型参数

标签 python apache-spark pyspark apache-spark-mllib

这个问题类似于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 提供。

您需要修补 TrainValidationSplitModelPCAModelDecisionTreeRegressionModel,如下所示:

TrainValidationSplitModel.bestModel = (
    lambda self: self._java_obj.bestModel
)

PCAModel.getK = (
    lambda self: self._java_obj.getK()
)

DecisionTreeRegressionModel.getMaxDepth = (
    lambda self: self._java_obj.getMaxDepth()
)

现在您可以使用它来获得最佳模型并提取kmaxDepth

bestModel = model.bestModel

bestModelK = bestModel.stages[0].getK()
bestModelMaxDepth = bestModel.stages[1].getMaxDepth()

PS:您可以按照上述相同的方式修补模型以获取特定参数。

关于python - 如何在 pyspark 管道中打印最佳模型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781529/

相关文章:

python - Databricks - pyspark.pandas.Dataframe.to_excel 无法识别 abfss 协议(protocol)

python - 均值按两列分组,窗口为 3 个月,NaN 小于 3 个月

python - Pyspark:按键聚合 RDD,然后也按键对元组值列表求和

json - 使用 spark-submit 从 google dataproc spark cluster 读取 GCP 中的 JSON(zipped .gz) 时,未使用所有执行程序

python - 仅在不匹配另一个正则表达式时替换正则表达式 (Python)

python - .dat 文件导入 Pandas

apache-spark - Spark检查点和持久化到磁盘有什么区别

java - 将 Python 项目重写为 Java——值得吗?

python - 为什么子函数不继承 Python 中的作用域?

hadoop - HDP : How to change HADOOP_CLASSPATH value