Bắt đầu ngayBắt đầu miễn phí

Đá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

Xem khóa học

Hướng dẫn bài tập

  • Chạy kế hoạch cross validation 3-fold từ splitPlan và đưa các dự đoán vào cột mpg$pred.cv.
    • Dùng lm() và công thức cty ~ hwy.
  • 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ức cty ~ hwy) và gán các dự đoán vào mpg$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ằng rmse() 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
___(___, ___)
Chỉnh sửa và Chạy Mã