Saya mengeksplorasi berbagai metode klasifikasi untuk proyek yang sedang saya kerjakan, dan saya tertarik untuk mencoba Hutan Acak. Saya mencoba mendidik diri sendiri seiring berjalannya waktu, dan akan menghargai setiap bantuan yang diberikan oleh komunitas CV.
Saya telah membagi data saya ke dalam set pelatihan / tes. Dari percobaan dengan hutan acak di R (menggunakan paket randomForest), saya telah mengalami masalah dengan tingkat kesalahan klasifikasi yang tinggi untuk kelas saya yang lebih kecil. Saya telah membaca makalah ini mengenai kinerja hutan acak pada data yang tidak seimbang, dan penulis menyajikan dua metode untuk mengatasi ketidakseimbangan kelas saat menggunakan hutan acak.
1. Hutan Acak Tertimbang
2. Hutan Acak Seimbang
Paket R tidak memungkinkan pembobotan kelas (dari forum bantuan R, saya telah membaca parameter classwt tidak berkinerja baik dan dijadwalkan sebagai perbaikan bug di masa mendatang), jadi saya dibiarkan dengan opsi 2. Saya dapat menentukan jumlah objek sampel dari setiap kelas untuk setiap iterasi hutan acak.
Saya merasa tidak nyaman untuk menetapkan ukuran sampel yang sama untuk hutan acak, karena saya merasa saya akan kehilangan terlalu banyak informasi tentang kelas yang lebih besar yang menyebabkan kinerja yang buruk dengan data masa depan. Tingkat kesalahan klasifikasi ketika downsampling kelas yang lebih besar telah terbukti membaik, tetapi saya bertanya-tanya apakah ada cara lain untuk menangani ukuran kelas yang tidak seimbang di hutan acak?
Jawaban:
Jika Anda tidak menyukai opsi-opsi itu, sudahkah Anda mempertimbangkan untuk menggunakan metode peningkatan? Dengan fungsi kerugian yang sesuai, peningkatan otomatis mengkalibrasi ulang bobot saat berjalan. Jika sifat stokastik dari hutan acak menarik bagi Anda, meningkatkan gradien stokastik akan membuatnya juga.
sumber
gbm
paket diR
memiliki "bobot" jangka berfungsi, dan Anda dapat meningkatkan keacakan dengan cara yang sangat mirip dengan hutan acak dengan mengurangi dengan istilah "bag.fraction". Sepertinya ini patut dicoba.Saya pikir objek pembobotan entah bagaimana setara dengan menduplikasi mereka. Mungkin Anda harus mencoba memodifikasi langkah bootstrap dengan mengambil sampel berbagai kelas Anda dengan tepat.
sumber
Alih-alih mengambil sampel kelas besar Anda dapat memperluas kelas kecil! Jika kelas-kelas besar memiliki pengamatan berkali-kali lebih besar dari yang kecil, maka bias akan menjadi kecil. Saya harap Anda bisa menangani dataset berukuran besar itu.
Anda juga dapat mengidentifikasi himpunan bagian pengamatan yang menangani sebagian besar informasi tentang kelas besar, ada banyak prosedur yang mungkin, yang paling sederhana menurut saya didasarkan pada metode tetangga terdekat - pengamatan sampel dikondisikan pada struktur grafik lingkungan menjamin bahwa sampel akan memiliki kepadatan kemungkinan lebih mirip dengan yang asli.
randomForest ditulis dalam Fortran dan c, kode sumber tersedia (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz) tetapi saya tidak dapat menemukan tempat di mana enthropy dihitung, ps. up bahwa randomforest menggunakan Gini bukannya enthropy
sumber
(1) Anda benar fungsi pembobotan tidak bekerja dan tidak yakin apakah itu pernah diperbaiki.
(2) Sebagian besar menggunakan opsi 2 dengan data seimbang. Kunci untuk tidak kehilangan terlalu banyak data adalah pengambilan sampel bertingkat. Anda secara acak mencicipi set seimbang unik untuk setiap pohon.
sumber
Pengambilan sampel minoritas sintetis (SMOTE) menghasilkan pengamatan baru dari kelas minoritas sebagai kombinasi cembung acak dari pengamatan tetangga. Makalahnya ada di sini: https://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-14-106
sumber