Hutan Acak - Cara menangani overfitting

41

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 randomForestpaket dan telah menerima default untuk semua parameter

Abhi
sumber
4
Breiman mengklaim bahwa RF tidak overfit. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Dengan asumsi dia benar, mungkin ada semacam ketidakkonsistenan antara pelatihan dan set tes Anda?
Sycorax berkata Reinstate Monica
RF tidak MENGHINDARI pakaian ke TEST DATA jika Anda mengoptimalkan parameter tuning
Brash Equilibrium
Saya menemukan sampel parameter tuning benar-benar diabaikan. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

Jawaban:

30

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 }kk{5,10}

Keseimbangan kurang ajar
sumber
1
Terima kasih. Apakah ada tutorial yang menunjukkan cara mengoptimalkan parameter ini?
Abhi
Anda harus mendaftar untuk kursus online Stanford, yang cukup sederhana, tetapi di sini ada video tutorial untuk melakukannya di R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium
Jika saya memahami ini dengan benar, kami menggunakan validasi silang untuk memastikan jumlah fitur yang masuk ke dalam model hutan acak sebagai lawan dari jumlah fitur yang akan dicoba model ini di setiap langkah. Benar ?
Abhi
4
Saya akan menentang jawaban ini: dua fitur menarik dari RF adalah sulit untuk menyesuaikannya dan parameter default biasanya cukup baik. Jawaban ini tampaknya menyiratkan bahwa RF sensitif terhadap default yang jarang terjadi
charles
7
Secara empiris, saya sama sekali tidak merasa kesulitan untuk menyamaratakan hutan acak, hutan acak terpandu, hutan acak terorganisir, atau hutan acak terarah terpandu. Mereka secara teratur berkinerja sangat baik dalam validasi silang, tetapi buruk ketika digunakan dengan data baru karena terlalu pas. Saya percaya itu ada hubungannya dengan jenis fenomena yang dimodelkan. Tidak banyak masalah ketika memodelkan proses mekanis, tetapi dengan sesuatu seperti model perilaku saya mendapatkan hasil yang jauh lebih stabil dengan regresi yang ditentukan dengan baik.
Hack-R
33

Bagaimana Anda mendapatkan 99% AUC pada data pelatihan Anda? Ketahuilah bahwa ada perbedaan di antara keduanya

predict(model)

dan

predict(model, newdata=train)

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.

Hong Ooi
sumber
3
Saya menggunakan prediksi (model, data = kereta). Saya sekarang telah beralih untuk memprediksi (model) dan auc saya turun menjadi 87%. Apakah ini hal yang baik atau buruk?
Abhi
2
Terima kasih! Saya menemukan bahwa ini adalah masalah bagi saya juga. Saya memposting pertanyaan tindak lanjut tentang ukuran apa yang akan digunakan sebagai 'kesalahan pelatihan' untuk model RF di sini: stats.stackexchange.com/questions/162353/…
Berk U.
Terima kasih banyak!! Saya melakukan kesalahan ini juga! Untuk @Abhi: itu hal yang baik, karena AUC sebelumnya sangat tinggi. Yang ini lebih realistis. Coba validasi silang dan ukur AUC untuk itu dan Anda mungkin akan melihat nilai yang sama.
Penasaran
7

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 randomForestbanyak, tetapi sepengetahuan saya, ada beberapa parameter yang dapat Anda gunakan untuk menyesuaikan hutan Anda:

  • nodesize - ukuran minimum terminal node
  • maxnodes - jumlah maksimum terminal node
  • mtry - jumlah variabel yang digunakan untuk membangun setiap pohon (terima kasih @ user777)
Alexey Grigorev
sumber
1
Dan mtry, jumlah variabel yang digambarkan algoritma untuk membangun setiap pohon, secara default akar kuadrat dari jumlah total fitur.
Sycorax berkata Reinstate Monica
Saya akan meninggalkan maxnodes dan mengurangi sampsize sebagai gantinya. Baik maxnodes yang tertekan dan sampsize memberikan pohon dengan kedalaman lebih sedikit dan hutan yang lebih kuat, sampsize namun korelasi pohon lebih rendah juga, dan hutan kemungkinan akan bertemu dengan kesalahan prediksi validasi silang yang lebih rendah, lihat stackoverflow.com/questions/34997134/…
Soren Havelund Welling
2

Anda mungkin ingin menggunakan metode validasi silang, seperti validasi silang K fold.

Fre
sumber
Anda perlu menormalkan / menskalakan fitur?
charles
4
@Carles permintaan maaf saya. Memang tidak perlu untuk skala fitur dalam menggunakan hutan acak. Lihat: stackoverflow.com/questions/8961586/...
Fre
Saya pikir validasi silang akan bermanfaat. Ini adalah kumpulan data yang relatif kecil dengan validasi sampel terpisah yang berpotensi menghasilkan perkiraan kesalahan yang tidak stabil (meskipun diakui saya mengerti ini bukan masalah di sini)
charles
1

Anda dapat menyetel parameter Anda menggunakan pencarian grid

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)
Aman Bassi
sumber
Editor percobaan menyarankan agar modul GridSearchCVini dipanggil model_selection, & dengan demikian baris kode kedua seharusnya from sklearn.model_selection import GridSearchCV.
gung - Reinstate Monica
0

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.

Naveen Chelimilla
sumber