Как выбрать наилучшие значения для param_distributions и fit_params перекрестной проверки, чтобы соответствовать модели? - PullRequest
0 голосов
/ 21 марта 2020

Я реализую классификатор LightGBM (LGBMClassifier), гиперпараметры которого выбираются при перекрестной проверке RandomizedSearchCV (библиотека sklearn).

Я использовал некоторые произвольные значения для param_distributions и fit_params, но как мне их выбрать?

В моем случае я работаю с данными c и у меня есть набор данных из 2504 строк и 220 001 столбца. Мне интересно, есть ли какой-нибудь алгоритм / расчет, который я могу использовать для выбора каждого из диапазонов тестируемых параметров?

Вот фрагмент кода, который я позаимствовал у этого ядра Kaggle :

fit_params = {"early_stopping_rounds" : 50, # TODO: Isn't it too low for GWAS?
             "eval_metric" : 'binary', 
             "eval_set" : [(X_test,y_test)],
             'eval_names': ['valid'],
             'verbose': 0,
             'categorical_feature': 'auto'}

param_test = {'learning_rate' : [0.01, 0.02, 0.03, 0.04, 0.05, 0.08, 0.1, 0.2, 0.3, 0.4],
              'n_estimators' : [100, 200, 300, 400, 500, 600, 800, 1000, 1500, 2000, 3000, 5000],
              'num_leaves': sp_randint(6, 50), 
              'min_child_samples': sp_randint(100, 500), 
              'min_child_weight': [1e-5, 1e-3, 1e-2, 1e-1, 1, 1e1, 1e2, 1e3, 1e4],
              'subsample': sp_uniform(loc=0.2, scale=0.8), 
              'max_depth': [-1, 1, 2, 3, 4, 5, 6, 7],
              'colsample_bytree': sp_uniform(loc=0.4, scale=0.6),
              'reg_alpha': [0, 1e-1, 1, 2, 5, 7, 10, 50, 100],
              'reg_lambda': [0, 1e-1, 1, 5, 10, 20, 50, 100]}

#number of combinations
n_iter = 200 #(replace 2 by 200, 90 minutes)

#intialize lgbm and lunch the search
lgbm_clf = lgbm.LGBMClassifier(random_state=random_state, silent=True, metric='None', n_jobs=4)
grid_search = RandomizedSearchCV(
    estimator=lgbm_clf, param_distributions=param_test, 
    n_iter=n_iter,
    scoring='accuracy',
    cv=5,
    refit=True,
    random_state=random_state,
    verbose=True)

Если вопрос более сфокусирован, как мне выбрать, например, сколько итераций мне нужно для early_stopping_rounds и n_iter?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

«Я использовал несколько произвольных значений для param_distributions и fit_params, но как мне их выбрать?» . Мой совет - брать значения по умолчанию, определенные sklearn. На самом деле, в зависимости от проблемы и алгоритма, который вы используете, вы можете попробовать некоторые предположения. Например, есть некоторые исследования, в которых говорится, что, как правило, случайный лес дает лучшие результаты, когда 100 <= n_estimators <= 500. Вы можете начать таким образом, но если вам действительно нужно найти (суб) оптимальные параметры, которые вы можете использовать алгоритмы оптимизации, такие как алгоритмы Geneti c, которые начинаются со случайных значений и пытаются сходиться к оптимальным значениям. </p>

1 голос
/ 21 марта 2020

RandomizedSearchCV вернет лучший выбор массива входных данных для каждого параметра, например: он вернет 0.4 из 'learning_rate' : [0.01, 0.02, 0.03, 0.04, 0.05, 0.08, 0.1, 0.2, 0.3, 0.4], если последний элемент массива learning_rate будет наилучшим образом. n_iter является целым числом и не может быть выбрано путем передачи массива, поэтому вы должны выполнить grid_search самостоятельно.

...