此问题与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;
提前致谢。
答案 0 :(得分:4)
它确实遵循@ user6910411给出的关于How to get the maxDepth from a Spark RandomForestRegressionModel的答案中描述的相同推理。
您需要修补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 :(得分: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>()
希望它有所帮助。