Pertanyaan saya adalah tentang klasifikasi biner, katakanlah memisahkan pelanggan yang baik dari pelanggan yang buruk, tetapi bukan regresi atau klasifikasi non-biner. Dalam konteks ini, hutan acak adalah ansambel pohon klasifikasi. Untuk setiap pengamatan, setiap pohon memilih "ya" atau "tidak", dan suara rata-rata dari semua pohon adalah probabilitas hutan akhir.
Pertanyaan saya adalah tentang memodifikasi perilaku pohon yang mendasarinya: Bagaimana kita bisa memodifikasi fungsi randomForest (dari paket randomForest dari R) sehingga setiap pohon memilih desimal alih-alih biner ya / tidak. Untuk lebih memahami apa yang saya maksud dengan desimal, mari kita pikirkan tentang cara kerja pohon keputusan.
Pohon keputusan yang telah dewasa memiliki 1 instance baik atau 1 buruk di node terminalnya. Asumsikan bahwa saya membatasi ukuran simpul terminal sebagai 100. Kemudian simpul terminal akan terlihat seperti:
Node1 = 80 buruk, 20 baik
Node2 = 51 buruk, 49 baik
Node3 = 10 buruk, 90 bagus
Perhatikan, meskipun Node1 dan Node2 memilih "buruk", "kekuatan kejahatan" mereka sangat berbeda. Itulah yang saya cari. Alih-alih meminta mereka menghasilkan 1 atau 0 (yang merupakan perilaku default) dapatkah seseorang memodifikasi paket R sehingga mereka memilih 80/100, 51/100, 10/100 dll?
sumber
Jawaban:
Ini adalah titik halus yang bervariasi dari perangkat lunak ke perangkat lunak. Ada dua metode utama yang saya ketahui:
randomForest
kerjanya di R, bahkan saat menggunakanpredict(..., type="prob")
sklearn.ensemble.RandomForestClassifier.predict_proba
kerjanya. Dalam jawaban lain, @ usεr11852 menunjukkan bahwaranger
paket R juga menyediakan fungsi ini. Untungnya, saya dapat membuktikan bahwa dari penggunaan saya yang terbatas,ranger
juga jauh lebih cepat daripadarandomForest
.Saya tidak berpikir bahwa ada cara mudah
randomForest
untuk menggunakan metode daun proporsional, karena perangkat lunak R sebenarnya hanya hook ke dalam program C & FORTRAN. Kecuali Anda menikmati memodifikasi kode orang lain, Anda harus menulis sendiri, atau menemukan implementasi perangkat lunak lain.sumber
randomForest
dapat dimodifikasi untuk menyertai ini?randomForest
hanya antarmuka R ke dalam kode FORTRAN, jadi mungkin diperlukan sumber daya yang cukup untuk menyelesaikannya.Sangat mungkin untuk menumbuhkan "hutan probabilitas". Metodologi dalam Malley et al. (2012) " Mesin probabilitas: estimasi probabilitas konsisten menggunakan mesin pembelajaran nonparametrik. " Yang menguraikan bagaimana hal ini dilakukan dan bagaimana membandingkannya dengan implementasi hutan acak standar. Selain itu, ranger paket R yang luar biasa sudah mengimplementasikan fungsi ini; hanya mengatur ketika membuat panggilan fungsi ke .
probability = TRUE
ranger
sumber
Cukup gunakan
predict.randomForest(..., type="prob")
. Anda melakukan Good Thing .sumber
predict.all
dannorm.votes
parameter, ini sepertinya tidak mungkin. Jika Anda benar-benar menginginkan ini, Anda mungkin perlu membuat kode hutan acak Anda sendiri. Saya setuju dengan @psarka bahwa ini masuk akal. (Saya akan menghapus jawaban ini, tetapi kemudian kita akan kehilangan diskusi ini di komentar.)