获得对插入符号中 k 折交叉验证的测试数据集的预测

Rob*_*rtF 4 r prediction cross-validation r-caret

我有点困惑插入符号如何在 k 折交叉验证中对测试折叠进行评分。

我想生成一个数据框或矩阵,其中包含 10 折交叉验证中十个测试数据集的评分记录。

例如,使用 iris 数据集训练决策树模型:

install.packages("caret", dependencies=TRUE) 

library(caret)

data(iris)

train_control <- trainControl(method="cv", number=10, savePredictions = TRUE), 

model <- train(Species ~ ., data=iris, trControl=train_control, method="rpart")

model$pred
Run Code Online (Sandbox Code Playgroud)

model$pred命令列出了 450 条记录中十倍的预测。

这似乎不对 - 不应该对十个测试折叠中model$pred150 条记录产生预测(1/10 * 150 = 每个测试折叠 15 条记录)?450条记录是如何产生的?

luk*_*keA 5

默认情况下,为(请参阅)train的复杂性参数迭代三个值: cprpart?rpart.control

library(caret)
data(iris)
train_control <- trainControl(method="cv", number=10, savePredictions = TRUE) 

model <- train(Species ~ ., 
               data=iris, 
               trControl=train_control, 
               method="rpart")
nrow(model$pred)
# [1] 450
length(unique(model$pred$cp))
# [1] 3
Run Code Online (Sandbox Code Playgroud)

例如,您可以通过显式指定来更改它cp=0.05

model <- train(Species ~ ., 
               data=iris, 
               trControl=train_control, 
               method="rpart", 
               tuneGrid = data.frame(cp = 0.05))
nrow(model$pred)
# [1] 150
length(unique(model$pred$cp))
# [1] 1
Run Code Online (Sandbox Code Playgroud)

或使用tuneLength=1代替默认值3

model <- train(Species ~ ., 
               data=iris, 
               trControl=train_control, 
               method="rpart", 
               tuneLength = 1)
nrow(model$pred)
# [1] 150
length(unique(model$pred$cp))
# [1] 1
Run Code Online (Sandbox Code Playgroud)