在插入符号中获取测试数据集的预测以进行 k 折交叉验证
Obtaining predictions on test datasets for k-fold cross validation in caret
我有点困惑插入符号如何在 k 折交叉验证中对测试折进行评分。
我想生成一个数据框或矩阵,其中包含十个测试数据集在 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
不应该为十个测试折叠中的 150 条记录 生成预测(1/10 * 150 = 15 条记录每个测试折叠)? 450条记录是如何生成的?
默认情况下,train
迭代 rpart
的复杂性参数 cp
的三个值(参见 ?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
我有点困惑插入符号如何在 k 折交叉验证中对测试折进行评分。
我想生成一个数据框或矩阵,其中包含十个测试数据集在 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
不应该为十个测试折叠中的 150 条记录 生成预测(1/10 * 150 = 15 条记录每个测试折叠)? 450条记录是如何生成的?
默认情况下,train
迭代 rpart
的复杂性参数 cp
的三个值(参见 ?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