我有一个包含25000行和761列的数据集,其中包含一个二进制响应列。我的二元响应有值' -1'和' 1'。我试图在它上面运行xgboost,并且不断收到错误信息 -
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
我使用以下命令更改了响应级别 -
levels(output)[levels(output)=="-1"] <- "0"
我仍然遇到同样的错误,我不确定究竟是什么问题。一个重要的一点是,这是一个罕见的事件检测问题,阳性病例的比例占总观察量的1%。这可能是我收到错误的原因吗?
答案 0 :(得分:10)
这样可能有助于某人尝试将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
答案 1 :(得分:5)
将-1改为0后,将output
从因子更改为数字:
output <- as.numeric(levels(output))[output]
我不认为这是一个罕见的事件检测问题与错误有关。