Hypertuning XGBoost पैरामीटर


27

XGBoost एक अच्छा काम कर रहा है, जब यह स्पष्ट और निरंतर निर्भर चर दोनों से निपटने की बात करता है। लेकिन, मैं एक XGBoost समस्या के लिए अनुकूलित मापदंडों का चयन कैसे करूं?

यह है कि मैंने हाल ही में कागल समस्या के लिए पैरामीटर लागू किया है:

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 के साथ काम करता हूं मैं अक्सर अपना खुद का होमब्रेव पैरामीटर खोज करता हूं लेकिन आप इसे कैरट पैकेज के साथ-साथ क्रिस्प की तरह उल्लेख कर सकते हैं।

  1. कैरट

Xgboost पर हाइपरपरेट खोज के लिए कैरेट पैकेज का उपयोग करने के बारे में गहन विवरण के लिए क्रॉस वेलिडेटेड पर यह उत्तर देखें। Xgboost पेड़ों के हाइपरपैरमीटर कैसे ट्यून करें?

  1. कस्टम ग्रिड खोज

मैं अक्सर डेटा विज्ञान पी। 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 हाइपरपैरेट खोज

इस साजिश में हल्के रंग कम त्रुटि का प्रतिनिधित्व करते हैं और प्रत्येक ब्लॉक कॉलम नमूनाकरण और पंक्ति नमूनाकरण के एक अद्वितीय संयोजन का प्रतिनिधित्व करता है। इसलिए यदि आप एटा (या वृक्ष की गहराई) कहना चाहते हैं, तो आप प्रत्येक एटा मापदंडों के लिए इन प्लॉटों में से एक की खोज करेंगे।

मुझे लगता है कि आपके पास एक अलग मूल्यांकन मीट्रिक (आरएमपीएसई) है, बस इसे क्रॉस सत्यापन समारोह में प्लग करें और आपको वांछित परिणाम मिलेगा। इसके अलावा, मैं अन्य मापदंडों को ठीक करने के बारे में बहुत अधिक चिंता नहीं करूंगा क्योंकि ऐसा करने से प्रदर्शन में बहुत अधिक सुधार नहीं होगा, कम से कम इतना अधिक समय इंजीनियरिंग सुविधाओं को खर्च करने या डेटा को साफ करने की तुलना में नहीं।

  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पैकेज बीओ का सीधा
माइकलक्रिको


0

ग्रिड, रैंडम, बायेसियन और पीएसओ ... आदि।

जब आप XGBoost के साथ काम करते हैं, तो उपरोक्त सभी मायने नहीं रखते हैं, क्योंकि XGB वास्तव में तेज़ है, इसलिए आप कई हाइपरपैरामीटर के साथ ग्रिड का उपयोग कर सकते हैं जब तक कि आप समाधान न पाएं।

एक चीज जो आपकी मदद कर सकती है: लगभग विधि का उपयोग करें, यह हमेशा मुझे सबसे कम एमएसई त्रुटि देती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.