Как сделать так, чтобы метки попадали в тестовые выборки?
xgboost.cv(params=params, dtrain=dtrain, num_boost_round=1000, nfold=8)
При большом количестве разбиений, например 8, метки перестают попадать в тестовые выборки, насколько я поняла из ошибки:
Check failed: !auc_error AUC: the dataset only contains pos or neg samples
При nfold=4 всё работает без ошибок.
Какое более правильное и универсальное решение с кроссвалидацией для будущих данных, т.к. nfold=4 для неизвестных данных может не подойти?
Ответы (1 шт):
Попробуйте воспользоваться параметром stratified=True.
import xgboost as xgb
xgb.cv(params=params, dtrain=dtrain, num_boost_round=1000, nfold=8, stratified=True)
При использовании данного параметра, при создании тестовой подвыборки (fold) алгоритм будет пытаться сохранить такое же процентное соотношение классов как и во всем датасете.
Если ваш датасет сильно разбалансирован (например число меток позитивного класса - 1%, а число меток негативного класса - 99%), то стоит подумать о предварительной балансировке датасета. Для работы с разбалансированными данными существует удобный модуль imbalanced-learn, позволяющий сбалансировать данные практически всеми известными и популярными методами: RUS, ROS, SMOTE, SMOTEENC м многими другими.