9 votos

Cómo utilizar R gbm con distribución = "adaboost"?

Documentación indica que R gbm con distribución = "adaboost" puede ser utilizado para el 0-1 problema de clasificación. Considere el siguiente fragmento de código:

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

Se puede encontrar en la documentación que predecir.gbm

Devuelve un vector de predicciones. Por defecto, las predicciones están en la escala de f(x).

Sin embargo, la particular escala no es claro para el caso de la distribución = "adaboost".

Podría alguien ayudar con la interpretación de predecir.gbm valores de retorno y proporciona una idea de la conversión para el 0-1 de salida?

12voto

Edwin Puntos 151

Usted también puede obtener directamente las probabilidades de la predict.gbm función;

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

11voto

Shahid Iqbal Puntos 16

El adaboost método da las predicciones en la escala logit. Usted puede convertir el 0-1 de salida:

gbm_predicted<-plogis(2*gbm_predicted)

nota 2* en el interior del logis

3voto

Mark Melville Puntos 384

El adaboost función de enlace se describe aquí. Este ejemplo proporciona una descripción detallada de la computación:

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,]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X