使用 n 折交叉验证评估建模流程
在本练习中,您将使用上一个练习得到的 3 折交叉验证计划 splitPlan,基于模型 mpg$hwy 预测 mpg$cty 并给出预测结果。
如果 dframe 是训练数据,向数据框添加一列交叉验证预测的一种方法如下:
# 初始化合适长度的列
dframe$pred.cv <- 0
# k 是折数
# splitPlan 是交叉验证计划
for(i in 1:k) {
# 获取第 i 个切分
split <- splitPlan[[i]]
# 在该切分的训练数据上
# 拟合模型(此处为 lm)
model <- lm(fmla, data = dframe[split$train,])
# 在该切分的应用数据上
# 进行预测
dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}
交叉验证用于预测:由全部数据训练出的模型,在新数据上的表现会如何。与测试集/训练集划分类似,对于良好的建模流程,交叉验证性能应与训练性能接近。
数据框 mpg、交叉验证计划 splitPlan,以及函数 rmse() 已预加载。
本练习是课程的一部分
R 中的监督学习:回归
练习说明
- 运行来自
splitPlan的 3 折交叉验证计划,并将预测结果放入列mpg$pred.cv。- 使用
lm()和公式cty ~ hwy。
- 使用
- 在全部
mpg数据上创建一个线性回归模型(公式cty ~ hwy),并将预测赋给mpg$pred。 - 使用
rmse()计算完整模型预测(mpg$pred)的均方根误差。请回忆:rmse()需要两个参数,即预测值与实际结果。 - 计算交叉验证预测的均方根误差。这两个值是否大致相同?
交互式实操练习
通过完成这段示例代码来试试这个练习。
# mpg is available
summary(mpg)
# splitPlan is available
str(splitPlan)
# Run the 3-fold cross validation plan from splitPlan
k <- ___ # Number of folds
mpg$pred.cv <- 0
for(i in ___) {
split <- ___
model <- lm(___, data = ___)
mpg$pred.cv[___] <- predict(___, newdata = ___)
}
# Predict from a full model
mpg$pred <- ___(___(cty ~ hwy, data = mpg))
# Get the rmse of the full model's predictions
___(___, ___)
# Get the rmse of the cross-validation predictions
___(___, ___)