Wie verwende ich R gbm mit Distribution = "adaboost"?


9

Die Dokumentation besagt, dass R gbm mit Distribution = "adaboost" für das 0-1-Klassifizierungsproblem verwendet werden kann. Betrachten Sie das folgende Codefragment:

gbm_algorithm <- gbm(y ~ ., data = train_dataset, distribution = "adaboost", n.trees = 5000)
gbm_predicted <- predict(gbm_algorithm, test_dataset, n.trees = 5000)

Es kann in der Dokumentation gefunden werden, die.ggm vorhersagt

Gibt einen Vektor von Vorhersagen zurück. Standardmäßig liegen die Vorhersagen auf der Skala von f (x).

Die jeweilige Skala ist jedoch für den Fall der Verteilung = "adaboost" nicht klar.

Könnte jemand bei der Interpretation der Rückgabewerte von pred.gbm helfen und eine Idee für die Konvertierung in die 0-1-Ausgabe liefern?


Bei dieser Frage geht es anscheinend nur um die Interpretation der R-Ausgabe und nicht um die damit verbundenen statistischen Probleme (obwohl dies kein schlechtes Q darstellt). Als solches wird es besser über Stack Overflow gefragt und wahrscheinlich beantwortet als hier. Bitte nicht überkreuzen (SE rät davon dringend ab). Wenn Sie möchten, dass Ihr Q schneller migriert wird, markieren Sie es bitte für die Aufmerksamkeit des Moderators.
Gung - Reinstate Monica

4
@gung scheint mir eine legitime statistische Frage zu sein. Das GBM-Paket liefert die für adaboost verwendete Abweichung, aber mir ist auch nicht klar, was f (x) ist und wie man eine Rücktransformation in eine Wahrscheinlichkeitsskala durchführt (möglicherweise muss man die Platt-Skalierung verwenden). cran.r-project.org/web/packages/gbm/vignettes/gbm.pdf
B_Miner

Antworten:


11

Die Adaboost-Methode liefert die Vorhersagen auf der Logit-Skala. Sie können es in die 0-1-Ausgabe konvertieren:

gbm_predicted<-plogis(2*gbm_predicted)

Beachten Sie die 2 * im Logis


10

Sie können die Wahrscheinlichkeiten auch direkt aus der predict.gbmFunktion abrufen.

predict(gbm_algorithm, test_dataset, n.trees = 5000, type = 'response')

3

Die Adaboost-Link-Funktion wird hier beschrieben . Dieses Beispiel enthält eine detaillierte Beschreibung der Berechnung:

library(gbm);
set.seed(123);
n          <- 1000;
sim.df     <- data.frame(x.1 = sample(0:1, n, replace=TRUE), 
                         x.2 = sample(0:1, n,    replace=TRUE));
prob.array <- c(0.9, 0.7, 0.2, 0.8);
df$y       <- rbinom(n, size = 1, prob=prob.array[1+sim.df$x.1+2*sim.df$x.2])
n.trees    <- 10;
shrinkage  <- 0.01;

gbmFit <- gbm(
  formula           = y~.,
  distribution      = "bernoulli",
  data              = sim.df,
  n.trees           = n.trees,
  interaction.depth = 2,
  n.minobsinnode    = 2,
  shrinkage         = shrinkage,
  bag.fraction      = 0.5,
  cv.folds          = 0,
  # verbose         = FALSE
  n.cores           = 1
);

sim.df$logods  <- predict(gbmFit, sim.df, n.trees = n.trees);  #$
sim.df$prob    <- predict(gbmFit, sim.df, n.trees = n.trees, type = 'response');  #$
sim.df$prob.2  <- plogis(predict(gbmFit, sim.df, n.trees = n.trees));  #$
sim.df$logloss <- sim.df$y*log(sim.df$prob) + (1-sim.df$y)*log(1-sim.df$prob);  #$


gbmFit <- gbm(
  formula           = y~.,
  distribution      = "adaboost",
  data              = sim.df,
  n.trees           = n.trees,
  interaction.depth = 2,
  n.minobsinnode    = 2,
  shrinkage         = shrinkage,
  bag.fraction      = 0.5,
  cv.folds          = 0,
  # verbose         = FALSE
  n.cores           = 1
);

sim.df$exp.scale  <- predict(gbmFit, sim.df, n.trees = n.trees);  #$
sim.df$ada.resp   <- predict(gbmFit, sim.df, n.trees = n.trees, type = 'response');  #$
sim.df$ada.resp.2 <- plogis(2*predict(gbmFit, sim.df, n.trees = n.trees));  #$
sim.df$ada.error  <- -exp(-sim.df$y * sim.df$exp.scale);  #$

sim.df[1:20,]

Ich kann nicht bearbeiten, da ich mich zu wenig ändern würde. ´Df y´ sein. y´shouldbe´sim.df
Ric
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.