У меня большой набор данных, который не может быть загружен целиком в одном кадре данных 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