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

Я выполняю перекрестную проверку набора данных для некоторого набора гиперпараметров.

lr = LogisticRegression()
paramGrid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0, 0.01, 0.05, 0.1, 0.5, 1]) \
    .addGrid(lr.elasticNetParam, [0.0, 0.1, 0.5, 0.8, 1]) \
    .build()
evaluator = BinaryClassificationEvaluator()
cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator)

Я хочу узнать лучшее значение для regParam и asticNetPParam .В Python у нас есть возможность получить лучшие параметры после перекрестной проверки.Есть ли какой-нибудь метод в pyspark для получения лучших значений параметров после перекрестной проверки?

For example : regParam - 0.05 
              elasticNetParam - 0.1

Ответы [ 2 ]

0 голосов
/ 15 июля 2019

Допустим, вы построили модель логистической регрессии, используя следующие аргументы.

lr = LogisticRegression()
paramGrid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0, 0.01, 0.05, 0.1, 0.5, 1]) \
    .addGrid(lr.elasticNetParam, [0.0, 0.1, 0.5, 0.8, 1]) \
    .build()
cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator)
cv_model = cv.fit(train_data)

Вы можете извлечь лучшие параметры модели, используя следующий код:

print(cv_model.getEstimatorParamMaps()[np.argmax(cv_model.avgMetrics)])
0 голосов
/ 25 сентября 2018

Что ж, сначала вы должны установить свой CrossValidator:

cv_model = cv.fit(train_data)

После этого у вас будет best_model в:

best_model = cv_model.bestModel

Для извлечения параметров вам потребуетсядолжен сделать эту уродливую вещь:

best_reg_param = best_model._java_obj.getRegParam()
best_elasticnet_param = best_model._java_obj.getElasticNetParam()
...