Validasi silang k-fold di r (langkah demi langkah)


Untuk mengevaluasi performa suatu model pada kumpulan data, kita perlu mengukur seberapa cocok prediksi yang dibuat oleh model tersebut dengan data yang diamati.

Metode yang umum digunakan untuk melakukan hal ini dikenal sebagai k-fold cross-validation , yang menggunakan pendekatan berikut:

1. Bagi kumpulan data secara acak menjadi k kelompok, atau “lipatan”, yang ukurannya kira-kira sama.

2. Pilih salah satu lipatan sebagai set penahan. Sesuaikan template dengan sisa k-1 lipatan. Hitung uji MSE pada pengamatan pada lapisan yang dikencangkan.

3. Ulangi proses ini sebanyak k kali, setiap kali menggunakan himpunan berbeda sebagai himpunan pengecualian.

4. Hitung UMK uji keseluruhan sebagai rata-rata UMK uji k .

Cara termudah untuk melakukan validasi silang k-fold di R adalah dengan menggunakan fungsi trainControl() dari perpustakaan caret di R.

Tutorial ini memberikan contoh singkat tentang cara menggunakan fungsi ini untuk melakukan validasi silang k-fold untuk model tertentu di R.

Contoh: Validasi Silang K-Fold di R

Misalkan kita memiliki kumpulan data berikut di R:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

Kode berikut menunjukkan cara menyesuaikan model regresi linier berganda dengan kumpulan data ini di R dan melakukan validasi silang k-fold dengan k = 5 kali untuk mengevaluasi performa model:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

Berikut cara menafsirkan hasilnya:

  • Tidak ada pra-pemrosesan yang dilakukan. Artinya, kami tidak menskalakan data dengan cara apa pun sebelum menyesuaikan model.
  • Metode pengambilan sampel ulang yang kami gunakan untuk mengevaluasi model adalah validasi silang 5 kali lipat.
  • Ukuran sampel untuk setiap set pelatihan adalah 8.
  • RMSE: kesalahan akar rata-rata kuadrat. Ini mengukur perbedaan rata-rata antara prediksi yang dibuat oleh model dan observasi sebenarnya. Semakin rendah RMSE, semakin akurat suatu model dalam memprediksi observasi aktual.
  • Rsquared: Ini adalah ukuran korelasi antara prediksi yang dibuat oleh model dan observasi aktual. Semakin tinggi R-kuadratnya, semakin akurat suatu model dalam memprediksi observasi aktual.
  • MAE: Rata-rata kesalahan absolut. Ini adalah perbedaan absolut rata-rata antara prediksi yang dibuat oleh model dan observasi sebenarnya. Semakin rendah MAE, semakin akurat suatu model dalam memprediksi observasi aktual.

Masing-masing dari tiga pengukuran yang diberikan dalam hasil (RMSE, R-squared, dan MAE) memberi kita gambaran tentang kinerja model pada data yang tidak dipublikasikan.

Dalam praktiknya, kami biasanya menyesuaikan beberapa model berbeda dan membandingkan tiga metrik yang diberikan oleh hasil yang disajikan di sini untuk memutuskan model mana yang menghasilkan tingkat kesalahan pengujian terendah dan oleh karena itu merupakan model terbaik untuk digunakan.

Kita dapat menggunakan kode berikut untuk memeriksa kecocokan model akhir:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

Model terakhirnya adalah:

kamu = 21,2672 + 0,7803*(x 1 ) – 1,12538(x 2 )

Kita dapat menggunakan kode berikut untuk menampilkan prediksi model yang dibuat untuk setiap lipatan:

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

Perhatikan bahwa dalam contoh ini kami memilih untuk menggunakan k=5 lipatan, namun Anda dapat memilih jumlah lipatan berapa pun yang Anda inginkan. Dalam praktiknya, kami biasanya memilih antara 5 dan 10 lapis, karena ini terbukti merupakan jumlah lapis optimal yang menghasilkan tingkat kesalahan pengujian yang dapat diandalkan.

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *