R 检索插入符号中保持折叠的预测

R 检索插入符号中保持折叠的预测,r,cross-validation,r-caret,ensemble-learning,R,Cross Validation,R Caret,Ensemble Learning,我想知道如何恢复交叉验证预测。我感兴趣的是手动构建堆叠模型(),我需要模型对每个保持褶皱的预测。我附上一个简短的例子 # load the library library(caret) # load the iris dataset data(cars) # define folds cv_folds <- createFolds(cars$Price, k = 5, list = TRUE) # define training control train_control <- tr

我想知道如何恢复交叉验证预测。我感兴趣的是手动构建堆叠模型(),我需要模型对每个保持褶皱的预测。我附上一个简短的例子

# load the library
library(caret)
# load the iris dataset
data(cars)
# define folds
cv_folds <- createFolds(cars$Price, k = 5, list = TRUE)
# define training control
train_control <- trainControl(method="cv", index = cv_folds, savePredictions = 'final')
# fix the parameters of the algorithm
# train the model
model <- caret::train(Price~., data=cars, trControl=train_control, method="gbm", verbose = F)
# looking at predictions
model$pred

# verifying the number of observations
nrow(model$pred[model$pred$Resample == "Fold1",])
nrow(cars)
#加载库
图书馆(插入符号)
#加载iris数据集
数据(汽车)
#定义褶皱

cv_folds使用
createFolds
函数创建的折叠执行插入符号cv时,默认情况下使用序列索引。所以当你这么做的时候:

cv_folds <- createFolds(cars$Price, k = 5, list = TRUE)
每个都包含20%的数据

然后您在trainControl中指定了这些折叠:

train_control <- trainControl(method="cv", index = cv_folds, savePredictions = 'final')
返回643

你应该做的是:

cv_folds <- createFolds(cars$Price, k = 5, list = TRUE, returnTrain = TRUE)
培训完模特后:

nrow(model$pred[model$pred$Resample == "Fold1",])
#output
160

你可能想看看我已经看到了这个答案,然而,我对此有些怀疑。当我运行
子集(model$pred,Resample==“Fold01”)
时,我获得了一个大小等于9倍的data.frame,用于估算。然而,我想得到的是相反的结果,10%的数据预测没有用于估计。@abu这是错误的:从你的例子来看:
nrow(model$pred[model$pred$Resample==“Fold01”,])
是80,而
nrow(cars)
是80804@missuse你是对的,我确实没有对可复制的例子进行验证,但在我更复杂的问题上。在这种情况下,我得到了我在前面的评论中提到的问题。通过将您的代码应用于我的5倍简历,我获得了相当于80%的培训数据。@missue我编辑了这个问题,使其与我的案例更为相似,而不是它显示了我对80%数据的意思。顺便问一下,您知道为什么当我筛选“Fold05”时,我会获得“Fold01”(由我生成)中的索引吗?我的意思是为什么会有某种偏移。@abu,我不是不理解你,就是你不正确。当我运行时:
lappy(唯一(model$pred$Resample),函数(x){sum(model$pred$rowIndex[model$pred$Resample==x]%在%model$pred$rowIndex[model$pred$Resample!=x])
我得到所有0,因此,如果你能发布另一个问题,并举例说明这个问题,我很乐意尝试回答。我认为我们彼此不理解。我发布了另一个问题:。如果能得到进一步的帮助,我将不胜感激:)@missue太好了,只有一个问题:这些预测不是已经由$finalModel中的caret模型对象给出了吗?@agilebean预测在
model$pred
中<代码>$finalModel
包含使用最佳调整参数的所有列车数据上的实际安装模型。
cv_folds <- createFolds(cars$Price, k = 5, list = TRUE, returnTrain = TRUE)
lengths(cv_folds)
#output
Fold1 Fold2 Fold3 Fold4 Fold5 
  644   643   642   644   643 
nrow(model$pred[model$pred$Resample == "Fold1",])
#output
160