Semua literatur Pemodelan Distribusi Spesies menunjukkan bahwa ketika memprediksi ada / tidaknya suatu spesies menggunakan model yang menghasilkan probabilitas (misalnya, RandomForests), pilihan ambang batas probabilitas yang digunakan untuk benar-benar mengklasifikasikan suatu spesies sebagai ada atau tidaknya adalah penting dan kita harus tidak selalu mengandalkan default 0,5. Saya butuh bantuan dengan ini! Ini kode saya:
library(randomForest)
library(PresenceAbsence)
#build model
RFfit <- randomForest(Y ~ x1 + x2 + x3 + x4 + x5, data=mydata, mytry = 2, ntrees=500)
#eventually I will apply this to (predict for) new data but for first I predict back to training data to compare observed vs. predicted
RFpred <- predict(RFfit, mydata, type = "prob")
#put the observed vs. predicted in the same dataframe
ObsPred <- data.frame(cbind(mydata), Predicted=RFpred)
#create auc.roc plot
auc.roc.plot(ObsPred, threshold = 10, xlab="1-Specificity (false positives)",
ylab="Sensitivity (true positives)", main="ROC plot", color=TRUE,
find.auc=TRUE, opt.thresholds=TRUE, opt.methods=9)
Dari ini saya menentukan bahwa ambang yang ingin saya gunakan untuk mengklasifikasikan kehadiran dari probabilitas yang diprediksi adalah 0,7, bukan default 0,5. Saya tidak sepenuhnya mengerti apa yang harus dilakukan dengan informasi ini. Apakah saya cukup menggunakan ambang ini saat membuat peta output saya? Saya dapat dengan mudah membuat output yang dipetakan dengan probabilitas kontinu kemudian hanya mengklasifikasi ulang mereka yang memiliki nilai lebih dari 0,7 sebagai hadiah, dan yang <0,7 tidak ada.
Atau, apakah saya ingin mengambil informasi ini dan menjalankan kembali pemodelan randomForests saya, menggunakan parameter cut-off? Apa sebenarnya yang dilakukan parameter cut-off? Apakah itu mengubah suara yang dihasilkan? (saat ini mengatakan itu adalah "mayoritas"). Bagaimana cara saya menggunakan parameter cut-off ini? Saya tidak mengerti dokumentasinya! Terima kasih!
Jawaban:
#set ambang batas atau nilai cutoff ke 0,7
Nilai #all lebih rendah dari nilai cutoff 0.7 akan diklasifikasikan sebagai 0 (ada dalam kasus ini)
Nilai #all lebih besar dari nilai cutoff 0.7 akan diklasifikasikan sebagai 1 (tidak ada dalam kasus ini)
sumber
Maaf Anda belum mendapatkan dan mencoba jawaban. Akan merekomendasikan buku Max Kuhn untuk liputan masalah ini. Ini adalah masalah yang cukup luas. Cukup tambahkan beberapa bit:
Pembaruan Mengenai bobot kelas Andy Liaw:
Opsi "classwt" saat ini dalam paket randomForest telah ada sejak awal, dan berbeda dari bagaimana kode Fortran resmi (versi 4 dan yang lebih baru) mengimplementasikan bobot kelas. Ini hanya memperhitungkan kelas. Bobot dalam perhitungan indeks Gini ketika membelah node, persis seperti bagaimana pohon CART tunggal dilakukan ketika diberi bobot kelas. Prof Breiman datang dengan skema pembobotan kelas yang lebih baru diimplementasikan dalam versi yang lebih baru dari kode Fortran setelah kami menemukan bahwa hanya menggunakan bobot dalam indeks Gini tampaknya tidak banyak membantu dalam data yang sangat tidak seimbang (katakanlah 1: 100 atau lebih buruk) .Jika menggunakan Gini yang tertimbang membantu dalam situasi Anda, tentu saja lakukanlah. Saya hanya dapat mengatakan bahwa di masa lalu itu tidak memberi kami hasil yang kami harapkan. "
sumber