Как продолжить обучение модели XGBoost на кусках панд? - PullRequest
0 голосов
/ 17 апреля 2019

У меня большой набор данных, который не может быть загружен целиком в одном кадре данных pandas. Я подумал использовать параметр chunksize для постепенного считывания всего файла на более мелкие куски.

Теперь я хочу обучить модель xgboost, которая начнется с первого блока и продолжит процесс обучения в каждой итерации с новыми фрагментами. Я попытался использовать параметр модели xgb_model, чтобы использовать ранее обученную модель и продолжить ее обучение с новым блоком. Но я думаю, что моя реализация не работает должным образом, потому что в оценках для новых блоков нет обновлений. Вот код, который я реализовал. Может ли кто-нибудь помочь мне реализовать это правильно?

import xgboost as xgb
from sklearn.model_selection import train_test_split

i = 1
model_xgb = None

for clsf_data in pd.read_csv(train_file_name, iterator=True, chunksize=20000):

  clsf_data.drop(['ID_code'], axis=1, inplace=True)

  X = clsf_data.loc[:, clsf_data.columns!='target']
  y = clsf_data.loc[:, clsf_data.columns=='target']

  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)
  X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=1234)

  tr_data = xgb.DMatrix(X_train, y_train)
  va_data = xgb.DMatrix(X_val, y_val)

  evalset = [(tr_data,'train'), (va_data,'valid')]

  model_xgb = xgb.train(params = {'objective':'binary:logistic', 
                                  'eval_metric':'auc'}, 
                        dtrain = tr_data, 
                        num_boost_round = 2000,
                        evals = evalset, 
                        maximize = False, 
                        xgb_model = model_xgb,
                        early_stopping_rounds = 100,
                        verbose_eval=0)

  print("Chunk: {}\nShape:{}\nBest Score {}\n".format(i, clsf_data.shape, model_xgb.best_score))
  i+=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...