从PySpark ParamGrid中提取MLP层

问题描述 投票:1回答:1

所以我在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。

我错过了什么?

谢谢 :)

apache-spark pyspark apache-spark-ml
1个回答
2
投票

这不是随机字符串,而是representation of the corresponding Java object

虽然理论上你可以

[x for x in mybestmodel.stages[-1]._java_obj.parent().getLayers()]

there is really no need for that

layers

层大小数组,包括输入和输出层。

版本1.6.0中的新功能。

mybestmodel.stages[-1].layers
© www.soinside.com 2019 - 2024. All rights reserved.