वितरण के साथ R gbm का उपयोग कैसे करें = "adaboost"?


9

प्रलेखन में कहा गया है कि वितरण के साथ 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)

यह प्रलेखन में पाया जा सकता है जो भविष्यवाणी करता है

भविष्यवाणियों का एक वेक्टर लौटाता है। डिफ़ॉल्ट रूप से पूर्वानुमान एफ (एक्स) के पैमाने पर हैं।

हालाँकि वितरण के मामले के लिए विशेष पैमाना स्पष्ट नहीं है = "एडोबॉस्ट"।

क्या कोई भी प्रेडिक्ट की व्याख्या के साथ मदद कर सकता है। मैं मान वापस कर सकता हूं और 0-1 आउटपुट में रूपांतरण का विचार प्रदान कर सकता हूं?


यह प्रश्न केवल R आउटपुट की व्याख्या करने के तरीके के बारे में प्रतीत होता है , और संबंधित सांख्यिकीय मुद्दों के बारे में नहीं (हालांकि यह इसे एक बुरा क्यू नहीं बनाता है)। जैसे कि यह बेहतर है, और संभवतः उत्तर दिया गया, स्टैक ओवरफ्लो पर , बजाय यहाँ। कृपया क्रॉस-पोस्ट न करें (एसई दृढ़ता से इसे हतोत्साहित करता है), यदि आप चाहते हैं कि आपका क्यू तेजी से माइग्रेट हो जाए, तो कृपया इसे ध्यान में रखें।
गूँग -

4
@ गुंग मुझे एक वैध सांख्यिकीय प्रश्न लगता है। GBM पैकेज adaboost के लिए उपयोग किए जाने वाले Deviance की आपूर्ति करता है, लेकिन यह मेरे लिए स्पष्ट नहीं है कि f (x) क्या है और कैसे एक प्रायिकता स्केल (शायद एक को प्लैट स्केलिंग का उपयोग करना है) में बदलना है। cran.r-project.org/web/packages/gbm/vignettes/gbm.pdf
B_Miner

जवाबों:


11

एडबॉस्ट विधि लॉगिट स्केल पर भविष्यवाणियां देती है। आप इसे 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 y´। y´shouldbe´sim.df
रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.