开始使用免费开始使用

输入变换:"hockey stick"(2)

在上一个练习中,您看到二次模型似乎比线性模型更适合 houseprice 数据。 本练习中,您将确认二次模型在样本外数据上是否表现更好。 由于数据集较小,您将使用交叉验证。上一个练习中创建的二次公式 fmla_sqr 和数据框 houseprice 已为您准备好。

为了对比,示例代码会计算线性模型 price ~ size 的交叉验证预测。

本练习是课程的一部分

R 中的监督学习:回归

查看课程

练习说明

  • 使用 kWayCrossValidation() 创建 3 折交叉验证的切分计划。
    • 可以将函数的第 3、4 个参数设为 NULL
  • 查看并运行示例代码,获取模型 price ~ size 的 3 折交叉验证预测,并将其添加到列 pred_lin
  • 获取价格关于平方尺寸的交叉验证预测。将结果保存到列 pred_sqr
    • 示例代码给出了具体流程。
    • 您可以使用刚创建的切分计划。
  • 填空以整形(pivot)预测结果并计算残差。
  • 填空以比较两个模型的 RMSE。哪个模型拟合更好?

交互式实操练习

通过完成这段示例代码来试试这个练习。

# houseprice is available
summary(houseprice)

# fmla_sqr is available
fmla_sqr

# Create a splitting plan for 3-fold cross validation
set.seed(34245)  # set the seed for reproducibility
splitPlan <- ___

# Sample code: get cross-val predictions for price ~ size
houseprice$pred_lin <- 0  # initialize the prediction vector
for(i in 1:3) {
  split <- splitPlan[[i]]
  model_lin <- lm(price ~ size, data = houseprice[split$train,])
  houseprice$pred_lin[split$app] <- predict(model_lin, newdata = houseprice[split$app,])
}

# Get cross-val predictions for price as a function of size^2 (use fmla_sqr)
houseprice$pred_sqr <- 0 # initialize the prediction vector
for(i in 1:3) {
  split <- ___
  model_sqr <- lm(___, data = houseprice[split$train, ])
  houseprice$___[split$app] <- predict(___, newdata = houseprice[split$app, ])
}

# Pivot the predictions and calculate the residuals
houseprice_long <- houseprice %>%
  pivot_longer(cols = c('pred_lin', 'pred_sqr'), names_to = 'modeltype', values_to = 'pred') %>%
  mutate(residuals = ___)

# Compare the cross-validated RMSE for the two models
houseprice_long %>% 
  group_by(modeltype) %>% # group by modeltype
  summarize(rmse = ___)
编辑并运行代码