Я студент-актуарий, готовящийся к предстоящему экзамену по прогностической аналитике в декабре.Частью упражнения является построение модели с использованием бустинга с помощью caret и xgbTree.См. Код ниже, набор данных для каравана взят из пакета ISLR:
library(caret)
library(ggplot2)
set.seed(1000)
data.Caravan <- read.csv(file = "Caravan.csv")
data.Caravan$Purchase <- factor(data.Caravan$Purchase)
levels(data.Caravan$Purchase) <- c("No", "Yes")
data.Caravan.train <- data.Caravan[1:1000, ]
data.Caravan.test <- data.Caravan[1001:nrow(data.Caravan), ]
grid <- expand.grid(max_depth = c(1:7),
nrounds = 500,
eta = c(.01, .05, .01),
colsample_bytree = c(.5, .8),
gamma = 0,
min_child_weight = 1,
subsample = .6)
control <- trainControl(method = "cv",
number = 4,
classProbs = TRUE,
sampling = c("up", "down"))
caravan.boost <- train(formula = Purchase ~ .,
data = data.Caravan.train,
method = "xgbTree",
metric = "Accuracy",
trControl = control,
tuneGrid = grid)
Определения в expand.grid и trainControl были заданы проблемой, но я получаю сообщение об ошибке:
Error: sampling methods are only implemented for classification problems
Если я удаляю метод выборки из trainControl, я получаю новую ошибку, которая гласит: «Метрическая точность не применима для регрессионных моделей».Если я удаляю метрику точности, я получаю сообщение об ошибке
cannnot compute class probabilities for regression" and "Error in names(res$trainingData) %in% as.character(form[[2]]) : argument "form" is missing, with no default"
В конечном итоге проблема заключается в том, что каретка определяет проблему как регрессию, а не классификацию, даже если целевая переменная установлена как фактор-переменная и classProbsустановлен на TRUE.Может кто-нибудь объяснить, как заставить карету выполнять классификацию, а не регресс?