Evaluasi prosedur pemodelan menggunakan n-fold cross-validation
Dalam latihan ini, Anda akan menggunakan splitPlan, rencana cross-validation 3-fold dari latihan sebelumnya, untuk membuat prediksi dari model yang memprediksi mpg$cty dari mpg$hwy.
Jika dframe adalah data latih, maka salah satu cara menambahkan kolom prediksi cross-validation ke frame adalah sebagai berikut:
# Inisialisasi kolom dengan panjang yang sesuai
dframe$pred.cv <- 0
# k adalah jumlah fold
# splitPlan adalah rencana cross-validation
for(i in 1:k) {
# Ambil split ke-i
split <- splitPlan[[i]]
# Bangun model pada data latih
# dari split ini
# (lm, dalam kasus ini)
model <- lm(fmla, data = dframe[split$train,])
# buat prediksi pada
# data aplikasi dari split ini
dframe$pred.cv[split$app] <- predict(model, newdata = dframe[split$app,])
}
Cross-validation memprediksi seberapa baik model yang dibangun dari seluruh data akan berkinerja pada data baru. Seperti pada pembagian latih/uji, untuk prosedur pemodelan yang baik, kinerja cross-validation dan kinerja pelatihan seharusnya berdekatan.
Data frame mpg, rencana cross-validation splitPlan, dan fungsi rmse() telah dimuat sebelumnya.
Latihan ini adalah bagian dari kursus
Supervised Learning di R: Regresi
Petunjuk latihan
- Jalankan rencana cross-validation 3-fold dari
splitPlandan letakkan prediksi pada kolommpg$pred.cv.- Gunakan
lm()dan rumuscty ~ hwy.
- Gunakan
- Buat model regresi linear pada seluruh data
mpg(rumuscty ~ hwy) dan tetapkan prediksinya kempg$pred. - Gunakan
rmse()untuk mendapatkan root mean squared error dari prediksi model penuh (mpg$pred). Ingat bahwarmse()menerima dua argumen: nilai prediksi dan keluaran aktual. - Dapatkan root mean squared error dari prediksi cross-validation. Apakah kedua nilainya kurang lebih sama?
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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
___(___, ___)