Làm thế nào để sử dụng R gbm với phân phối = Ad adoooost?


9

Tài liệu nói rằng R gbm với phân phối = "adaboost" có thể được sử dụng cho vấn đề phân loại 0-1. Hãy xem xét đoạn mã sau:

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

Nó có thể được tìm thấy trong tài liệu dự đoán.gbm

Trả về một vectơ dự đoán. Theo mặc định, các dự đoán nằm trên thang đo của f (x).

Tuy nhiên, quy mô cụ thể không rõ ràng đối với trường hợp phân phối = "adaboost".

Bất cứ ai cũng có thể giúp giải thích các giá trị trả về dự đoán.gbm và cung cấp ý tưởng chuyển đổi thành đầu ra 0-1?


Câu hỏi này dường như chỉ là về cách diễn giải đầu ra R, chứ không phải về các vấn đề thống kê liên quan (mặc dù điều đó không làm cho nó trở thành một Q xấu). Vì vậy, nó được hỏi tốt hơn, và có thể được trả lời, trên Stack Overflow , thay vì ở đây. Vui lòng không đăng bài chéo (SE không khuyến khích điều này), nếu bạn muốn Q của bạn di chuyển nhanh hơn, vui lòng gắn cờ cho sự chú ý của người điều hành.
gung - Phục hồi Monica

4
@gung có vẻ như là một câu hỏi thống kê hợp pháp với tôi. Gói GBM cung cấp Deviance được sử dụng cho adaboost nhưng tôi cũng không rõ f (x) là gì và làm thế nào để chuyển đổi trở lại thang đo xác suất (có lẽ người ta phải sử dụng tỷ lệ Platt). cran.r-project.org/web/packages/gbm/vignettes/gbm.pdf
B_Miner

Câu trả lời:


11

Phương pháp adaboost đưa ra dự đoán về thang đo logit. Bạn có thể chuyển đổi nó thành đầu ra 0-1:

gbm_predicted<-plogis(2*gbm_predicted)

lưu ý 2 * bên trong logis


10

Bạn cũng có thể trực tiếp có được xác suất từ predict.gbmchức năng;

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

3

Hàm liên kết adaboost được mô tả ở đây . Ví dụ này cung cấp một mô tả chi tiết về tính toá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,]

Tôi không thể chỉnh sửa khi tôi thay đổi quá ít. ´df y y y hung. y´shouldbe´sim.df
Ric
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.