Đánh giá một quy trình mô hình hóa bằng n-fold cross-validation
Trong bài tập này, bạn sẽ dùng splitPlan (kế hoạch cross validation 3-fold từ bài trước) để tạo dự đoán từ một mô hình dự đoán mpg$cty dựa trên mpg$hwy.
Nếu dframe là dữ liệu huấn luyện, thì một cách để thêm một cột dự đoán cross validation vào frame như sau:
# Khởi tạo một cột có độ dài phù hợp
dframe$pred.cv <- 0
# k là số lượng folds
# splitPlan là kế hoạch cross validation
for(i in 1:k) {
# Lấy phần chia thứ i
split <- splitPlan[[i]]
# Xây dựng mô hình trên dữ liệu huấn luyện
# từ phần chia này
# (lm, trong trường hợp này)
model <- lm(fmla, data = dframe[split$train,])
# tạo dự đoán trên
# dữ liệu ứng dụng từ phần chia này
dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}
Cross-validation dự đoán mức độ tốt của một mô hình được xây từ toàn bộ dữ liệu sẽ hoạt động trên dữ liệu mới. Tương tự như tách test/train, với một quy trình mô hình hóa tốt, hiệu năng cross-validation và hiệu năng huấn luyện nên xấp xỉ nhau.
Data frame mpg, kế hoạch cross validation splitPlan, và hàm rmse() đã được nạp sẵn.
Bài tập này là một phần của khóa học
Học có giám sát với R: Hồi quy
Hướng dẫn bài tập
- Chạy kế hoạch cross validation 3-fold từ
splitPlanvà đưa các dự đoán vào cộtmpg$pred.cv.- Dùng
lm()và công thứccty ~ hwy.
- Dùng
- Tạo một mô hình hồi quy tuyến tính trên toàn bộ dữ liệu
mpg(công thứccty ~ hwy) và gán các dự đoán vàompg$pred. - Dùng
rmse()để lấy root mean squared error của các dự đoán từ mô hình đầy đủ (mpg$pred). Nhớ rằngrmse()nhận hai đối số: giá trị dự đoán và giá trị thực tế. - Lấy root mean squared error của các dự đoán từ cross-validation. Hai giá trị có xấp xỉ nhau không?
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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
___(___, ___)