经过了几个教程,我设法制作了一个成功使用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
作弊表中的快速启动示例:
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 版本,如果您不仅要复制代码,还要复制描述(。