Apa tujuan utama menerapkan k-fold cross-validation

Validasi silang, estimasi rotasi, atau pengujian di luar sampel[1][2][3] adalah sebuah teknik validasi model untuk menilai bagaimana hasil statistik analisis akan menggeneralisasi kumpulan data independen. Teknik ini utamanya digunakan untuk melakukan prediksi model dan memperkirakan seberapa akurat sebuah model prediktif ketika dijalankan dalam praktiknya. Dalam sebuah masalah prediksi, sebuah model biasanya diberikan kumpulan data (dataset) yang diketahui untuk digunakan dalam menjalankan pelatihan (dataset pelatihan), serta kumpulan data yang tidak diketahui (atau data yang pertama kali dilihat) terhadap model yang diuji (pengujian dataset).[4] Tujuan dari validasi silang adalah untuk mendefinisikan dataset untuk "menguji" model dalam tahap pelatihan (yaitu, validasi data), dalam rangka untuk membatasi masalah seperti terjadinya overfitting, memberikan wawasan tentang bagaimana model akan menggeneralisasi independen dataset (yaitu, dataset tidak diketahui, misalnya dari masalah nyata), dll.

Apa tujuan utama menerapkan k-fold cross-validation

Diagram k-fold cross-validation dengan k=4.

Satu putaran validasi silang melibatkan pembagian sampel data ke dalam subset komplementer, melakukan analisis pada satu subset (disebut data pelatihan), dan memvalidasi analisis pada subset lainnya (disebut data validasi atau pengujian). Untuk mengurangi variabilitas, beberapa putaran validasi silang dilakukan dengan menggunakan partisi yang berbeda, dan hasil validasi dirata-ratakan di atas putaran.

Salah satu alasan utama untuk menggunakan validasi silang daripada menggunakan validasi konvensional (misalnya mempartisi kumpulan data menjadi dua set, yaitu 70% untuk pelatihan dan 30% untuk pengujian) adalah bahwa tidak ada cukup data yang tersedia untuk mempartisinya menjadi pelatihan terpisah dan data pengujian tanpa kehilangan pemodelan atau kemampuan pengujian yang signifikan. Dalam kasus ini, cara yang adil untuk memprediksi model prediksi dengan tepat adalah dengan menggunakan validasi silang sebagai teknik umum yang kuat.[5]

Singkatnya, validasi silang menggabungkan (rata-rata) ukuran kecocokan (prediksi error) dengan melihat nilai rata-rata pada setiap putaran untuk mendapatkan perkiraan kinerja model prediksi yang lebih akurat.

  1. ^ Geisser, Seymour (1993). Predictive Inference. New York, NY: Chapman and Hall. ISBN 0-412-03471-9. 
  2. ^ Kohavi, Ron (1995). "A study of cross-validation and bootstrap for accuracy estimation and model selection". Proceedings of the Fourteenth International Joint Conference on Artificial Intelligence. San Mateo, CA: Morgan Kaufmann. 2 (12): 1137–1143. CiteSeerX 10.1.1.48.529  . 
  3. ^ Devijver, Pierre A.; Kittler, Josef (1982). Pattern Recognition: A Statistical Approach. London, GB: Prentice-Hall. 
  4. ^ "Newbie question: Confused about train, validation and test data!". Archived from the original on 2015-03-14. Diakses tanggal 2013-11-14. Pemeliharaan CS1: BOT: status url asli tidak diketahui (link)
  5. ^ Grossman,, Robert; Seni, Giovanni; Elder, John; Agarwal, Nitin; Liu, Huan (2010). Ensemble Methods in Data Mining: Improving Accuracy Through Combining Predictions. Morgan & Claypool. doi:10.2200/S00240ED1V01Y200912DMK002. 

 

Artikel bertopik statistika ini adalah sebuah rintisan. Anda dapat membantu Wikipedia dengan mengembangkannya.

  • l
  • b
  • s

Diperoleh dari "https://id.wikipedia.org/w/index.php?title=Validasi_silang&oldid=19749776"

