apache-spark - 从 PySpark ParamGrid 中提取 MLP 层
问题描述
因此,在 Pipeline 和 CrossValidator 之后,我无法从 PySpark 模型中提取超参数。
我在 StackOverflow 上找到了以下答案: How to extract model hyper-parameters from spark.ml in PySpark?
这非常有帮助,以下行对我有用:
modelOnly.bestModel.stages[-1]._java_obj.parent().getRegParam()
新问题是我正在运行 MLP,并且在尝试提取图层时,我得到一个随机字符串,而不是 Python 列表之类的东西。
结果:
StepSize: 0.03
Layers: [I@db98c25
我的代码大致是:
trainer = MultilayerPerceptronClassifier(featuresCol='features',
labelCol='label',
predictionCol='prediction',
maxIter=100,
tol=1e-06,
seed=1331,
layers=layers1,
blockSize=128,
stepSize=0.03,
solver='l-bfgs',
initialWeights=None,
probabilityCol='probability',
rawPredictionCol='rawPrediction')
pipeline = Pipeline(stages=[assembler1,stringIdx,trainer])
paramGrid = ParamGridBuilder() \
.addGrid(trainer.maxIter, [10]) \
.addGrid(trainer.tol, [1e-06]) \
.addGrid(trainer.stepSize, [0.03]) \
.addGrid(trainer.layers, [layers2]) \
.build()
crossval = CrossValidator(estimator=pipeline,
estimatorParamMaps=paramGrid,
evaluator=MulticlassClassificationEvaluator(metricName="accuracy"),
numFolds=3)
cvModel = crossval.fit(df)
mybestmodel = cvModel.bestModel
java_model = mybestmodel.stages[-1]._java_obj
print("StepSize: ", end='')
print(java_model.parent().getStepSize())
print("Layers: ", end='')
print(java_model.parent().getLayers())
我正在运行 Spark 2.3.2。
我错过了什么?
谢谢 :)
解决方案
那不是随机字符串,而是对应 Java 对象的表示。
虽然理论上你可以
[x for x in mybestmodel.stages[-1]._java_obj.parent().getLayers()]
layers
层大小数组,包括输入和输出层。
版本 1.6.0 中的新功能。
IE
mybestmodel.stages[-1].layers
推荐阅读
- c# - 使用 DispatcherTimer 淡入淡出
- reactjs - axios/react 发布请求:没有参数发送到后端(flask api)
- javascript - 在谷歌搜索输入字段中输入的文本
- html - 绝对定位到 img 的 Div 不应该移动
- java - Java 1.8 161+ jjs,无法使用 windows 类路径运行
- r - R SQL Server odbc 和 DBI unicode 表名
- python - 在熊猫中按两列计数
- node.js - 如何在反应中使用节点想要合并它们
- php - Downloading file displays unknown characters
- scala - 在 Scala 中创建 SparkSession 时出现 java.lang.InterruptedException