MulaiMulai sekarang secara gratis

Transformasi input: "hockey stick" (2)

Pada latihan sebelumnya, Anda melihat bahwa model kuadratik tampaknya lebih sesuai untuk data houseprice dibandingkan model linear. Dalam latihan ini, Anda akan memastikan apakah model kuadratik benar-benar berkinerja lebih baik pada data di luar sampel. Karena himpunan data ini kecil, Anda akan menggunakan cross-validation. Rumus kuadratik fmla_sqr yang Anda buat pada latihan sebelumnya dan data frame houseprice telah tersedia untuk digunakan.

Sebagai pembanding, kode contoh akan menghitung prediksi cross-validation dari model linear price ~ size.

Latihan ini adalah bagian dari kursus

Supervised Learning di R: Regresi

Lihat Kursus

Petunjuk latihan

  • Gunakan kWayCrossValidation() untuk membuat rencana pembagian untuk cross-validation 3-fold.
    • Anda dapat mengatur argumen ke-3 dan ke-4 fungsi tersebut ke NULL.
  • Tinjau dan jalankan kode contoh untuk mendapatkan prediksi cross-validation 3-fold dari model price ~ size dan tambahkan ke kolom pred_lin.
  • Dapatkan prediksi cross-validation untuk price sebagai fungsi dari size kuadrat. Tetapkan ke kolom pred_sqr.
    • Kode contoh memberikan prosedurnya.
    • Anda dapat menggunakan rencana pembagian yang sudah Anda buat.
  • Lengkapi bagian kosong untuk memutar (pivot) prediksi dan menghitung residual.
  • Lengkapi bagian kosong untuk membandingkan RMSE dari kedua model. Manakah yang lebih sesuai?

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

# 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 = ___)
Edit dan Jalankan Kode