Paket randomForest R tidak dapat menangani faktor dengan lebih dari 32 level. Ketika diberikan lebih dari 32 level, ia memancarkan pesan kesalahan:
Tidak dapat menangani prediktor kategori dengan lebih dari 32 kategori.
Tetapi data yang saya miliki memiliki beberapa faktor. Beberapa dari mereka memiliki 1000+ level dan beberapa dari mereka memiliki 100+. Ia bahkan memiliki 'status' negara bagian yaitu 52.
Jadi, inilah pertanyaan saya.
Mengapa ada batasan seperti itu? randomForest menolak untuk menjalankan bahkan untuk kasus sederhana.
> d <- data.frame(x=factor(1:50), y=1:50) > randomForest(y ~ x, data=d) Error in randomForest.default(m, y, ...) : Can not handle categorical predictors with more than 32 categories.
Jika itu hanya karena keterbatasan memori, bagaimana scikit dapat belajar randomForeestRegressor belajar berjalan dengan lebih dari 32 level?
Apa cara terbaik untuk menangani masalah ini? Misalkan saya memiliki X1, X2, ..., X50 variabel independen dan Y adalah variabel dependen. Dan misalkan X1, X2 dan X3 memiliki lebih dari 32 level. Apa yang harus saya lakukan?
Apa yang saya pikirkan adalah menjalankan algoritma clustering untuk masing-masing X1, X2 dan X3 di mana jarak didefinisikan sebagai perbedaan dalam Y. Saya akan menjalankan tiga clustering karena ada tiga variabel bermasalah. Dan di setiap pengelompokan, saya berharap dapat menemukan level yang sama. Dan saya akan menggabungkan mereka.
Bagaimana ini terdengar?
sumber
randomForest
dapat menangani prediktor kategori hingga 53 level. NewsJawaban:
Ini sebenarnya merupakan kendala yang cukup masuk akal karena pemisahan pada faktor dengan level sebenarnya merupakan pilihan dari salah satu dari kombinasi 2 N - 2 yang mungkin. Jadi, bahkan dengan N seperti 25, ruang kombinasi begitu besar sehingga kesimpulan seperti itu masuk akal.N 2N- 2 N
Pilihan lainnya adalah mengubah representasi - mungkin hasil Anda tidak secara langsung bergantung pada entitas negara tetapi, misalnya, area, populasi, jumlah pohon pinus per kapita atau atribut lainnya, Anda dapat menyambungkannya ke sistem informasi Anda.
Mungkin juga bahwa setiap negara adalah entitas yang terisolasi dan tidak berkorelasi sehingga memerlukan model terpisah untuk dirinya sendiri.
Pengelompokan berdasarkan keputusan mungkin merupakan ide yang buruk karena dengan cara ini Anda menyelundupkan informasi dari keputusan ke atribut, yang sering berakhir dengan overfitting.
sumber
Alasan utamanya adalah bagaimana randomForest diimplementasikan. Implementasi dari R mengikuti banyak dari spesifikasi Breiman asli. Yang penting di sini untuk diperhatikan adalah bahwa untuk variabel faktor / kategorikal, kriteria pembagiannya adalah biner dengan beberapa nilai label di sebelah kiri dan label lainnya di sebelah kanan.
Mengapa implementasi dari Weka dan Python berfungsi?
Implementasi weka tidak menggunakan pohon CART secara default. Ia menggunakan pohon C45 yang tidak memiliki masalah komputasi ini, karena untuk input kategorikal ia terbagi dalam beberapa simpul, satu untuk setiap nilai level.
Implementasi python random forest tidak bisa menggunakan variabel kategori / faktor. Anda harus menyandikan variabel-variabel itu menjadi variabel dummy atau numerik.
sumber
Anda dapat mencoba mewakili satu kolom itu secara berbeda. Anda bisa mewakili data yang sama dengan kerangka data yang jarang.
Kode minimum yang layak;
Perhatikan bagaimana setiap nilai di kolom asli sekarang menjadi kolom dummy yang terpisah.
Kode contoh yang lebih luas;
Meskipun potongan kode ini menunjukkan bahwa Anda memang tidak akan lagi mendapatkan kesalahan, Anda akan melihat bahwa algoritma randomForest sekarang membutuhkan waktu yang lama sebelum selesai. Ini karena kendala CPU, Anda dapat memetakan pengurangan tugas ini melalui pengambilan sampel sekarang juga.
Untuk informasi lebih lanjut silakan lihat blogpost ini:
https://blog.cloudera.com/blog/2013/02/how-to-resample-from-a-large-data-set-in-parallel-with-r-on-hadoop/
sumber
Anda dapat menggunakan paket extraTrees sebagai gantinya. Algoritme hutan yang teracak secara ekstrim tidak mencoba breakpoint / split, tetapi hanya subset pemisahan acak yang terbatas.
sumber
Pilihan lain: tergantung pada jumlah level dan jumlah pengamatan dalam data Anda, Anda bisa menggabungkan beberapa level. Selain mendapatkan di bawah batas, itu dapat mengurangi varians jika Anda memiliki banyak level hanya dengan beberapa pengamatan. Hadley 's forcats: fct_lump melakukan hal ini.
sumber