我在弄清楚如何正确设置 xgboost 的 num_classes 时遇到了很多麻烦。
我有一个使用 Iris 数据的示例
df <- iris
y <- df$Species
num.class = length(levels(y))
levels(y) = 1:num.class
head(y)
df <- df[,1:4]
y <- as.matrix(y)
df <- as.matrix(df)
param <- list("objective" = "multi:softprob",
"num_class" = 3,
"eval_metric" = "mlogloss",
"nthread" = 8,
"max_depth" = 16,
"eta" = 0.3,
"gamma" = 0,
"subsample" = 1,
"colsample_bytree" = 1,
"min_child_weight" = 12)
model <- xgboost(param=param, data=df, label=y, nrounds=20)
这会返回一个错误
Error in xgb.iter.update(bst$handle, dtrain, i - 1, obj) :
SoftmaxMultiClassObj: label must be in [0, num_class), num_class=3 but found 3 in label
如果我将 num_class 更改为 2,我会得到同样的错误。如果我将 num_class 增加到 4,那么模型就会运行,但我会得到 600 个预测概率,这对于 4 个类是有意义的。
我不确定我是否犯了错误,或者我是否无法理解 xgboost 的工作原理。任何帮助,将不胜感激。