对R

时间:2016-05-05 03:42:26

标签: r xgboost

我有一个包含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%。这可能是我收到错误的原因吗?

2 个答案:

答案 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]

我不认为这是一个罕见的事件检测问题与错误有关。