Bagaimana randomForest
paket memperkirakan probabilitas kelas saat saya menggunakan predict(model, data, type = "prob")
?
Saya menggunakan ranger
untuk melatih hutan acak menggunakan probability = T
argumen untuk memprediksi probabilitas. ranger
mengatakan dalam dokumentasi bahwa:
Menumbuhkan hutan probabilitas seperti di Malley et al. (2012).
Saya mensimulasikan beberapa data dan mencoba kedua paket dan memperoleh hasil yang sangat berbeda (lihat kode di bawah)
Jadi saya tahu itu menggunakan teknik yang berbeda (kemudian ranger) untuk memperkirakan probabilitas. Tapi yang mana?
simulate_data <- function(n){
X <- data.frame(matrix(runif(n*10), ncol = 10))
Y <- data.frame(Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>%
pnorm(mean = 5)
) %>%
as.factor()
)
dplyr::bind_cols(X, Y)
}
treino <- simulate_data(10000)
teste <- simulate_data(10000)
library(ranger)
modelo_ranger <- ranger(Y ~., data = treino,
num.trees = 100,
mtry = floor(sqrt(10)),
write.forest = T,
min.node.size = 100,
probability = T
)
modelo_randomForest <- randomForest(Y ~., data = treino,
ntree = 100,
mtry = floor(sqrt(10)),
nodesize = 100
)
pred_ranger <- predict(modelo_ranger, teste)$predictions[,1]
pred_randomForest <- predict(modelo_randomForest, teste, type = "prob")[,2]
prob_real <- apply(teste[,1:10], 1, sum) %>% pnorm(mean = 5)
data.frame(prob_real, pred_ranger, pred_randomForest) %>%
tidyr::gather(pacote, prob, -prob_real) %>%
ggplot(aes(x = prob, y = prob_real)) + geom_point(size = 0.1) + facet_wrap(~pacote)
r
random-forest
prediction
Daniel Falbel
sumber
sumber
prob_real
?Jawaban:
Itu hanya proporsi suara dari pohon-pohon di ansambel.
Atau, jika Anda melipatgandakan probabilitas Anda dengan
ntree
Anda, Anda mendapatkan hasil yang sama, tetapi sekarang dalam hitungan, bukan proporsi.sumber
randomForest
saya tidak banyak pengetahuan tentangranger
(pada kenyataannya, saya tidak pernah menggunakannya), jadi saya tidak akan bisa menjawab, saya minta maaf. Tapi ini pertanyaan yang menarik, mungkin Anda bisa mengajukan pertanyaan lain tentang bagaimana kedua strategi itu berbeda.The Malley (2012) tersedia di sini: http://dx.doi.org/10.3414%2FME00-01-0052 . Referensi lengkap ada di bagian referensi dalam dokumentasi ranger.
Singkatnya, setiap pohon memprediksi probabilitas kelas dan probabilitas ini dirata-ratakan untuk prediksi hutan. Untuk dua kelas, ini setara dengan hutan regresi pada respon kode 0-1.
Sebaliknya,
randomForest
dengantype="prob"
setiap pohon memprediksi suatu kelas dan probabilitas dihitung dari kelas-kelas ini.Dalam contoh di sini saya mencoba menggunakan distribusi seragam daripada distribusi normal untuk menghasilkan probabilitas, dan di sini pendekatan lain tampaknya berkinerja lebih baik. Saya ingin tahu apakah probabilitas ini benar-benar kebenaran?
Omong-omong, hasil yang sama seperti dalam
randomForest
contoh di atas dapat dicapai dengan ranger dengan menggunakan klasifikasi dan perhitungan probabilitas manual (digunakanpredict.all=TRUE
dalam prediksi).sumber
Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>% pnorm(mean = 5))
. Begitulah cara Y dihasilkan, menjumlahkan X1, X2, ..., X10 dan kemudian mendapatkan kuantil dari distribusi normal dengan mean = 5 jumlah yang diwakilinya. Apakah menurut Anda ini masuk akal?Jika Anda ingin estimasi probabilitas Out-Of-Bag, Anda hanya bisa melakukannya dalam paket randomForest di R menggunakan model $ votes. Estimasi probabilitas lainnya bukan OOB.
sumber