k-fold cross-validation adalah salah satu strategi paling populer yang banyak digunakan oleh data scientist. Ini adalah strategi partisi data sehingga Anda dapat menggunakan kumpulan data Anda secara efektif untuk membangun model yang lebih umum . Tujuan utama melakukan segala jenis pembelajaran mesin adalah untuk mengembangkan model yang lebih umum yang dapat bekerja dengan baik pada data yang tidak terlihat . Seseorang dapat membuat model yang sempurna pada data pelatihan dengan akurasi 100% atau 0 kesalahan, tetapi mungkin gagal untuk menggeneralisasi data yang tidak terlihat. Jadi, ini bukan model yang bagus. Itu menutupi data pelatihan. Pembelajaran Mesin adalah tentang generalisasiArtinya kinerja model hanya dapat diukur dengan titik data yang belum pernah digunakan selama proses pelatihan. Itulah sebabnya kami sering membagi data menjadi satu set pelatihan dan satu set pengujian.

Proses pemisahan data dapat dilakukan lebih efektif dengan k-fold cross-validation. Di sini, kami membahas dua skenario yang melibatkan k-fold cross-validation. Keduanya melibatkan pemisahan kumpulan data, tetapi dengan pendekatan yang berbeda.

  • Menggunakan k-fold cross-validation untuk mengevaluasi performa model
  • Menggunakan k-fold cross-validation untuk penyetelan hyperparameter

Jadi, tanpa penundaan lebih lanjut, Anda semua dipersilakan untuk melanjutkan membaca artikel ini. Saya juga akan menyertakan kode Python yang dihosting di akun GitHub saya dan kumpulan data yang saya gunakan di sini. Jadi, Anda bisa menggunakannya untuk berlatih sendiri.

Kami akan mulai dengan skenario pertama.

Mari kita mulai langsung dengan sebuah contoh. Untuk ini, saya akan menggunakan dataset yang sangat populer yang disebut dataset bike-sharing .

Kami akan mencoba memprediksi jumlah yang benar dari persewaan sepeda ('cnt') pada hari tertentu berdasarkan variabel lain dalam kumpulan data. Jadi, ini melibatkan prediksi angka, bukan kelas. Jadi, ini adalah tugas regresi dalam pembelajaran mesin. Di sini, kami menggunakan regresi linier (pelajari cara kerja regresi linier di belakang layar dengan membaca artikel yang saya tulis ini). Kami menggunakan Root Mean Squared Error (RMSE) sebagai metrik kinerja model untuk mengevaluasi model regresi.

Setelah menjalankan blok kode di atas, kita mendapatkan RMSE 824.33. Tetapi nilai ini tergantung pada bagaimana kita membagi data kita menjadi X_train dan y_train . Di sini, kami menetapkan random_state = 42 . Berdasarkan nilai tersebut diperoleh RMSE sebesar 824,33. Jika kita menetapkan random_state = 0 , kita akan mendapatkan RMSE 909,81. Jika kita menetapkan random_state = 35 , kita akan mendapatkan RMSE 794,15. Alasan di balik mendapatkan nilai RMSE yang berbeda adalah bahwa setiap kali kita sebut train_test_split fungsi dengan nilai-nilai yang berbeda dari random_state hyperparameter, ia menyediakan set yang berbeda dari pengamatan untuk X_train dan X_test . Jadi, nilai apa yang kita terima sebagai RMSE? Apakah 824.33, 909.81, 794.15 atau nilai lainnya? Sebagai solusi untuk masalah tersebut, seseorang akan menyarankan agar kita dapat melatih model beberapa kali dengan nilai random_state yang berbeda dan kemudian mendapatkan nilai RMSE rata-rata. Tetapi alih-alih melakukan ini secara manual, kita dapat mengotomatiskan proses ini menggunakan fungsi Scikit-learn cross_val_score .

Dalam k-fold cross-validation, kami membuat asumsi bahwa semua observasi dalam dataset terdistribusi dengan baik sedemikian rupa sehingga data tidak bias. Itulah mengapa pertama-tama kami mengocok kumpulan data menggunakan fungsi acak . Kemudian kita memanggil fungsi cross_val_score . Perhatikan bahwa kami menyediakan seluruh kumpulan data untuk fungsi ini. Di sini, kita tidak perlu menyediakan data split sebagai X_train , y_train karena pemisahan dilakukan secara internal selama proses berlangsung. The cv hyperparameter mewakili jumlah lipatan (di sini adalah 5). Dengan memberikan nilai yang sesuai untuk n_jobs , kita dapat melakukan komputasi paralel. Kami dapat mendistribusikan evaluasi lipatan yang berbeda di beberapa CPU di komputer kami. Jika kita menyetel n_jobs ke 1, hanya satu CPU yang akan digunakan untuk mengevaluasi kinerja. Namun, dengan menyetel n_jobs = 2 , kita dapat mendistribusikan proses validasi silang ke dua CPU. Terakhir, dengan menyetel n_jobs = -1 , kita dapat menggunakan semua CPU yang tersedia di komputer kita untuk melakukan komputasi secara paralel. Ini adalah cara yang sangat efektif, terutama ketika kita memiliki dataset yang besar dan ketika kita menetapkan cv ke jumlah yang besar, misalnya 10.

Mari kita lihat apa yang terjadi di balik k-fold cross-validation saat mengevaluasi performa model.

Proses umum k-fold cross-validation untuk mengevaluasi kinerja model adalah:

  • Seluruh dataset secara acak dipecah menjadi k-fold independen tanpa penggantian .
  • lipatan k-1 digunakan untuk pelatihan model dan satu lipatan digunakan untuk evaluasi kinerja.
  • Prosedur ini diulang k kali (iterasi) sehingga diperoleh k jumlah estimasi kinerja (misalnya MSE) untuk setiap iterasi.
  • Kemudian kita mendapatkan mean dari k jumlah perkiraan kinerja (misalnya MSE).

Catatan 2: Nilai standar yang baik untuk k dalam k-fold cross-validation adalah 5 dan 10. Namun, nilai k bergantung pada ukuran dataset. Untuk kumpulan data kecil, kita dapat menggunakan nilai yang lebih tinggi untuk k . Namun, nilai k yang lebih besar juga akan meningkatkan runtime dari algoritma validasi silang dan biaya komputasi.

Catatan 3: Ketika k = 5 , 20% dari set pengujian ditahan setiap kali. Ketika k = 10 , 10% dari set pengujian ditahan kembali setiap kali dan seterusnya…

Catatan 4: Kasus khusus k-fold cross-validation adalah metode Leave-one-out cross-validation (LOOCV) di mana kami menetapkan k = n (jumlah observasi dalam dataset). Hanya satu sampel pelatihan yang digunakan untuk pengujian selama setiap iterasi. Metode ini sangat berguna saat bekerja dengan kumpulan data yang sangat kecil.

Catatan tentang parameter model vs hyperparameter

Parameter model adalah parameter yang dipelajari selama proses pelatihan. Kami tidak menetapkan nilai parameter secara manual dan mereka belajar dari data yang kami berikan. Sebaliknya, hyperparameter model adalah parameter yang tidak belajar dari data. Jadi, kami harus menetapkan nilai untuk mereka secara manual. Kami selalu menetapkan nilai untuk hyperparameter model saat pembuatan model tertentu dan sebelum kami memulai proses pelatihan.

Pencarian kisi adalah teknik pengoptimalan hyperparameter yang populer. Ini mencari kombinasi optimal dari nilai hyperparameter dengan cara yang dapat lebih meningkatkan kinerja model.

Menggunakan k-fold cross-validation yang dikombinasikan dengan penelusuran grid adalah strategi yang sangat berguna untuk meningkatkan performa model pembelajaran mesin dengan menyetel hyperparameter model.

Dalam pencarian grid, kita dapat mengatur nilai untuk beberapa hyperparameter. Misalkan kita memiliki dua hyperparameter yang masing-masing memiliki tiga nilai berbeda. Jadi, kami memiliki 9 (3 x 3) kombinasi nilai hyperparameter yang berbeda. Ruang yang berisi semua kombinasi tersebut disebut ruang hyperparameter . Jika ada dua hyperparameter, spasi menjadi dua dimensi.

Dalam pencarian grid, algoritma mengambil satu kombinasi nilai hyperparameter pada satu waktu dari ruang hyperparameter yang telah kita tentukan. Kemudian melatih model menggunakan nilai hyperparameter tersebut dan mengevaluasinya melalui k-fold cross-validation. Ini menyimpan perkiraan kinerja (misalnya MSE). Kemudian algoritme mengambil kombinasi lain dari nilai hyperparameter dan melakukan hal yang sama. Setelah mengambil semua kombinasi, algoritme menyimpan semua perkiraan kinerja. Dari perkiraan tersebut, ini memilih yang terbaik. Kombinasi nilai hyperparameter yang menghasilkan estimasi performa terbaik merupakan kombinasi nilai hyperparameter yang optimal. Model terbaik menyertakan nilai hyperparameter tersebut.

Mari kita lihat apa yang terjadi di balik k-fold cross-validation dengan pencarian grid.

Alasan di balik menyesuaikan model terbaik ke seluruh set pelatihan setelah k-fold cross-validation adalah untuk menyediakan lebih banyak sampel pelatihan untuk algoritme pembelajaran model terbaik. Ini biasanya menghasilkan model yang lebih akurat dan kuat.

Mari kita mengotori tangan kita dengan menulis beberapa kode untuk melakukan validasi silang k-fold untuk penyetelan hyperparameter. Kali ini, saya akan menggunakan dataset bike-sharing yang sama , tetapi dengan algoritma pembelajaran yang berbeda. Kami akan mencoba memprediksi jumlah yang benar dari persewaan sepeda menggunakan regressor hutan acak (pelajari cara kerja hutan acak di balik layar dengan membaca artikel yang saya tulis ini). Ini masih merupakan tugas regresi.

Di sini, kami menyesuaikan 3 hyperparameter yang disebut 'max_depth' , 'min_samples_leaf' dan 'max_features' di RandomForestRegressor . Jadi, ruang hyperparameternya adalah 3 dimensi sehingga setiap kombinasi berisi 3 nilai. Jumlah kombinasi adalah 192 (8 x 8 x 3). Ini karena max_depth berisi 8 nilai, min_samples_leaf berisi 8 nilai, dan max_features berisi 3 nilai. Ini berarti kami melatih 192 model berbeda! Setiap kombinasi diulangi 5 kali dalam proses validasi silang 5 kali lipat. Jadi, jumlah total iterasi adalah 960 (192 x 5). Tetapi perhatikan juga bahwa setiap RandomForestRegressor memiliki 100 pohon keputusan. Jadi, total penghitungannya adalah 96.000 (960 x 100)! Jadi, menjalankan kode di atas pasti membutuhkan waktu sekitar 5 menit dengan 2 CPU di komputer. Jika komputer Anda memiliki lebih banyak CPU (misalnya 8), Anda dapat mengatur n_jobs = 4 untuk mendapatkan hasil yang lebih cepat.

Di sini, skor tes (RMSE) adalah 661,72 dalam satuan y. Jumlah ini jauh lebih kecil dari satu (883,42) yang kami peroleh sebelumnya. Apakah RMSE 661.72 masih bagus? Untuk mengetahuinya, yuk simak beberapa informasi tentang persewaan sepeda.

Dengan kisaran 22 hingga 8714, rata-rata 4504,35 dan deviasi standar 1937,21, RMSE 661,72 sangat baik. Tapi itu bukan yang terbaik!

Terima kasih sudah membaca!

Tutorial ini dirancang dan dibuat oleh Rukshan Pramoditha , Penulis Blog Data Science 365 .

Teknologi yang digunakan dalam tutorial ini

  • Python (Bahasa pemrograman tingkat tinggi)
  • pandas (pustaka manipulasi dan analisis data Python)
  • Scikit-learn (pustaka pembelajaran mesin Python)
  • Notebook Jupyter (Lingkungan Pengembangan Terintegrasi)
  • Regresor hutan acak
  • Regresi linier