Настройка гиперпараметров LightGBM RandomimzedSearchCV - PullRequest
0 голосов
/ 20 июня 2019

У меня есть набор данных со следующими размерами для комплектов обучения и тестирования-

X_train = (58149, 9), y_train = (58149,), X_test = (24921, 9) и y_test = (24921,)

Код, который у меня есть для RandomizedSearchCV с использованием классификатора LightGBM, выглядит следующим образом:

# Parameters to be used for RandomizedSearchCV-
rs_params = {
        # 'bagging_fraction': [0.6, 0.66, 0.7],
        'bagging_fraction': sp_uniform(0.5, 0.8),
        'bagging_frequency': sp_randint(5, 8),
        # 'feature_fraction': [0.6, 0.66, 0.7],
        'feature_fraction': sp_uniform(0.5, 0.8),
        'max_depth': sp_randint(10, 13),
        'min_data_in_leaf': sp_randint(90, 120),
        'num_leaves': sp_randint(1200, 1550)

}

# Initialize a RandomizedSearchCV object using 5-fold CV-
rs_cv = RandomizedSearchCV(estimator=lgb.LGBMClassifier(), param_distributions=rs_params, cv = 5, n_iter=100)

# Train on training data-
rs_cv.fit(X_train, y_train)

Когда я выполняю этот код, он выдает мне следующую ошибку-

LightGBMError: Проверка не удалась: bagging_fraction <= 1.0 at /__w/1/s/python-package/compile/src/io/config_auto.cpp, строка 295. </em>

Есть идеи, что не так?

Спасибо!

1 Ответ

0 голосов
/ 20 июня 2019

Я удалил sp_uniform и sp_ randint из вашего кода, и он работает хорошо

from sklearn.model_selection import RandomizedSearchCV
import lightgbm as lgb


np.random.seed(0)


d1 = np.random.randint(2, size=(100, 9))
d2 = np.random.randint(3, size=(100, 9))
d3 = np.random.randint(4, size=(100, 9))
Y = np.random.randint(7, size=(100,))


X = np.column_stack([d1, d2, d3])

rs_params = {

        'bagging_fraction': (0.5, 0.8),
        'bagging_frequency': (5, 8),

        'feature_fraction': (0.5, 0.8),
        'max_depth': (10, 13),
        'min_data_in_leaf': (90, 120),
        'num_leaves': (1200, 1550)

}

# Initialize a RandomizedSearchCV object using 5-fold CV-
rs_cv = RandomizedSearchCV(estimator=lgb.LGBMClassifier(), param_distributions=rs_params, cv = 5, n_iter=100,verbose=1)

# Train on training data-
rs_cv.fit(X, Y,verbose=1)

И согласно документации bagging_fraction будет <= 0 ||> = 1

добавьте verbose = 1, чтобы вы могли видеть, что детали вашей модели verbose дают нам информацию о вашей модели.

...