Использование XGboost_Regressor в Python приводит к очень хорошей производительности обучения, но плохому предсказанию - PullRequest
0 голосов
/ 11 декабря 2018

Я пытался использовать XGBregressor в Python.Это, безусловно, одна из лучших техник ML, которые я использовал. Однако в некоторых наборах данных у меня очень высокая обучаемость в R-квадрате, но она действительно плоха в прогнозировании или тестировании.Я пытался поиграть с гаммой, глубиной и подвыборкой, чтобы уменьшить сложность модели или убедиться, что она не переоснащена, но между тренировкой и тестированием есть огромная разница.Мне было интересно, может ли кто-нибудь помочь мне с этим:

Ниже приведен код, который я использую:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30,random_state=100)

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X_train)


xgb = xgboost.XGBRegressor(colsample_bytree=0.7,
                 gamma=0,                 
                 learning_rate=0.01,
                 max_depth=1,
                 min_child_weight=1.5,
                 n_estimators=100000,                                                                    
                 reg_alpha=0.75,
                 reg_lambda=0.45,
                 subsample=0.8,
                 seed=1000) 

Вот результат обучения по сравнению с тестированием:

Обучение: MAE: 0,10 R ^ 2: 0,99

Тестирование: MAE: 1,47 R ^ 2: -0,89

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Проблема здесь в переоснащении.Вам необходимо настроить некоторые параметры ( Source ).

  • установить n_estimators равным 80-200, если размер данных велик (порядка lakh)800-1200 - это средне-низкий
  • learning_rate: от 0,1 до 0,01
  • подвыборка: от 0,8 до 1
  • colsample_bytree: количество столбцов, используемых каждым деревом,Значения от 0,3 до 0,8, если у вас много векторов или столбцов, или от 0,8 до 1, если у вас мало векторов или столбцов.
  • гамма: 0, 1 или 5

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

Вам нужно попробовать различные варианты.конечно, xgboost и случайный лес дадут подходящую модель для меньшего количества данных.Вы можете попробовать: -

1. Наивный Байес.Это хорошо для меньшего набора данных, но учитывает вес всех векторов признаков одинаково.

Логистическая регрессия - попробуйте настроить параметр регуляризации и посмотреть, где ваш показатель отзыва макс.Другие вещи в этом: вес calsss = сбалансированный.

Логистическая регрессия с перекрестной проверкой - это также хорошо для небольших данных.Последнее, о чем я говорил ранее, также проверьте свои данные и убедитесь, что они не смещены в сторону какого-либо результата.Например, если результат «да» в 50 случаях из 70, он сильно смещен, и вы можете не получить высокую точность.

0 голосов
/ 12 декабря 2018

XGBoost имеет тенденцию перекрывать данные, поэтому уменьшите n_estimators и n_depth и используйте ту конкретную итерацию, где потеря поезда и потеря val не имеют большой разницы между ними.

...