R交叉验证
系统学习k折交叉验证、留一法,使用caret包自动调参评估模型 · 难度:入门 · +15XP
交叉验证:可靠评估模型性能
交叉验证将数据分成训练集和验证集多次,取平均性能,避免单次划分的偶然性。
1. k折交叉验证手动实现
data(iris)
set.seed(123)
folds <- sample(1:5, nrow(iris), replace=TRUE)
accuracy <- numeric(5)
for(k in 1:5){
train <- iris[folds!=k,]
test <- iris[folds==k,]
model <- rpart(Species ~ ., data=train, method='class')
pred <- predict(model, test, type='class')
accuracy[k] <- mean(pred == test$Species)
}
mean(accuracy)2. 使用caret包简化
library(caret)
ctrl <- trainControl(method='cv', number=5)
model_cv <- train(Species ~ ., data=iris, method='rpart', trControl=ctrl)
print(model_cv)3. 留一法LOOCV
ctrl_loocv <- trainControl(method='LOOCV')
model_loocv <- train(Species ~ ., data=iris, method='rpart', trControl=ctrl_loocv)
model_loocv交叉验证方法对比:
| 方法 | 优点 | 缺点 |
|---|---|---|
| k折 | 平衡偏差和方差 | k选择需经验 |
| LOOCV | 几乎无偏差 | 计算量大 |
练习提示:用caret对iris数据集做10折交叉验证,使用随机森林模型。