Lensa ML

Cross-Validation

Langkah 1 dari 6: Masalah Satu Kali Pembagian

Estimasi yang tidak stabil

Titik data: train (abu-abu), test (hijau)Akurasi test per seed74%Seed
Seed
1
Akurasi train
87.8%
Akurasi test
73.9%
Std antar-seed
±5.9%

Satu kali pembagian memberi estimasi yang tidak andal: skornya bergantung pada titik mana yang masuk ke test set.

Geser random seed dari 1 sampai 20 dan lihat batang akurasi test melompat. Di 20 seed ini, model yang sama mendapat skor antara sekitar 72% dan 91%, hanya karena titik yang masuk ke test set berbeda. Dengan 30 titik dan pembagian 70/30, test set berisi sekitar 9 titik, jadi tiap titik bernilai sekitar 11 poin persentase. Standard error dari akurasi p yang diukur pada n titik adalah √(p(1 − p)/n). Untuk p = 0.8 dan n = 9, nilainya sekitar 13 poin.

Langkah 2 dari 6: K-Fold Cross-Validation

Setiap titik ikut divalidasi

Pembagian 5-fold: 5 fold berwarnaF1F2F3F4F5Tiap baris = satu iterasi (yang disorot = validation)F1F2F3F4F5
K
5
Ukuran fold
6
Train/fold
24
Val/fold
6

Pada k-fold, setiap titik divalidasi tepat satu kali dan dipakai untuk training di k − 1 putaran lainnya.

Geser k dari 2 sampai 10 dan lihat ukuran fold menyusut dari 15 titik ke 3. Setiap dari k model dilatih pada (k − 1)/k bagian data, jadi k = 5 dilatih pada 80% dan k = 10 pada 90%. Karena itu skor rata-ratanya memperkirakan model yang dilatih pada porsi tersebut, bukan pada semua data, sehingga hasilnya sedikit pesimistis. Acak data sebelum membagi fold. Fold di sini berupa blok berurutan, dan kalau datanya terurut menurut label atau tanggal, tiap blok akan melihat potongan distribusi yang berbeda.

Langkah 3 dari 6: Menelusuri Tiap Fold

Validation set bergiliran

Fold 1 / 5
Fold 1 sebagai validationAkurasi per foldFold 184.7%Fold 2Fold 3Fold 4Fold 5μ=84.7
Fold
1/5
Akurasi fold
84.7%
Rata-rata
84.7%
Simpangan baku
±0.0%

Setiap fold bergiliran menjadi validation set, lalu skor semua fold dirata-ratakan menjadi satu estimasi.

Tekan Putar, atau geser slider fold dari 1 sampai 5, untuk mengisi batang tiap fold. Akurasi kelima fold berkisar dari 82,8% sampai 85,5%, dan rata-rata berjalannya berhenti di 84,6%. Laporkan rata-rata bersama sebarannya. Skor antar-fold tidak independen, karena dua fold mana pun berbagi sebagian besar data training, jadi simpangan baku antar-fold lebih kecil daripada ketidakpastian yang sebenarnya. Repeated k-fold, yang mengacak ulang dan menjalankan seluruh prosedur beberapa kali, memberi rata-rata yang lebih stabil.

Langkah 4 dari 6: Stratified K-Fold

Menjaga keseimbangan kelas

Stratified 5-fold: distribusi kelas per foldKelas 0 (20)Kelas 1 (10)ideal 33%F14/2F24/2F34/2F44/2F54/2
K
5
Rasio kelas
33%
Deviasi maks
0.0%
Keseimbangan
100%

Stratified fold menjaga campuran kelas di tiap fold tetap dekat dengan rasio keseluruhan. Ini paling berpengaruh untuk kelas yang langka. Dengan k = 5, kedua kelas terbagi rata, jadi setiap fold cocok persis dengan rasio keseluruhan.

Geser slider k dan baca jumlah kelas di atas tiap batang. Dataset ini berisi 20 contoh kelas 0 dan 10 contoh kelas 1. Dengan fold acak biasa berisi 6 titik, sebuah fold punya peluang sekitar 6,5% untuk tidak berisi kelas 1 sama sekali, dan pada fold itu recall tidak bisa dihitung. Stratifikasi membagi contoh tiap kelas ke fold secara terpisah. Untuk regresi, ide yang sama berjalan dengan mengelompokkan target ke dalam beberapa bin. Ketika beberapa baris saling berkaitan, seperti beberapa hasil pindaian dari satu pasien, group k-fold menyimpan tiap kelompok di dalam satu fold.

Langkah 5 dari 6: Leave-One-Out

Kasus ekstrem

Titik test: 1 / 15
Leave-one-out: titik 1 dipisahkan123456789101112131415N iterasi, masing-masing training pada N−1 titik1 / 15 iterasiBiaya komputasi tumbuh sebesar O(N²): 15² = 225 unit relatif
N
15
Fold
15
Biaya (N²)
225
Variance
±0.63

LOO memakai N fold: nyaris tanpa bias, tetapi variance estimasinya tinggi dan model harus dilatih N kali.

