Функция train в карете возвращает сообщение об ошибке
Я использую функцию caret train(), чтобы найти оптимальное значение cp для дерева решений CART, приняв в качестве метрики F1 через пользовательскую функцию. Функция train () возвращает ошибку, которую я не могу понять. Возможно, проблема заключается в том, как я определяю, я даю воспроизводимый пример, и я буду признателен за ваш совет.
> library(data.table)
> library(ROSE)
> data(hacide)
> train <- hacide.train
> test <- hacide.test
> numFolds = trainControl(method = "cv" , number = 10)
> cpGrid = expand.grid(.cp = seq(0.01, 0.5, 0.01))
> f1 <- function(data, lev = NULL, model = NULL) {
+ f1_val <- F1_Score(y_pred = data$pred, y_true = data$obs, positive = lev[1])
+ c(F1 = f1_val)
+ }
> set.seed(12)
> train(cls ~ ., data = train,
+ method = "rpart",
+ tuneLength = 5,
+ metric = "F1",
+ trControl = trainControl(summaryFunction = f1,
+ classProbs = TRUE))
Error in train.default(x, y, weights = w, ...) :
At least one of the class levels is not a valid R variable name; This will cause errors when class probabilities are generated because the variables names will be converted to X0, X1 . Please use factor levels that can be used as valid R variable names (see ?make.names for help).
> levels(train$cls)
[1] "0" "1"
> class(train$cls)
[1] "factor"
0 ответов
Вы можете попробовать это:
levels(train$cls) <- make.names(levels(train$cls))
Затем запустите свою модель, это должно решить вашу проблему. К сожалению, ваш пример не воспроизводится, поскольку вы пропустили определение функции F1_Score в своем вопросе. Посмотрите, работает ли это.
Ниже работает для меня:
levels(train$cls) <- make.names(levels(train$cls))
set.seed(12)
train(cls ~ ., data = train,method = "rpart",tuneLength = 5,
metric = "ROC", trControl = trainControl(summaryFunction = twoClassSummary, classProbs = TRUE))