使用 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
___(___, ___)