#r #machine-learning #r-caret
#r #машинное обучение #r-каретка
Вопрос:
Я новичок в R и пытаюсь изучить и выполнить ml в r.
Я получаю эту ошибку при запуске gbm
из caret
: Error in { : task 1 failed - "inputs must be factors"
.
С тем же parameters
успехом он отлично работал для многих других алгоритмов rf
, таких как — и т.д. adaboost
Код для справки:
fitCtrl_2 <- trainControl(
method = "cv",
# repeats = 5,
number = 10,
savePredictions = "final",
classProbs = TRUE,
summaryFunction = twoClassSummary
)
Приведенный ниже код выдает ошибку
set.seed(123)
system.time(
model_gbm <- train(pull(y) ~ duration nr.employed euribor3m pdays emp.var.rate poutcome.success month.mar cons.conf.idx contact.telephone contact.cellular previous age cons.price.idx month.jun job.retired,
data = train,
method = "gbm", # Added for gbm
distribution="gaussian", # Added for gbm
metric = "ROC",
bag.fraction=0.75, # Added for gbm
# tuneLenth = 10,
trControl = fitCtrl_2)
)
Приведенный ниже код отлично работал с теми же данными
Модель SVM
set.seed(123)
system.time(
model_svm <- train(pull(y) ~ duration nr.employed euribor3m pdays emp.var.rate poutcome.success month.mar cons.conf.idx contact.telephone contact.cellular previous age cons.price.idx month.jun job.retired,
data = train,
method = "svmRadial",
tuneLenth = 10,
trControl = fitCtrl_2)
)
Я просмотрел другие сообщения SO, касающиеся этой проблемы, но неясно, что именно мне нужно сделать, чтобы это исправить.
Ответ №1:
Похоже, что вы выполняете классификацию, если это так, распределение должно быть «бернулли» вместо «гауссова», ниже приведен пример:
set.seed(111)
df = data.frame(matrix(rnorm(1600),ncol=16))
colnames(df) = c("duration", "nr.employed", "euribor3m", "pdays", "emp.var.rate",
"poutcome.success", "month.mar", "cons.conf.idx", "contact.telephone",
"contact.cellular", "previous", "age", "cons.price.idx", "month.jun",
"job.retired")
df$y = ifelse(runif(100)>0.5,"a","b")
mod = as.formula("y ~ duration nr.employed euribor3m pdays emp.var.rate poutcome.success month.mar cons.conf.idx contact.telephone contact.cellular previous age cons.price.idx month.jun job.retired")
model_gbm <- train(mod, data = df,
method = "gbm",
distribution="gaussian",
metric = "ROC",
bag.fraction=0.75,
trControl = fitCtrl_2)
Вы получаете сообщение об ошибке:
Error in { : task 1 failed - "inputs must be factors"
Установите для него значение bernoulli, и все будет в порядке:
model_gbm <- train(mod, data = df,
method = "gbm",
distribution="bernoulli",
metric = "ROC",
bag.fraction=0.75,
trControl = fitCtrl_2)
model_gbm
Stochastic Gradient Boosting
100 samples
15 predictor
2 classes: 'a', 'b'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 90, 91, 90, 90, 89, 90, ...
Resampling results across tuning parameters:
interaction.depth n.trees ROC Sens Spec
1 50 0.6338333 0.7233333 0.500
1 100 0.6093333 0.6533333 0.510
1 150 0.6193333 0.6500000 0.555
2 50 0.6445000 0.6900000 0.545
2 100 0.6138333 0.6166667 0.620
2 150 0.6085000 0.6700000 0.555
3 50 0.5770000 0.6466667 0.555
3 100 0.5756667 0.6066667 0.530
3 150 0.5808333 0.6300000 0.530
Комментарии:
1. большое спасибо @StupidWolf, он работает с «bernoulli».