Гіпертунінг параметрів XGBoost


27

XGBoost робив чудову роботу, коли справа стосується як категоричних, так і постійних залежних змінних. Але як вибрати оптимізовані параметри для проблеми XGBoost?

Ось як я застосував параметри для недавньої проблеми Kaggle:

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
)

Все, що я роблю для експерименту, - це вибірково (з інтуїцією) вибрати інший набір параметрів для покращення результату.

Чи все-таки я автоматизую вибір оптимізованого (найкращого) набору параметрів?

(Відповіді можуть бути будь-якою мовою. Я просто шукаю техніку)

Відповіді:


40

Кожен раз, коли я працюю з xgboost, я часто роблю власний пошук параметрів домашнього параграфа, але ви можете робити це з пакетом caret, як і щойно згаданий KrisP.

  1. Карет

Дивіться цю відповідь у перехресній валідації для детального пояснення, як використовувати пакет кареток для пошуку гіперпараметрів на xgboost. Як налаштувати гіперпараметри дерев xgboost?

  1. Пошук користувацької сітки

Я часто починаю з кількох припущень, заснованих на слайдах Оуена Чжана щодо порад щодо наукових даних P. 14

введіть тут опис зображення

Тут ви бачите, що в основному вам потрібно буде настроїти вибірку рядків, вибірку стовпців і, можливо, максимальну глибину дерева. Ось як я роблю власну вибірку рядків та вибірку стовпців для пошуку проблеми, над якою працюю на даний момент:

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))

})

А в поєднанні з деякою магією ggplot2 за допомогою результатів функції, що застосовується, ви можете побудувати графічне зображення пошуку.Мій пошук в гіперпараметрі xgboost

У цьому сюжеті більш світлі кольори представляють меншу помилку, і кожен блок представляє унікальну комбінацію вибірки стовпців та вибірки рядків. Отже, якщо ви хочете виконати додатковий пошук скажіть eta (або глибина дерева), ви отримаєте один з цих графіків для кожного тестованого параметра.

Я бачу, що у вас є інший показник оцінки (RMPSE), просто підключіть його до функції перехресної перевірки, і ви отримаєте бажаний результат. Крім того, я б не переймався надто тонкою настройкою інших параметрів, тому що це не дозволить підвищити продуктивність занадто сильно, принаймні, не стільки порівняно з витрачанням більше часу на технічні характеристики чи очищення даних.

  1. Інші

Можливий також випадковий пошук та вибір байєсівських параметрів, але я ще не зробив / не знайшов їх реалізації.

Ось хороший буквар по байєсовій оптимізації гіперпараметрів творцем Маре Куна карети.

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


У мене питання щодо параметра min_child_weight. це говорить 3 / (% рідкісних подій) Припустимо, у мене є 3 класи 0 (3,4%), 1 (96,4%) та 2 (0,2%). так має бути 3 / 3,6 або 3 / 0,2? Я здогадуюсь, колишній

У більшості випадків xgboost трактує що-небудь нижче 5% як рідкісні події у більшості проблем, я думаю, це одна з примх алгоритму. Мені подобається думати про це, як що-небудь нижче клацання проблеми CTR - це "рідкісна подія". Так що в цьому випадку це було б 3 / 3.6. Я іноді нижчий, але не так часто.
воск

1
rBayesianOptimizationпакет робить реалізацію BO досить простою
MichaelChirico


0

Сітка, Випадкова, Байєсова та PSO ... тощо.

Коли ви працюєте з XGBoost, все вищезазначене не має значення, оскільки XGB дуже швидкий, тому ви можете використовувати Grid з багатьма гіперпараметри, поки не знайдете рішення.

Одне, що може вам допомогти: використовувати метод ок, це завжди дає мені найменшу помилку mse.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.