Hypertuning XGBoost parametreleri


27

XGBoost, hem kategorik hem de sürekli bağımlı değişkenlerle uğraşmak konusunda mükemmel bir iş çıkarıyor. Ancak, bir XGBoost problemi için optimize edilmiş parametreleri nasıl seçerim?

Son Kaggle problemi için parametreleri şöyle uyguladım:

param <- list(  objective           = "reg:linear", 
                booster = "gbtree",
                eta                 = 0.02, # 0.06, #0.01,
                max_depth           = 10, #changed from default of 8
                subsample           = 0.5, # 0.7
                colsample_bytree    = 0.7, # 0.7
                num_parallel_tree   = 5
                # alpha = 0.0001, 
                # lambda = 1
)


clf <- xgb.train(   params              = param, 
                    data                = dtrain, 
                    nrounds             = 3000, #300, #280, #125, #250, # changed from 300
                    verbose             = 0,
                    early.stop.round    = 100,
                    watchlist           = watchlist,
                    maximize            = FALSE,
                    feval=RMPSE
)

Deney yapmak için tek yaptığım rastgele (sezgiyle) sonucu iyileştirmek için başka bir parametre seti seçmektir.

Yine de optimize edilmiş (en iyi) parametre setinin seçimini otomatikleştiriyorum mu?

(Cevaplar herhangi bir dilde olabilir. Ben sadece tekniği arıyorum)

Yanıtlar:


40

Ne zaman xgboost ile çalışsam sık sık kendi homebrew parametre araştırmamı yapıyorum, ancak bunu daha önce bahsettiğim KrisP gibi caret paketi ile yapabilirsiniz.

  1. Düzeltme işareti

Xgboost'ta hiperparametre araması için şapka paketinin nasıl kullanılacağına dair ayrıntılı bir açıklama için Çapraz Doğrulamadaki bu cevaba bakın. Xgboost ağaçlarının hiperparametreleri nasıl ayarlanır?

  1. Özel Izgara Arama

Genellikle, Owen Zhang'ın veri bilimi için ipuçları üzerindeki slaytları temel alan birkaç varsayımla başlıyorum . 14

görüntü tanımını buraya girin

Burada, çoğunlukla satır örneklemesini, sütun örneklemesini ve belki de maksimum ağaç derinliğini ayarlamanız gerekeceğini görebilirsiniz. Şu an üzerinde çalıştığım bir sorunu özel satır örneklemesi ve sütun örneklemesi araması şöyle yapar:

searchGridSubCol <- expand.grid(subsample = c(0.5, 0.75, 1), 
                                colsample_bytree = c(0.6, 0.8, 1))
ntrees <- 100

#Build a xgb.DMatrix object
DMMatrixTrain <- xgb.DMatrix(data = yourMatrix, label = yourTarget)

rmseErrorsHyperparameters <- apply(searchGridSubCol, 1, function(parameterList){

    #Extract Parameters to test
    currentSubsampleRate <- parameterList[["subsample"]]
    currentColsampleRate <- parameterList[["colsample_bytree"]]

    xgboostModelCV <- xgb.cv(data =  DMMatrixTrain, nrounds = ntrees, nfold = 5, showsd = TRUE, 
                           metrics = "rmse", verbose = TRUE, "eval_metric" = "rmse",
                           "objective" = "reg:linear", "max.depth" = 15, "eta" = 2/ntrees,                               
                           "subsample" = currentSubsampleRate, "colsample_bytree" = currentColsampleRate)

    xvalidationScores <- as.data.frame(xgboostModelCV)
    #Save rmse of the last iteration
    rmse <- tail(xvalidationScores$test.rmse.mean, 1)

    return(c(rmse, currentSubsampleRate, currentColsampleRate))

})

Ve bazı ggplot2 büyüsü ile birlikte bu uygulama işlevinin sonuçlarını kullanarak aramanın grafiksel gösterimini çizebilirsiniz.Xgboost hiperparametre arama

Bu çizimde daha açık renkler daha düşük bir hatayı temsil eder ve her blok, sütun örnekleme ve sıra örneklemenin benzersiz bir kombinasyonunu temsil eder. Dolayısıyla, sözde eta (veya ağaç derinliği) ek bir arama yapmak istiyorsanız, test edilen her eta parametresi için bu parsellerden biri ile sonuçlanacaktır.

Farklı bir değerlendirme metriğinizin (RMPSE) olduğunu görüyorum, sadece çapraz onaylama fonksiyonunu takın ve istediğiniz sonucu elde edin. Bunun yanı sıra, diğer parametrelerin ince ayarını yapmak için çok fazla endişelenmem, çünkü bunu yapmak, performansı daha fazla geliştirmeyecek, en azından fazla zaman harcayan mühendislik özellikleri harcamak veya verileri temizlemekle karşılaştırıldığında, performansı çok fazla artırmayacak.

  1. Diğerleri

Rasgele arama ve Bayesian parametre seçimi de mümkündür, ancak bunların bir uygulamasını henüz bulamadım / bulamadım.

Burada, Max Kuhn'ın kurucusu yaratıcısı tarafından yapılan hiperparametrelerin bayesian optimizasyonu üzerine iyi bir astar var.

http://blog.revolutionanalytics.com/2016/06/bayesian-optimization-of-machine-learning-models.html


Min_child_weight parametresi ile ilgili bir sorum var. 3 / (nadir olayların% 'si) yazıyor 3 sınıf 0 (% 3,4), 1 (% 96,4) ve 2 (% 0,2) dersim var. öyleyse 3 / 3.6 veya 3 / 0.2 olmalıdır? Eski tahmin ediyorum

Çoğu durumda, xgboost çoğu problemde nadir görülen olaylar olarak% 5'in altındaki herhangi bir şeyi ele alır, sanırım algoritmanın tuhaflarından biri. Bir TO sorununda tıklamanın altında bir şey olarak "nadir bir olay" olduğunu düşünmeyi seviyorum. Yani bu durumda 3 / 3.6 olacaktır. Bazen daha düşük ama o kadar sık ​​değil.
Wacax

1
rBayesianOptimizationPaket, BO uygulamasını oldukça basit hale getiriyor
MichaelChirico,


0

Grid, Random, Bayesian ve PSO ... vb.

XGBoost ile çalışırken, yukarıdakilerin hepsi önemli değil, çünkü XGB gerçekten hızlı olduğundan, Grid'i size çözüm bulana kadar birçok hiperparametriyle birlikte kullanabilirsiniz.

Size yardımcı olabilecek bir şey: yaklaşık yöntemini kullanın, her zaman bana en düşük mse hatası veriyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.