Làm thế nào để randomForest
gói ước tính xác suất lớp khi tôi sử dụng predict(model, data, type = "prob")
?
Tôi đã sử dụng ranger
để đào tạo các khu rừng ngẫu nhiên bằng cách sử dụng probability = T
đối số để dự đoán xác suất. ranger
nói trong tài liệu rằng nó:
Trồng rừng xác suất như ở Malley et al. (2012).
Tôi đã mô phỏng một số dữ liệu và thử cả hai gói và thu được kết quả rất khác nhau (xem mã bên dưới)
Vì vậy, tôi biết rằng nó sử dụng một kỹ thuật khác (sau đó là kiểm lâm) để ước tính xác suất. Nhưng cái nào?
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)
prob_real
sao?