Untuk klasifikasi dengan Random Forests di R, bagaimana seharusnya seseorang menyesuaikan ukuran kelas yang tidak seimbang?

17

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?

ialm
sumber
1
Saya juga menghadapi masalah yang sama. Bisakah Anda memberikan skrip untuk Hutan Acak Tertimbang dan hutan acak berbasis metrik, jika Anda punya ?? Menantikan balasan Anda

Jawaban:

5

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.

David J. Harris
sumber
Hai David, terima kasih atas sarannya. Akankah meningkatkan dimungkinkan dalam / dalam kombinasi dengan hutan acak? Juga, saya telah membaca bahwa meningkatkan mungkin tidak berlaku dengan data berisik. Data yang saya kerjakan mengandung banyak variabel "berisik" - Saya saat ini menjalankan hutan acak tanpa pemilihan fitur, menurunkan kelas yang lebih besar untuk menangani ketidakseimbangan. Saya telah mendapatkan hasil yang dapat diterima (mengklasifikasikan dengan benar 85% dari kelas yang lebih kecil dan 93% dari kelas yang lebih besar di set pelatihan), tetapi perbaikan selalu diterima.
ialm
@ Jonathan Saya tidak memiliki perasaan yang baik tentang berapa banyak kebisingan yang diperlukan sebelum hutan acak mulai bersaing berbagai metode meningkatkan, tetapi kesan saya adalah bahwa itu sangat banyak. The gbmpaket di Rmemiliki "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.
David J. Harris
@ DavidJ.Harris Boosting juga menderita ketidakseimbangan kelas, terutama dalam kasus kelangkaan absolut, ketika informasi tentang kelas minoritas jarang
Antoine
2

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.

0,5

0asa
sumber
0

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

Qbik
sumber
Mengidentifikasi himpunan bagian pengamatan di kelas yang lebih besar sepertinya ide yang menarik. Bagian kedua dari proyek ini sebenarnya membedakan kelas yang lebih besar menjadi lebih kecil, subkelompok berguna yang mungkin berguna untuk studi di masa depan. Adapun perhitungan entropi dalam kode, saya belum benar-benar menyelidiki kode dan hanya melihat beberapa teori di balik rf, jadi saya tidak bisa mengomentari itu.
ialm
Saya ingin memodifikasi kode itu sejak lama, tetapi tidak punya waktu untuk itu, menambahkan bobot seharusnya tidak sulit secara konsep.
Qbik
Hutan acak di R dapat digunakan sebagai alat regresi, mungkin berguna untuk klasifikasi yang tidak diawasi juga. Saya ingin memodifikasi kode randomForest sejak lama, tetapi tidak memiliki waktu untuk itu, menambahkan bobot seharusnya tidak sulit secara konsep. Beberapa waktu yang lalu saya bertanya-tanya sendiri bagaimana menggunakan hutan acak untuk pengelompokan tanpa pengawasan dan saya mendapat ide tetapi belum menguji hal itu, sayangnya tampaknya agak menuntut secara komparatif - pengamatan angka ^ 2.
Qbik
0

(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.

charles
sumber