我看到很多R代码,其中完整的数据集首先被分成训练集和测试集:
library(caret)
library(klaR)
# load the iris dataset
data(iris)
# define a 80%/20% train/test split of the dataset
trainIndex <- createDataPartition(iris$Species, p=0.8, list=FALSE)
data_train <- iris[trainIndex,]
data_test <- iris[-trainIndex,]
第二次,定义了一个分区方法,例如重复的k折交叉验证:
train_control <- trainControl(method="repeatedcv", number=10, repeats=3)
然后使用训练集训练模型:
my_model <- train(Species~., data=data_train, trControl=train_control, method="nb")
最后,在测试集上执行预测:
pred_results <- predict(my_model, newdata=data_test)
当特别使用(重复的)k折交叉验证方法时,在我看来,训练(n = k-1倍)和测试(n = 1倍)集已经固有地定义 .
在这种情况下,为什么通过首先将完整数据集拆分为80%培训和20%测试集来添加额外的分区层?有必要吗?
1 回答
在统计学习导论的第2.2章中,可用here
阅读整章,包括偏差/差异权衡 .
tldr;您需要在看不见的数据上测试训练有素的算法,以了解它的执行情况 . 如果您将测试数据包含在培训中(10倍或不高),您的算法已经看到了这些情况 . 你对自己的预测过于自信 .