R caret extractPrediction与随机森林模型。错误:$操作符对原子向量无效。

问题描述 投票:1回答:1

我想使用函数来提取新的未见数据的预测。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)
r random-forest r-caret
1个回答
1
投票

我通过查看以下文档找到了解决方法 extractPrediction. 基本上,这个论点 models 并不想要一个单一的模型实例,而是想要一个模型列表。所以我只是插入了 list(my_rf = model) 而不仅仅 model.

caret::extractPrediction(models = list(my_rf = model), testX = vali[,-c(3,5,1)], testY = vali[,1])
© www.soinside.com 2019 - 2024. All rights reserved.