W jaki sposób randomForest
pakiet szacuje prawdopodobieństwa klasowe, kiedy używam predict(model, data, type = "prob")
?
Użyłem ranger
do szkolenia losowych lasów, używając probability = T
argumentu do przewidywania prawdopodobieństw. ranger
mówi w dokumentacji, że:
Wyhoduj las prawdopodobieństwa, jak w Malley i in. (2012).
Symulowałem niektóre dane, wypróbowałem oba pakiety i uzyskałem bardzo różne wyniki (patrz kod poniżej)
Wiem więc, że wykorzystuje inną technikę (niż tropiciel) do oszacowania prawdopodobieństwa. Ale który?
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
źródło
źródło
prob_real
?Odpowiedzi:
To tylko proporcja głosów drzew w zespole.
Alternatywnie, jeśli pomnożysz swoje prawdopodobieństwa
ntree
, otrzymasz ten sam wynik, ale teraz w liczbach zamiast proporcji.źródło
randomForest
tym, że nie mam zbyt dużej wiedzy na tematranger
(w rzeczywistości nigdy go nie użyłem), więc nie będę w stanie odpowiedzieć, przepraszam. Ale to interesujące pytanie, być może możesz zadać kolejne pytanie na temat różnic między obiema strategiami.The Malley (2012) jest dostępny tutaj: http://dx.doi.org/10.3414%2FME00-01-0052 . Pełne odniesienie znajduje się w części odniesienia w dokumentacji leśniczego.
Krótko mówiąc, każde drzewo przewiduje prawdopodobieństwa klasowe, a te prawdopodobieństwa są uśredniane dla prognozy lasu. W przypadku dwóch klas jest to równoważne lasowi regresji z zakodowaną odpowiedzią 0-1.
Natomiast w
randomForest
przytype="prob"
każdym drzewie przewiduje klasę i prawdopodobieństwa są obliczane z tych klas.W tym przykładzie próbowałem użyć rozkładu jednolitego zamiast rozkładu normalnego do wygenerowania prawdopodobieństw, a tutaj inne podejście wydaje się działać lepiej. Zastanawiam się, czy te prawdopodobieństwa są naprawdę prawdą?
Nawiasem mówiąc, te same wyniki, co w
randomForest
powyższym przykładzie, można osiągnąć za pomocą komandosa, stosując klasyfikację i ręczne obliczanie prawdopodobieństwa (zastosowaniepredict.all=TRUE
w prognozowaniu).źródło
Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>% pnorm(mean = 5))
. Tak powstaje Y, sumując X1, X2, ..., X10, a następnie uzyskując kwantyl rozkładu normalnego ze średnią = 5, którą reprezentuje suma. Czy uważasz, że to ma sens?Jeśli chcesz oszacować prawdopodobieństwo wyjęcia z torby, możesz to zrobić tylko w losowym pakiecie leśnym w R, używając głosów modelowych. Pozostałe szacunki prawdopodobieństwa nie są OOB.
źródło