2013-03-25 13 views
9

Tôi đang sử dụng gói R GBM để tăng cường hồi quy trên một số dữ liệu sinh học về kích thước 10.000 X 932 và tôi muốn biết cài đặt thông số tốt nhất cho gói GBM đặc biệt là gì (n.trees, shrinkage, interact.depth và n.minobsinnode) khi tôi tìm kiếm trực tuyến, tôi thấy rằng gói CARET trên R có thể tìm thấy các cài đặt tham số đó. Tuy nhiên, tôi gặp khó khăn trong việc sử dụng gói Caret với gói GBM, vì vậy tôi chỉ muốn biết cách sử dụng dấu mũ để tìm các kết hợp tối ưu của các tham số đã đề cập trước đây? Tôi biết câu hỏi này có vẻ rất điển hình, nhưng tôi đọc hướng dẫn sử dụng dấu và vẫn gặp khó khăn trong việc tích hợp dấu mũ với gbm, đặc biệt là vì tôi rất mới đối với cả hai gói nàysử dụng gói caret để tìm thông số tối ưu của GBM

Trả lời

13

Liên kết này có ví dụ cụ thể (trang 10)) - http://www.jstatsoft.org/v28/i05/paper

Về cơ bản, trước tiên bạn nên tạo một mạng lưới các giá trị ứng cử viên cho các tham số siêu (như n.trees, interact.depth và co rút). Sau đó gọi hàm train chung như bình thường.

13

Không chắc chắn nếu bạn tìm thấy những gì bạn đang tìm kiếm, nhưng tôi thấy một số các trang tính này ít hữu ích hơn.

Nếu bạn đang sử dụng gói caret, sau đây mô tả các thông số cần thiết:> getModelInfo() $ GBM $ thông số

Ông là một số quy tắc của ngón tay cái để chạy GBM:

  1. Sự tương tác. độ sâu là 1 và trên hầu hết các tập dữ liệu có vẻ như là đầy đủ, nhưng trên một số ít tôi đã thấy rằng thử nghiệm kết quả so với bội số lẻ tối đa đã cho kết quả tốt hơn. Giá trị tối đa tôi đã thấy cho tham số này là tầng (sqrt (NCOL (đào tạo))).
  2. Thu nhỏ: số càng nhỏ, thì giá trị tiên đoán càng tốt, cần nhiều cây hơn và chi phí tính toán càng cao. Kiểm tra các giá trị trên một tập hợp nhỏ dữ liệu có thứ gì đó như co rút = co rút = seq (.0005, .05, .0005) có thể hữu ích trong việc xác định giá trị lý tưởng .
  3. n.minobsinnode: mặc định là 10 và nói chung tôi không gây rối với điều đó. Tôi đã thử c (5,10,15,20) trên các tập hợp dữ liệu nhỏ và không thực sự là thấy thu nhập đầy đủ cho chi phí tính toán.
  4. n.trees: độ co rút càng nhỏ, bạn càng có nhiều cây. Bắt đầu với n.trees = (0:50) * 50 và điều chỉnh cho phù hợp.

thiết lập Ví dụ sử dụng gói caret:

getModelInfo()$gbm$parameters 
library(parallel) 
library(doMC) 
registerDoMC(cores = 20) 
# Max shrinkage for gbm 
nl = nrow(training) 
max(0.01, 0.1*min(1, nl/10000)) 
# Max Value for interaction.depth 
floor(sqrt(NCOL(training))) 
gbmGrid <- expand.grid(interaction.depth = c(1, 3, 6, 9, 10), 
        n.trees = (0:50)*50, 
        shrinkage = seq(.0005, .05,.0005), 
        n.minobsinnode = 10) # you can also put something  like c(5, 10, 15, 20) 

fitControl <- trainControl(method = "repeatedcv", 
         repeats = 5, 
         preProcOptions = list(thresh = 0.95), 
         ## Estimate class probabilities 
         classProbs = TRUE, 
         ## Evaluate performance using 
         ## the following function 
         summaryFunction = twoClassSummary) 

# Method + Date + distribution 
set.seed(1) 
system.time(GBM0604ada <- train(Outcome ~ ., data = training, 
      distribution = "adaboost", 
      method = "gbm", bag.fraction = 0.5, 
      nTrain = round(nrow(training) *.75), 
      trControl = fitControl, 
      verbose = TRUE, 
      tuneGrid = gbmGrid, 
      ## Specify which metric to optimize 
      metric = "ROC")) 

Mọi thứ có thể thay đổi tùy thuộc vào dữ liệu của bạn (như phân phối), nhưng tôi đã tìm thấy hạnh phúc chìa khóa để chơi với gbmgrid cho đến khi bạn có được kết quả bạn tìm kiếm. Các cài đặt như hiện tại sẽ mất nhiều thời gian để chạy, vì vậy hãy sửa đổi làm máy của bạn và thời gian sẽ cho phép. Để cung cấp cho bạn một ballpark của tính toán, tôi chạy trên một Mac PRO 12 lõi với 64GB ram.