【问题标题】:How to print best model params in pyspark pipeline如何在 pyspark 管道中打印最佳模型参数
【发布时间】:2017-01-21 16:11:26
【问题描述】:

这个问题类似于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);

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    它确实遵循@user6910411 给出的关于How to get the maxDepth from a Spark RandomForestRegressionModel 的答案中描述的相同推理。

    您需要修补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:您可以通过与上述相同的方式修补模型以获取特定参数。

    【讨论】:

      【解决方案2】:

      更简单(1 行),只需引用模型的 JVM 对象

          cvModel.bestModel.stages[-1]._java_obj.getMaxDepth()
      

      这里你在交叉验证后获取你的 bestModel,调用这个模型的 JVM 对象并使用 getMaxDepth() 方法从 JVM 对象中提取 maxDepth 参数。

      所有原始 JVM 获取参数的列表可以在这里找到 https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/classification/RandomForestClassificationModel.html

      此外,您可以浏览其他模型的其他 get-parameters 并参考任何模型的原始 JVM 对象提取它们

          <yourModel>.stages[<yourModelStage>]._java_obj.<getParameter>()
      

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2019-04-09
        • 2015-12-10
        • 2020-03-10
        • 1970-01-01
        • 1970-01-01
        • 2016-08-29
        • 2021-10-11
        • 2018-05-02
        • 1970-01-01
        相关资源
        最近更新 更多