Модель обучения 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')
Другие вопросы по тегам