Geser ukuran dataset N dari 5 sampai 30, lalu tekan Putar. LOO melatih N model, masing-masing pada N − 1 titik, sehingga training set-nya nyaris identik. Dari sinilah variance-nya yang tinggi berasal: N model itu nyaris model yang sama, jadi error-nya berkorelasi kuat dan tidak saling meniadakan saat dirata-ratakan. Regresi linear punya jalan pintas. Error LOO bisa didapat dari satu kali fit sebagai rata-rata (e_i / (1 − h_i))², dengan e_i sebagai residual dan h_i sebagai leverage titik i.

Langkah 6 dari 6: Memilih k

Bias-variance pada estimator

Skor CV vs k707580859095Skor %251015202530k (jumlah fold)k=5k=1083.5±2.6
K
5
Skor rata-rata
83.5%
Simpangan baku
±2.6%
Biaya
Rendah

Kompromi standar: k = 5 atau 10 menyeimbangkan bias, variance, dan biaya komputasi.

Geser k dari 2 sampai 30 dan perhatikan error bar-nya. k yang lebih kecil melatih tiap model pada data yang lebih sedikit, sehingga estimasinya terdorong turun. k yang lebih besar mengurangi bias itu, tetapi butuh k kali fit model. Studi Kohavi tahun 1995 pada dataset sungguhan merekomendasikan stratified 10-fold cross-validation, dan k = 5 atau 10 masih menjadi pilihan bawaan. Memakai cross-validation yang sama untuk menyetel hyperparameter sekaligus melaporkan skor akhir membuat performa terlihat lebih bagus dari kenyataannya. Nested cross-validation mengatasi ini dengan putaran dalam untuk tuning dan putaran luar untuk penilaian.

Apa itu cross-validation?

Cross-validation adalah cara memperkirakan performa model pada data baru dengan melatih dan mengujinya beberapa kali pada pembagian yang berbeda dari dataset yang sama. Pada k-fold cross-validation, data dipotong menjadi k bagian yang sama besar. Setiap bagian menjadi validation set satu kali sementara k − 1 bagian lainnya melatih model, lalu k skor itu dirata-ratakan. Hasilnya lebih stabil daripada estimasi dari satu train/test split mana pun.

Cross-validation adalah cara standar untuk membandingkan model dan menyetel hyperparameter ketika datanya terbatas, dari memilih kekuatan regularization pada logistic regression sampai menentukan kedalaman gradient-boosted tree. Alat seperti GridSearchCV di scikit-learn menjalankannya otomatis untuk setiap kandidat pengaturan. Studi medis dan ilmiah dengan beberapa ratus sampel banyak mengandalkannya, karena tidak sanggup menyisihkan validation set tetap yang besar.

Ide utama

  • Satu train/test split memberi estimasi yang tidak stabil dan bergantung pada titik mana yang masuk ke test set.
  • Pada k-fold cross-validation, setiap titik divalidasi tepat satu kali dan ikut melatih model k − 1 kali.
  • Skor akhir adalah rata-rata antar-fold, dilaporkan bersama sebarannya.
  • Stratified fold menjaga proporsi kelas tetap stabil, dan group fold menjaga baris yang berkaitan tetap bersama.
  • Leave-one-out nyaris tanpa bias, tetapi mahal dan variance-nya tinggi.
  • k = 5 atau k = 10 adalah kompromi yang biasa antara bias, variance, dan biaya komputasi.

Pertanyaan umum

Apakah cross-validation mencegah overfitting?

Tidak. Cross-validation mengukur overfitting, bukan mencegahnya: model yang menghafal training fold-nya akan mendapat skor buruk pada fold yang dipisahkan, dan rata-ratanya akan memperlihatkan itu. Memilih di antara banyak model berdasarkan skor cross-validation juga bisa menyebabkan overfitting ke fold-nya. Karena itu test set akhir atau nested cross-validation tetap dibutuhkan.

Model mana yang di-deploy setelah k-fold cross-validation?

Biasanya bukan salah satu dari k model itu. Cross-validation dipakai untuk memilih pengaturan, lalu satu model akhir dilatih pada semua data training yang tersedia dengan pengaturan tersebut. Skor cross-validation adalah estimasi performa model akhir itu.

Bagaimana cross-validation untuk time series?

Fold acak akan membuat model belajar dari masa depan untuk memprediksi masa lalu. Cross-validation untuk time series memakai window yang melebar atau bergeser: lakukan training pada data sampai waktu t, validasi pada blok berikutnya, lalu majukan t dan ulangi. scikit-learn menyediakannya sebagai TimeSeriesSplit.

Di mana preprocessing dilakukan dalam cross-validation?

Di dalam tiap fold. Scaling, imputation, dan feature selection harus di-fit hanya pada bagian training dari fold itu, lalu diterapkan ke bagian validation-nya. Kalau di-fit pada seluruh dataset lebih dulu, informasi dari baris validation ikut bocor dan skornya naik secara semu.

Penjelasan terkait

Referensi

  1. Kohavi (1995), "A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection", IJCAI
  2. Bengio & Grandvalet (2004), "No Unbiased Estimator of the Variance of K-Fold Cross-Validation", JMLR
  3. Cawley & Talbot (2010), "On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation", JMLR
  4. James, Witten, Hastie & Tibshirani, "An Introduction to Statistical Learning", ch. 5

Terakhir diperbarui