簡體   English   中英

R:使用MLR(或插入號或…)調整XGBoost的參數

[英]R: Using MLR (or caret or…) to tune parameters for XGBoost

在瀏覽了幾本教程之后,我設法制作了一個腳本,該腳本成功地使用XGBoost預測了波士頓房屋數據集上的分類價格。

但是,我無法使用CV成功地調整模型的參數。 即使在這里嘗試了來自stackowerflow上的教程和發布的幾種解決方案之后。

到目前為止,我最好的結果是非常“ hacky”,並且只調整一個參數:

steps <- seq(75,90,5)/100
    for(i in steps){
    .....
    }

但是我看到了所有這些精美的設置,這些設置使用MLR或Caret或NMOF自動運行通過多個參數。 但是,我還沒有接近要任何人來處理這些數據。 我懷疑這是因為大多數設置都是針對二進制分類的,但是即使以最佳方式解決,我也不會成功。 我可以為您提供數百行行不通的代碼,但是我認為最簡單的方法是在此處可以正常工作的范圍內提供我的代碼,並從中了解您的工作方式,而不是陷入我的糟糕代碼中。

編輯:因為我什至沒有運行其他人的腳本沒有任何成功。 以下是一些其他詳細信息:

 > packageVersion("mlr")
 ‘2.11’

 > packageVersion("xgboost")
 ‘0.6.4.1’

首先,更新mlr和其他必需的軟件包。 然后考慮從快速入門例子mlr 的cheatsheet

library(mlr)
#> Loading required package: ParamHelpers
library(mlbench)
data(Soybean)

set.seed(180715)

soy = createDummyFeatures(Soybean, target = "Class")
tsk = makeClassifTask(data = soy, target = "Class")
ho = makeResampleInstance("Holdout", tsk)
tsk.train = subsetTask(tsk, ho$train.inds[[1]])
tsk.test = subsetTask(tsk, ho$test.inds[[1]])

lrn = makeLearner("classif.xgboost", nrounds=10)
#> Warning in makeParam(id = id, type = "numeric", learner.param = TRUE, lower = lower, : NA used as a default value for learner parameter missing.
#> ParamHelpers uses NA as a special value for dependent parameters.

cv = makeResampleDesc("CV", iters=5)
res = resample(lrn, tsk.train, cv, acc)
#> Resampling: cross-validation
#> Measures:             acc
#> [Resample] iter 1:    0.9010989
#> [Resample] iter 2:    0.9230769
#> [Resample] iter 3:    0.9120879
#> [Resample] iter 4:    0.9230769
#> [Resample] iter 5:    0.9450549
#> 
#> Aggregated Result: acc.test.mean=0.9208791
#> 

# Tune hyperparameters
ps = makeParamSet(makeNumericParam("eta", 0, 1),
                  makeNumericParam("lambda", 0, 200),
                  makeIntegerParam("max_depth", 1, 20)
)
tc = makeTuneControlMBO(budget = 100)
tr = tuneParams(lrn, tsk.train, cv5, acc, ps, tc)
#> [Tune] Started tuning learner classif.xgboost for parameter set:
#>              Type len Def   Constr Req Tunable Trafo
#> eta       numeric   -   -   0 to 1   -    TRUE     -
#> lambda    numeric   -   - 0 to 200   -    TRUE     -
#> max_depth integer   -   -  1 to 20   -    TRUE     -
#> With control class: TuneControlMBO
#> Imputation value: -0
#> [Tune-x] 1: eta=0.529; lambda=194; max_depth=18
#> [Tune-y] 1: acc.test.mean=0.7846154; time: 0.0 min

# /... output truncated .../

#> [Tune-x] 100: eta=0.326; lambda=0.0144; max_depth=19
#> [Tune-y] 100: acc.test.mean=0.9340659; time: 0.0 min
#> [Tune] Result: eta=0.325; lambda=0.00346; max_depth=20 : acc.test.mean=0.9450549

lrn = setHyperPars(lrn, par.vals = tr$x)

# Evaluate performance
mdl = train(lrn, tsk.train)
prd = predict(mdl, tsk.test)

# Final model
mdl = train(lrn, tsk)

備忘單中的更多說明(如果要復制代碼和描述,請使用.pptx版本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM