Apakah overfitting sangat buruk sehingga Anda tidak harus memilih model yang mengenakan pakaian berlebih, meskipun kesalahan pengujiannya lebih kecil? Tidak. Tapi Anda harus memiliki alasan untuk memilihnya.
Perilaku ini tidak terbatas pada XGBoost. Ini adalah benang merah di antara semua teknik pembelajaran mesin; menemukan tradeoff yang tepat antara underfitting dan overfitting. Definisi formal adalah tradeoff Bias-variance (Wikipedia) .
Tradeoff bias-varians
Berikut ini adalah penyederhanaan tradeoff Bias-variance, untuk membantu menjustifikasi pilihan model Anda.
Kami mengatakan bahwa model memiliki bias yang tinggi jika tidak dapat sepenuhnya menggunakan informasi dalam data. Itu terlalu bergantung pada informasi umum, seperti kasus yang paling sering, rata-rata respons, atau beberapa fitur yang kuat. Bias dapat berasal dari asumsi yang salah, misalnya dengan mengasumsikan bahwa variabel terdistribusi secara normal atau modelnya linier.
Kami mengatakan bahwa model memiliki varian yang tinggi jika menggunakan terlalu banyak informasi dari data. Ini bergantung pada informasi yang hanya berseri dalam set pelatihan yang telah disajikan kepadanya, yang tidak cukup umum. Biasanya, model akan banyak berubah jika Anda mengubah set pelatihan, maka nama "varian tinggi".
Definisi tersebut sangat mirip dengan definisi underfitting dan overfitting. Namun, definisi tersebut seringkali terlalu disederhanakan untuk menjadi bertentangan, seperti dalam
- Model ini kurang cocok jika pelatihan dan kesalahan tes tinggi. Ini berarti bahwa modelnya terlalu sederhana.
- Model ini overfitting jika kesalahan tes lebih tinggi dari kesalahan pelatihan. Ini berarti bahwa modelnya terlalu kompleks.
Penyederhanaan itu tentu saja membantu, karena membantu memilih kompleksitas model yang tepat. Tetapi mereka mengabaikan poin penting, fakta bahwa (hampir) setiap model memiliki bias dan komponen varians. Deskripsi underfitting / overfitting memberi tahu Anda bahwa Anda memiliki terlalu banyak bias / varian terlalu banyak, tetapi Anda (hampir) selalu memiliki keduanya .
Jika Anda ingin informasi lebih lanjut tentang pengorbanan bias-varians, mereka banyak visualisasi bermanfaat dan sumber daya yang baik tersedia melalui google. Setiap buku pelajaran mesin akan memiliki bagian pada tradeoff bias-varians, berikut adalah beberapa
- Pengantar pembelajaran statistik dan Elemen pembelajaran statistik (tersedia di sini) .
- Pengenalan Pola dan Pembelajaran Mesin, oleh Christopher Bishop.
- Pembelajaran Mesin: Perspektif Probabilistik, oleh Kevin Murphy.
Juga, posting blog bagus yang membantu saya memahami adalah Scott Fortmann-Roe's Understanding the Bias-Variance Tradeoff .
Aplikasi untuk masalah Anda
Jadi, Anda memiliki dua model,
MARSXGBoostLatih MAE∼ 4.0∼ 0,3Tes MAE∼ 4.0∼ 2.4Varians rendah, bias lebih tinggi ,Varians yang lebih tinggi, bias yang lebih rendah ,
dan Anda harus memilih satu. Untuk melakukannya, Anda perlu mendefinisikan model apa yang lebih baik. Parameter yang harus dimasukkan dalam keputusan Anda adalah kompleksitas dan kinerja model.
- Berapa banyak "unit" kompleksitas yang bersedia Anda tukarkan dengan satu "unit" kinerja?
- Lebih banyak kompleksitas dikaitkan dengan varian yang lebih tinggi. Jika Anda ingin model Anda menggeneralisasi dengan baik pada dataset yang sedikit berbeda dari yang Anda latih, Anda harus mencari kompleksitas yang lebih sedikit.
- Jika Anda menginginkan model yang dapat Anda pahami dengan mudah, Anda dapat melakukannya dengan biaya kinerja dengan mengurangi kompleksitas model.
- Jika Anda bertujuan untuk kinerja terbaik pada dataset yang Anda tahu berasal dari proses generatif yang sama dari set pelatihan Anda, Anda dapat memanipulasi kompleksitas untuk mengoptimalkan kesalahan pengujian Anda dan menggunakannya sebagai metrik. Ini terjadi ketika set pelatihan Anda secara acak diambil dari set yang lebih besar, dan model Anda akan diterapkan pada set ini. Ini adalah kasus di sebagian besar kompetisi Kaggle, misalnya.
Tujuannya di sini bukan untuk menemukan model yang "tidak overfit". Ini untuk menemukan model yang memiliki tradeoff bias-varians terbaik. Dalam hal ini, saya berpendapat bahwa pengurangan bias yang dilakukan oleh model XGBoost cukup baik untuk membenarkan peningkatan varian.
Apa yang bisa kau lakukan
Namun, Anda mungkin bisa melakukan yang lebih baik dengan menyetel hyperparameter.
Meningkatkan jumlah putaran dan mengurangi tingkat pembelajaran adalah suatu kemungkinan. Sesuatu yang "aneh" tentang peningkatan gradien adalah menjalankannya dengan baik melewati titik di mana kesalahan pelatihan mencapai nol tampaknya masih meningkatkan kesalahan pengujian (seperti yang dibahas di sini: Apakah Lebih Dalam Lebih Baik Hanya Ketika Dangkal Baik? ). Anda dapat mencoba untuk melatih model Anda sedikit lebih lama pada dataset Anda setelah Anda mengatur parameter lainnya,
1 / 214. Ini mungkin jargon, tetapi jika fitur Anda memiliki tingkat interaksi 3 (Kira-kira: Kombinasi dari 4 fitur tidak lebih kuat daripada kombinasi 3 dari fitur tersebut + yang keempat), maka menanam pohon dengan ukuran lebih besar dari 3 adalah merugikan. Dua pohon dengan kedalaman tiga akan memiliki kekuatan generalisasi lebih dari satu pohon dengan kedalaman empat. Ini adalah konsep yang agak rumit dan saya tidak akan membahasnya sekarang, tetapi Anda dapat memeriksa koleksi makalah ini sebagai permulaan. Juga, perhatikan bahwa pohon yang dalam mengarah ke varian yang tinggi!
Menggunakan subsampling, yang dikenal sebagai bagging , sangat bagus untuk mengurangi varians. Jika pohon individual Anda memiliki varian yang tinggi, mengantongi pohon akan rata-rata dan rata-rata pohon memiliki varians yang lebih rendah daripada masing-masing pohon. Jika, setelah menyetel kedalaman pohon Anda, Anda masih menemukan varians yang tinggi, cobalah untuk meningkatkan subsampling (yaitu, kurangi fraksi data yang digunakan). Subsampling ruang fitur juga mencapai tujuan ini.