Недавно я провожу несколько экспериментов по сравнению Python XgBoost и LightGBM. Кажется, что этот LightGBM - это новый алгоритм, который, как говорят, работает лучше, чем XGBoost, как по скорости, так и по точности.
Это LightGBM GitHub. Это документы API Python LightGBM, здесь вы найдете функции Python, которые вы можете может позвонить. Его можно вызвать напрямую из модели LightGBM, а также из Scikit-learn LightGBM.
Я использую XGBoost Python API. Как видите, он имеет очень похожую структуру данных, что и API Python LightGBM выше.
Вот что я пробовал:
- Если вы используете метод
train()
как в XGBoost, так и в LightGBM, да, lightGBM работает быстрее и имеет более высокую точность. Но у этого метода нет перекрестной проверки. - Если вы попробуете использовать метод
cv()
в обоих алгоритмах, он предназначен для перекрестной проверки. Однако я не нашел способа использовать его для возврата набора оптимальных параметров. - если вы попробуете scikit-learn
GridSearchCV()
с LGBMClassifier и XGBClassifer. Он работает для XGBClassifer, но для LGBClassifier он работает вечно.
Вот мои примеры кода при использовании GridSearchCV()
с обоими классификаторами:
XGBClassifier с GridSearchCV
param_set = {
'n_estimators':[50, 100, 500, 1000]
}
gsearch = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1,
n_estimators=100, max_depth=5,
min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8,
nthread=7,
objective= 'binary:logistic', scale_pos_weight=1, seed=410),
param_grid = param_set, scoring='roc_auc',n_jobs=7,iid=False, cv=10)
xgb_model2 = gsearch.fit(features_train, label_train)
xgb_model2.grid_scores_, xgb_model2.best_params_, xgb_model2.best_score_
Это очень хорошо работает для XGBoost и занимает всего несколько секунд.
LightGBM с GridSearchCV
param_set = {
'n_estimators':[20, 50]
}
gsearch = GridSearchCV(estimator = LGBMClassifier( boosting_type='gbdt', num_leaves=30, max_depth=5, learning_rate=0.1, n_estimators=50, max_bin=225,
subsample_for_bin=0.8, objective=None, min_split_gain=0,
min_child_weight=5,
min_child_samples=10, subsample=1, subsample_freq=1,
colsample_bytree=1,
reg_alpha=1, reg_lambda=0, seed=410, nthread=7, silent=True),
param_grid = param_set, scoring='roc_auc',n_jobs=7,iid=False, cv=10)
lgb_model2 = gsearch.fit(features_train, label_train)
lgb_model2.grid_scores_, lgb_model2.best_params_, lgb_model2.best_score_
Однако, используя этот метод для LightGBM, он работал все утро сегодня, но ничего не сгенерировал.
Я использую тот же набор данных, набор данных содержит 30000 записей.
У меня 2 вопроса:
- Если мы просто используем метод
cv()
, есть ли способ настроить оптимальный набор параметров? - Вы знаете, почему
GridSearchCV()
плохо работает с LightGBM? Мне интересно, происходит ли это только со мной так, как с другими?