2016-05-05 4 views
1

У меня есть набор данных с 25000 строк и 761 столбцов, который включает в себя один столбец двоичного ответа. Мой двоичный ответ имел значения «-1» и «1». Я пытался запустить xgboost на него, и получаю сообщение об ошибке, которое says-Устранение неполадок XGBoost в R

xg_base<-xgboost(data = features,label = output,objective="binary:logistic",eta=1,nthreads=2,nrounds = 10 
      , verbose = T, print.every.n = 5) 


Error in xgb.iter.update(bst$handle, dtrain, i - 1, obj) : 
label must be in [0,1] for logistic regression 

Я изменил уровни моего ответа, используя следующую command-

levels(output)[levels(output)=="-1"] <- "0" 

я до сих пор продолжаю получать ту же ошибку , и я не уверен, в чем именно проблема. Важным моментом является то, что это редкая проблема обнаружения событий, причем доля положительных случаев составляет 1% от общего числа наблюдений. Может быть, причина в том, что я получаю ошибку?

+0

Я думаю, что переменная 'output' должна быть между 0 и 1, а не фактором. Возможно, вам нужно перекодировать ответ при использовании 'xgboost'. – steveb

ответ

5

После изменения -1 до 0, измените output от фактора цифровой:

output <- as.numeric(levels(output))[output] 

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

9

Только так это может помочь кто-то пытается преобразовать переменный фактор с уровнями 0 и 1 в ярлыки для ввода в XGBoost, вы должны знать, что вам нужно вычесть 1 после преобразования в целом (или числовой):

> f <- as.factor(c(0, 1, 1, 0)) 

# XGBoost will not accept this for label 
> as.integer(f) 
[1] 1 2 2 1 

# Correct label 
> as.integer(f) - 1 
[1] 0 1 1 0 
0

Перед запуском модели Xgboost мы должны помнить о некоторых шагах.

  1. Все переменные должны быть числовыми
  2. для бинарной классификации, ваша выходная переменная должна находиться в пределах от 0 до 1

Использование уровней (выход) [уровень (выход) == "- 1" ] < - «0», ваша переменная вывода будет символом. Измените его на числовое, сохраните диапазон от 0 до 1, и ваша модель Xgboost, вероятно, сработает.

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