開始使用免費開始

使用 n 折交叉驗證評估建模流程

在這個練習中,你會使用上一題建立的 3 折交叉驗證計畫 splitPlan,來從一個以 mpg$hwy 預測 mpg$cty 的模型產生預測。

dframe 是訓練資料,其中一種把交叉驗證預測加入為新欄位的方法如下:

# 先初始化一個長度相符的欄位
dframe$pred.cv <- 0 

# k 是折數
# splitPlan 是交叉驗證計畫

for(i in 1:k) {
  # 取得第 i 個 split
  split <- splitPlan[[i]]

  # 在這個 split 的訓練資料上
  # 建立模型(此例為 lm)
  model <- lm(fmla, data = dframe[split$train,])

  # 在這個 split 的應用資料上
  # 進行預測
  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
___(___, ___)
編輯並執行程式碼