我有点困惑,在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条记录?
答案 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