開始使用免費開始

輸入轉換:曲棍球棒(2)

在上一個練習中,你看到二次模型似乎比線性模型更能擬合 houseprice 資料。 在本練習中,你會確認二次模型在樣本外資料上是否表現更好。 由於這個資料集很小,你會使用交叉驗證。你在上一個練習建立的二次公式 fmla_sqr,以及資料框 houseprice 都已可供使用。

為了比較,範例程式碼會計算線性模型 price ~ size 的交叉驗證預測。

本練習屬於課程

R 中的監督式學習:回歸

檢視課程

練習說明

  • 使用 kWayCrossValidation() 建立 3 摺交叉驗證的切分計畫。
    • 你可以把此函式的第 3 與第 4 個引數設為 NULL
  • 檢視並執行範例程式碼,取得模型 price ~ size 的 3 摺交叉驗證預測,並將其加入欄位 pred_lin
  • 取得以平方後的 size 作為自變數時,對 price 的交叉驗證預測。將結果指定到欄位 pred_sqr
    • 範例程式碼已提供操作流程。
    • 你可以使用已建立好的切分計畫。
  • 依提示填入空格,將預測結果進行樞紐整理並計算殘差。
  • 依提示填入空格,比較兩個模型的 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 = ___)
編輯並執行程式碼