У меня много проблем с выяснением того, как правильно установить num_classes для xgboost.Понимание num_classes для xgboost в R
У меня есть пример, используя данные 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. Любая помощь будет оценена по достоинству.
'num_class' - количество различных классов для задачи классификации. В вашем случае с набором данных 'iris' он должен быть установлен на 3. –
Он установлен в 3. Ошибка, вставленная выше, из этой настройки. – House
Не могли бы вы вывести вывод 'unique (y)'? –