Saya memiliki latar belakang ilmu komputer tetapi saya mencoba mengajari diri sendiri ilmu data dengan memecahkan masalah di internet.
Saya telah mengerjakan masalah ini selama beberapa minggu terakhir (sekitar 900 baris dan 10 fitur). Saya awalnya menggunakan regresi logistik tetapi sekarang saya telah beralih ke hutan acak. Ketika saya menjalankan model hutan acak saya pada data pelatihan saya, saya mendapatkan nilai sangat tinggi untuk auc (> 99%). Namun ketika saya menjalankan model yang sama pada data uji hasilnya tidak begitu baik (Akurasi sekitar 77%). Ini membuat saya percaya bahwa saya terlalu cocok dengan data pelatihan.
Apa praktik terbaik tentang mencegah pemasangan berlebihan di hutan acak?
Saya menggunakan r dan rstudio sebagai lingkungan pengembangan saya. Saya menggunakan randomForest
paket dan telah menerima default untuk semua parameter
Jawaban:
Untuk menghindari pemasangan berlebihan di hutan acak, hal utama yang perlu Anda lakukan adalah mengoptimalkan parameter tuning yang mengatur jumlah fitur yang dipilih secara acak untuk menumbuhkan setiap pohon dari data bootstrap. Biasanya, Anda melakukan ini melalui -fold cross-validation, di mana , dan memilih parameter tuning yang meminimalkan kesalahan prediksi sampel uji. Selain itu, menumbuhkan hutan yang lebih besar akan meningkatkan akurasi prediksi, meskipun biasanya ada pengembalian yang semakin berkurang begitu Anda mencapai beberapa ratus pohon.k ∈ { 5 , 10 }k k ∈ { 5 , 10 }
sumber
Bagaimana Anda mendapatkan 99% AUC pada data pelatihan Anda? Ketahuilah bahwa ada perbedaan di antara keduanya
dan
saat mendapatkan prediksi untuk dataset pelatihan. Opsi pertama mendapatkan prediksi out-of-bag dari hutan acak. Ini umumnya yang Anda inginkan, ketika membandingkan nilai yang diprediksi dengan nilai aktual pada data pelatihan.
Yang kedua memperlakukan data pelatihan Anda seolah-olah itu adalah dataset baru, dan menjalankan pengamatan di setiap pohon. Ini akan menghasilkan korelasi artifisial dekat antara prediksi dan aktual, karena algoritma RF umumnya tidak memangkas masing-masing pohon, sebagai gantinya bergantung pada ansambel pohon untuk mengontrol overfitting. Jadi jangan lakukan ini jika Anda ingin mendapatkan prediksi pada data pelatihan.
sumber
Untuk pohon keputusan ada dua cara menangani overfitting: (a) jangan menumbuhkan pohon secara keseluruhan (b) memangkas
Hal yang sama berlaku untuk hutan pohon - jangan tumbuh terlalu banyak dan pangkas.
Saya tidak menggunakan
randomForest
banyak, tetapi sepengetahuan saya, ada beberapa parameter yang dapat Anda gunakan untuk menyesuaikan hutan Anda:nodesize
- ukuran minimum terminal nodemaxnodes
- jumlah maksimum terminal nodemtry
- jumlah variabel yang digunakan untuk membangun setiap pohon (terima kasih @ user777)sumber
mtry
, jumlah variabel yang digambarkan algoritma untuk membangun setiap pohon, secara default akar kuadrat dari jumlah total fitur.Anda mungkin ingin menggunakan metode validasi silang, seperti validasi silang K fold.
sumber
Anda dapat menyetel parameter Anda menggunakan pencarian grid
sumber
GridSearchCV
ini dipanggilmodel_selection
, & dengan demikian baris kode kedua seharusnyafrom sklearn.model_selection import GridSearchCV
.Cobalah untuk menyetel parameter max_depth dalam rentang [5, 15] tetapi tidak lebih dari ini karena jika Anda mengambil kedalaman yang besar ada kemungkinan overfitting yang tinggi.
sumber