Wie randomForest
schätzt das Paket Klassenwahrscheinlichkeiten, wenn ich verwende predict(model, data, type = "prob")
?
Ich habe ranger
zufällige Gesamtstrukturen mit dem probability = T
Argument trainiert , um Wahrscheinlichkeiten vorherzusagen. ranger
In der Dokumentation heißt es:
Bauen Sie einen Wahrscheinlichkeitswald wie in Malley et al. (2012).
Ich habe einige Daten simuliert und beide Pakete ausprobiert und dabei sehr unterschiedliche Ergebnisse erzielt (siehe Code unten).
Ich weiß also, dass es eine andere Technik (dann Waldläufer) verwendet, um Wahrscheinlichkeiten abzuschätzen. Aber welcher?
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
quelle
quelle
prob_real
?Antworten:
Es ist nur der Stimmenanteil der Bäume im Ensemble.
Wenn Sie alternativ Ihre Wahrscheinlichkeiten mit multiplizieren
ntree
, erhalten Sie dasselbe Ergebnis, jedoch jetzt in Zählungen anstelle von Anteilen.quelle
randomForest
mir bin, weiß ich nicht viel darüberranger
(tatsächlich habe ich es nie benutzt), also wäre ich nicht in der Lage zu antworten, es tut mir leid. Aber es ist eine interessante Frage, vielleicht könnten Sie eine andere Frage dazu stellen, wie sich beide Strategien unterscheiden.Der Malley (2012) ist hier verfügbar: http://dx.doi.org/10.3414%2FME00-01-0052 . Eine vollständige Referenz finden Sie im Referenzteil der Ranger-Dokumentation.
Kurz gesagt, jeder Baum sagt Klassenwahrscheinlichkeiten voraus, und diese Wahrscheinlichkeiten werden für die Gesamtstrukturvorhersage gemittelt. Für zwei Klassen entspricht dies einer Regressionsgesamtstruktur für eine 0-1-codierte Antwort.
Im Gegensatz dazu
randomForest
mittype="prob"
jedem Baum sagt eine Klasse und Wahrscheinlichkeiten werden aus diesen Klassen berechnet.In diesem Beispiel habe ich versucht, die Wahrscheinlichkeiten mithilfe der Gleichverteilung anstelle der Normalverteilung zu generieren, und hier scheint der andere Ansatz eine bessere Leistung zu bringen. Ich frage mich, ob diese Wahrscheinlichkeiten wirklich die Wahrheit sind.
Übrigens
randomForest
können mit Ranger die gleichen Ergebnisse wie im obigen Beispiel erzielt werden, indem Klassifizierung und manuelle Wahrscheinlichkeitsberechnung verwendet werden (Verwendungpredict.all=TRUE
bei der Vorhersage).quelle
Y = rbinom(n, size = 1, prob = apply(X, 1, sum) %>% pnorm(mean = 5))
. Auf diese Weise wird Y erzeugt, wobei X1, X2, ..., X10 summiert werden und dann das Quantil der Normalverteilung mit dem Mittelwert = 5, das die Summe darstellt, erhalten wird. Finden Sie das sinnvoll?Wenn Sie Out-Of-Bag-Wahrscheinlichkeitsschätzungen wünschen, können Sie dies nur im randomForest-Paket in R unter Verwendung von Modell-$ -Stimmen tun. Die anderen Wahrscheinlichkeitsschätzungen sind nicht OOB.
quelle