2016-12-05 6 views
1

У меня есть набор из 20000 учебных примеров, по которым я хочу сделать двоичную классификацию. Проблема заключается в том, что набор данных сильно несбалансирован, и только около 1000 находятся в положительном классе. Я пытаюсь использовать xgboost (в R) для выполнения своего предсказания.Xgboost, занимающийся несбалансированными классификационными данными

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

Я попытался прочитать эту статью о том, как настроить параметры в xgboost. https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

Но это только упоминает, какие параметры помогают с несбалансированными наборами данных, но не как их настроить.

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

+0

Это может быть полезно http://stats.stackexchange.com/questions/171043/how-to-tune-hyperparameters-of-xgboost-trees – gfgm

ответ

0

Техника, полезная с нейронными сетями, заключается в том, чтобы ввести некоторый шум в наблюдения. В R есть функция «дрожания», чтобы сделать это. Для ваших 1000 редких случаев применяйте небольшое количество дрожания к их функциям, чтобы дать вам еще 1000 случаев. Запустите свой код еще раз и посмотрите, будут ли в настоящее время прогнозы получать какой-либо положительный класс. Вы можете экспериментировать с более добавленными случаями и/или изменять количество дрожания. HTH, cousin_pete

0

В соответствии с документом XGBoost параметр scale_pos_weight является тем, который касается несбалансированных классов. Смотрите, документация here

scale_pos_weight, [по умолчанию = 1] Контроль баланса положительных и отрицательных веса, полезные для неуравновешенных классов. Типичное значение для : сумма (отрицательные случаи)/сумма (положительные случаи) См. Параметры Настройка для дальнейшего обсуждения. Также см бозон Kaggle конкуренции демонстрацию примеров: R, PY1, PY2, PY3

0

Попробуйте что-нибудь подобное в R

bstSparse <- xgboost(data =xgbTrain , max_depth = 4, eta = 0.2, nthread = 2, nrounds = 200 , 
       eval_metric = "auc" , scale_pos_weight = 48, colsample_bytree = 0.7, 
       gamma = 2.5, 
       eval_metric = "logloss", 
       objective = "binary:logistic") 

Где scale_pos_weight является дисбаланс. Моя базовая заболеваемость составляет ~ 4%. используйте оптимизацию гиперпараметров. Можете попробовать это на scale_pos_weight слишком

Смежные вопросы