Как получить лучший гиперпараметр из модели трубопровода MLP в pyspark? - PullRequest
0 голосов
/ 06 ноября 2018

Я использую MLP классификатор из pyspark.ml.classification . Я подгоняю свою модель MLP к набору данных, используя перекрестную проверку, т.е. ParamGrid метод. Я использую метод ParamGrid для перебора нескольких гиперпараметров. После этого я использую класс Crossvalidation для обучения и получения лучших гиперпараметров. После тренировки, когда я пытаюсь получить доступ к лучшему гиперпараметру из объекта перекрестной проверки, я получаю сообщение об ошибке. Может кто-нибудь сказать мне, как получить лучшие гиперпараметры?

from pyspark.ml.classification import MultilayerPerceptronClassifier
layers = [4, 5, 4, 3]
clf = MultilayerPerceptronClassifier(labelCol='label',layers=layers)
pipeline = Pipeline(stages=[clf])
x1 = 'stepSize'
x2 = 'maxIter'
paramGrid = ParamGridBuilder() \
    .addGrid(getattr(clf,x1), [0.1, 0.2]) \
    .addGrid(getattr(clf,x2),[5,10])\
    .build()
evaluator = MulticlassClassificationEvaluator(labelCol='label',
                                                          predictionCol='prediction', metricName='f1')
crossval = CrossValidator(estimator=pipeline,
                                      estimatorParamMaps=paramGrid,
                                      evaluator=evaluator,
                                      numFolds=2)
cvModel = crossval.fit(train_data)
cvModel.bestModel.stages[0]._java_obj.getMaxIter()

Ошибка:

Py4JError: An error occurred while calling o1127.getMaxIter. Trace:
py4j.Py4JException: Method getMaxIter([]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)
    at py4j.Gateway.invoke(Gateway.java:274)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:748)

Это cvModel.bestModel.stages [0] ._ java_obj.getMaxIter () работает, когда я использую логистическую регрессию или классификаторы случайных лесов. Я получаю сообщение об ошибке только при использовании классификатора MLP. Есть ли способ получить лучшие гиперпараметры, когда мы используем классификатор MLP?

1 Ответ

0 голосов
/ 18 февраля 2019

Я получал ту же ошибку при запуске точно такого же кода, и следующая строка из следующего поста решила эту проблему для меня.

Как извлечь гиперпараметры модели из spark.ml в PySpark?

modelOnly.bestModel.stages[-1]._java_obj.parent().getRegParam()

Итак, часть, которую вы пропустили, это вызов parent (), вам нужен вызов parent (). Надеюсь, это поможет!

...