在插入符号

时间:2016-04-08 19:57:27

标签: r prediction r-caret cross-validation

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

默认情况下,train会为cp的复杂性参数rpart迭代三个值(请参阅?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

您可以更改它,例如明确指定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

或使用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