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

时间:2017-01-21 16:11:26

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

此问题与this one类似。我想在pyspark中执行TrainValidationSplit后打印最好的模型参数。我无法找到其他用户用来回答问题的文本,因为我正在处理jupyter并且日志从终端消失了......

部分代码是:

encryptor.c:72:17: error: data type of ‘_YMM0_r’ isn’t suitable for a register
  register __m256 _YMM0_r asm ("ymm0") = _YMM0;

提前致谢。

2 个答案:

答案 0 :(得分:4)

它确实遵循@ 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:您可以使用上述相同的方式修补模型以获取特定参数。

答案 1 :(得分:3)

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

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

在交叉验证后,您可以使用bestModel,调用此模型的JVM对象,并使用JVM对象中的getMaxDepth()方法提取maxDepth参数。

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

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

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

希望它有所帮助。