我有一个包含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
Run Code Online (Sandbox Code Playgroud)
我使用以下命令更改了我的响应级别 -
levels(output)[levels(output)=="-1"] <- "0"
Run Code Online (Sandbox Code Playgroud)
我仍然一直得到同样的错误,我不确定究竟是什么问题.一个重要的一点是,这是一个罕见的事件检测问题,阳性病例的比例占总观察量的1%.这可能是我收到错误的原因吗?
aru*_*run 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
Run Code Online (Sandbox Code Playgroud)
小智 5
将-1更改为0后,output
从因子更改为数字:
output <- as.numeric(levels(output))[output]
Run Code Online (Sandbox Code Playgroud)
我不认为这是一个罕见的事件检测问题与错误有关.