Улучшение модели бустинга, уменьшение среднеквадратической ошибки - PullRequest
0 голосов
/ 05 июня 2018

Привет, я решаю проблему регрессии. Мой набор данных состоит из 13 функций и 550068 строк. Я испробовал разные модели и обнаружил, что алгоритмы повышения (например, xgboost, catboost, lightgbm) хорошо работают на этом большом наборе данных.это код

import lightgbm as lgb
gbm = lgb.LGBMRegressor(objective='regression',num_leaves=100,learning_rate=0.2,n_estimators=1500)
gbm.fit(x_train, y_train,
    eval_set=[(x_test, y_test)],
    eval_metric='l2_root',
    early_stopping_rounds=10)
y_pred = gbm.predict(x_test, num_iteration=gbm.best_iteration_)
accuracy = round(gbm.score(x_train, y_train)*100,2)
mse = mean_squared_error(y_test,y_pred)
rmse = np.sqrt(mse)

import xgboost as xgb
boost_params = {'eval_metric': 'rmse'}
xgb0 = xgb.XGBRegressor(
max_depth=8,
learning_rate=0.1,
n_estimators=1500,
objective='reg:linear',
gamma=0,
min_child_weight=1,
subsample=1,
colsample_bytree=1,
scale_pos_weight=1,
seed=27,
**boost_params)
xgb0.fit(x_train,y_train)
accuracyxgboost = round(xgb0.score(x_train, y_train)*100,2)
predict_xgboost = xgb0.predict(x_test)
msexgboost = mean_squared_error(y_test,predict_xgboost)
rmsexgboost= np.sqrt(msexgboost)

from catboost import Pool, CatBoostRegressor
train_pool = Pool(x_train, y_train) 
cbm0 = CatBoostRegressor(rsm=0.8, depth=7, learning_rate=0.1, 
eval_metric='RMSE')
cbm0.fit(train_pool)
test_pool = Pool(x_test)
predict_cat = cbm0.predict(test_pool)
acc_cat = round(cbm0.score(x_train, y_train)*100,2)
msecat = mean_squared_error(y_test,predict_cat)
rmsecat = np.sqrt(msecat)

Используя вышеупомянутые модели, я получаю значения rmse около 2850. Теперь я хочу улучшить производительность своей модели, уменьшив среднеквадратическую ошибку. Как я могу улучшить производительность своей модели?Поскольку я новичок в повышении алгоритмов, какие параметры влияют на модели? И как я могу выполнить настройку гиперпараметров для этих алгоритмов (xgboost, catboost, lightgbm). Я использую ОС Windows10 и Intel i5 7-го поколения.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Из этих трех инструментов, которые вы опробовали, CatBoost обеспечивает преимущество в обработке категориальных функций (это может быть и быстрее, но я не видел тест, демонстрирующий это, и он, кажется, не доминирует над kaggle, так что, скорее всего,это не так быстро, как LightGBM, но я могу ошибаться в этой гипотезе).Поэтому я бы использовал его, если бы в моем образце было много таких.Два других (LightGBM и XGBoost) предоставляют очень похожую функциональность, и я бы посоветовал выбрать один из них и придерживаться его.На данный момент кажется, что LightGBM превосходит XGBoost по времени обучения на CPU , обеспечивая очень сравнимую точность прогнозов.Смотрите, например, GBM-perf beachmark на github или , этот углубленный анализ .Если у вас есть графический процессор, то на самом деле XGBoost кажется предпочтительным, если судить по приведенному выше критерию.

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

  • trainдольше (если ранняя остановка не была вызвана, это означает, что еще есть место для обобщения; если это так, то вы не сможете улучшить дальнейшее обучение, дольше тренируя выбранную модель с выбранными гиперпараметрами)
  • оптимизация гипер-параметры (см. ниже)
  • выберите другую модель.Не существует единой серебряной пули для всех проблем.Обычно GBM очень хорошо работают с большими выборками структурированных данных, но для некоторых классов проблем (например, линейная зависимость) GBM трудно научиться обобщать, так как для этого может потребоваться очень много разбиений.Так что, возможно, для вашей задачи линейная модель, SVM или что-то еще будет работать лучше из коробки.

Поскольку мы сузили выбор до 2, я не могу посоветовать catboostоптимизация гиперпараметров, так как у меня пока нет практического опыта с этим.Но для настройки lightgbm вы можете прочитать этот официальный документ lightgbm и эти инструкции в одном из вопросов.Есть много хороших примеров настройки гиперпараметров для LightGBM.Я могу быстро выкопать свое ядро ​​на kaggle: см. Здесь .Я не утверждаю, что он идеален, но это то, что мне легко найти:)

0 голосов
/ 05 июня 2018

Вы можете использовать лассо или ридж, эти методы могут улучшить производительность.

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

Вы также можете попробовать сложенные методы ансамбля.

Если вы используете R, используйте пакет h20.ai, это дает хороший результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...