Модель обучения Catboost для больших данных (~22 ГБ) с несколькими блоками
Я пытаюсь обучить CatboostClassifier с около 22 ГБ данных в CSV-файле, который имеет около 50 столбцов. Я попытался загрузить все данные сразу в пандас-фреймы, но не смог этого сделать. Могу ли я в любом случае обучить модель с несколькими блоками данных в catboost?
1 ответ
Инкрементальный Catboost подходит для огромных файлов данных.
Вы можете обучать свою модель постепенно, если используете CPU и init_model в качестве подходящих параметров. Вот пример того, как это сделать:
from catboost import CatBoostClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
clf = CatBoostClassifier(task_type="CPU",
iterations=2000,
learning_rate=0.2,
max_depth=1)
chunk=pd.read_csv('BigDataFile.csv',chunksize=100000)
for i,ds in enumerate(chunk):
W=ds.values
X=W[:,:-1].astype(float)
Y=W[:,-1].astype(int)
del W
if i==0:
X_train, X_val, Y_train, Y_val = train_test_split(X, Y,
train_size=0.80,
random_state=1234)
del X,Y
clf.fit(X_train, Y_train,
eval_set=(X_val, Y_val),
else:
clf.fit(X, Y,
eval_set=(X_val, Y_val),
init_model='model.cbm')
clf.save_model('model.cbm') # save model so is loaded in the next step
И тебе хорошо идти. Работает только на CPU. Не используйте файл моментального снимка или best_model. Файл модели будет загружен, и обучение будет выполняться постепенно после начального шага, пока у вас останутся данные.
Я не уверен, но вы можете попробовать опцию save_snapshot и snapshot_file в модели. Цель состояла в том, чтобы иметь возможность продолжить обучение, если оно было прервано.
model = CatBoostClassifier(iterations=50,
save_snapshot = True,
snapshot_file = 'model_binary_snapshot.model'
random_seed=42)
Это сохранит модель в "model_binary_snapshot.model", и вы сможете перезагрузить и продолжить обучение.
model2 = CatBoostClassifier( )
model2.load_model('model_binary_snapshot.model')