distribution = "adaboost"와 함께 R gbm을 사용하는 방법은 무엇입니까?


9

설명서에 분포 = "adaboost"인 R gbm을 0-1 분류 문제에 사용할 수 있다고 나와 있습니다. 다음 코드 조각을 고려하십시오.

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

예측 문서에서 찾을 수 있습니다 .gbm

예측 벡터를 반환합니다. 기본적으로 예측은 f (x) 척도입니다.

그러나 분포 = "adaboost"의 경우 특정 척도는 명확하지 않습니다.

누구든지 predict.gbm 반환 값을 해석하고 0-1 출력으로 변환하는 아이디어를 제공 할 수 있습니까?


이 질문은 것으로 보인다 단지 (그게 나쁜 Q하지 않지만)되지 관련 통계 문제에 대한, R 출력을 해석하는 방법에 대해. 따라서 여기보다는 Stack Overflow 에서 더 잘 묻고 대답 할 것입니다. 교차 게시를하지 마십시오 (SE는이를 권장하지 않습니다). Q를 더 빨리 마이그레이션하려면 중재자의주의를 끌기 위해 플래그를 지정하십시오.
복직 모니카

4
@gung은 나에게 합법적 인 통계 질문처럼 보입니다. GBM 패키지는 adaboost에 사용 된 Deviance를 제공하지만 f (x)가 무엇인지, 확률 스케일로 역 변환하는 방법 (아마도 Platt 스케일링을 사용해야 함)은 분명하지 않습니다. cran.r-project.org/web/packages/gbm/vignettes/gbm.pdf
B_Miner

답변:


11

adaboost 방법은 로짓 척도에 대한 예측을 제공합니다. 0-1 출력으로 변환 할 수 있습니다.

gbm_predicted<-plogis(2*gbm_predicted)

로지 내부의 2 *에 주목


11

predict.gbm함수 에서 확률을 직접 얻을 수도 있습니다 .

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

3

adaboost 링크 기능은 여기 에 설명되어 있습니다 . 이 예제는 계산에 대한 자세한 설명을 제공합니다.

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

변경이 너무 적어서 편집 할 수 없습니다. df와이´에스h영형이자형´에스나는미디엄.에프와이.
Ric
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.