distribution =“ adaboost”でR gbmを使用する方法


9

ドキュメントには、distribution = "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)

これは、predict.gbmというドキュメントに記載されています。

予測のベクトルを返します。デフォルトでは、予測はf(x)のスケールで行われます。

ただし、distribution = "adaboost"の場合、特定のスケールは明確ではありません。

誰かがpredict.gbmの戻り値の解釈を手伝って、0-1出力への変換のアイデアを提供できますか?


この質問は、R出力を解釈する方法についてのみであり、関連する統計的な問題についてではないようです(ただし、Qを悪くするわけではありません)。そのため、ここではなく、Stack Overflowで質問し、おそらく回答することをお勧めします。クロスポストしないでください(SEはこれを強くお勧めしません)。Qをより速く移行したい場合は、モデレーターの注意のためにフラグを付けてください。
ガン-モニカを復活

4
@gungは私にとっては正当な統計上の質問のようです。GBMパッケージは、アダブーストに使用される逸脱度を提供しますが、f(x)が何であるか、また確率スケールに逆変換する方法(おそらく、プラットスケーリングを使用する必要がある)も私にはわかりません。cran.r-project.org/web/packages/gbm/vignettes/gbm.pdf
B_Miner

回答:


11

adaboostメソッドはロジットスケールで予測を提供します。これを0-1の出力に変換できます。

gbm_predicted<-plogis(2*gbm_predicted)

ロジス内の2 *に注意してください


10

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

y´shoあなたldbe´sメートルdf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.