R,xgboost:标签必须在 [0,1] 以进行逻辑回归

R, xgboost: label must be in [0,1] for logistic regression

我收到一条错误消息,提示我的标签必须位于 [0, 1]:

> system.time(xgb <- xgboost(params  = param,
+                            data    = dtrain,
+                            label   = as.numeric(train.label),
+                            nrounds = 500,
+                            print_every_n = 100,
+                            verbose = 1))
Error in xgb.iter.update(bst$handle, dtrain, iteration - 1, obj) : 
  [10:39:29] amalgamation/../src/objective/regression_obj.cc:108: label must be in [0,1] for logistic regression
Timing stopped at: 0.11 0 0.11

但是,我的标签在 [0, 1]:

> train.label
   [1] 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 . . .
 [ reached getOption("max.print") -- omitted 38907 entries ]
Levels: 0 1

我也尝试过转换为 numeric 数据类型,但没有成功。

问题是你的train.label是一个因子,所以你的代码

as.numeric(train.label)

将生成一个包含 1 和 2 的向量。你想要 0 和 1 作为值,所以你需要使用。

as.numeric(as.character(train.label))