R caret extractПрогноз со случайной моделью леса: ошибка: оператор $ недопустим для векторов atomi c - PullRequest
1 голос
/ 26 мая 2020

Я хочу извлечь прогнозы для новых невидимых данных, используя функцию caret::extractPrediction со случайной моделью леса, но я не могу понять, почему мой код выдает ошибку Error: $ operator is invalid for atomic vectors. Как должны быть структурированы входные параметры, чтобы использовать эту функцию?

Вот мой воспроизводимый код:

library(caret)

dat <- as.data.frame(ChickWeight)
# create column set
dat$set <- rep("train", nrow(dat))
# split into train and validation set
set.seed(1)
dat[sample(nrow(dat), 50), which(colnames(dat) == "set")] <- "validation"

# predictors and response
all_preds <- dat[which(dat$set == "train"), which(names(dat) %in% c("Time", "Diet"))]
response <- dat[which(dat$set == "train"), which(names(dat) == "weight")]

# set train control parameters
contr <- caret::trainControl(method="repeatedcv", number=3, repeats=5)

# recursive feature elimination caret 
set.seed(1)
model <- caret::train(x = all_preds, 
                      y = response,
                      method ="rf",
                      ntree = 250, 
                      metric = "RMSE", 
                      trControl = contr)

# validation set
vali <- dat[which(dat$set == "validation"), ]

# not working
caret::extractPrediction(models = model, testX = vali[,-c(3,5,1)], testY = vali[,1])
caret::extractPrediction(models = model, testX = vali, testY = vali)

# works without problems
caret::predict.train(model, newdata = vali)

1 Ответ

1 голос
/ 26 мая 2020

Я нашел решение, просмотрев документацию extractPrediction. По сути, аргументу models нужен не единственный экземпляр модели, а список моделей. Поэтому я просто вставил list(my_rf = model), а не только model.

caret::extractPrediction(models = list(my_rf = model), testX = vali[,-c(3,5,1)], testY = vali[,1])
...