开始使用免费开始使用

使用 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
___(___, ___)
编辑并运行代码