【发布时间】:2018-12-14 21:28:28
【问题描述】:
我正在使用 mlr 包在 R 中构建分类任务,以调整我正在使用验证集的超参数,其中一个参数是使用特征选择(chi.square)根据重要性使用的变量百分比方法)
lrn = makeFilterWrapper(learner = "classif.xgboost", fw.method = "chi.squared")
params <- makeParamSet(
makeDiscreteParam("booster",values = c("gbtree","dart")),
makeDiscreteParam("nrounds", values = 1000, tunable = F),
makeDiscreteParam("eta", values = c(0.1,0.05,0.2)),
makeIntegerParam("max_depth",lower = 3L,upper = 10L),
makeNumericParam("min_child_weight",lower = 1L,upper = 10L),
makeNumericParam("subsample",lower = 0.5,upper = 1),
makeNumericParam("colsample_bytree",lower = 0.5,upper = 1),
makeDiscreteParam("fw.perc", values = seq(0.2, 1, 0.05)))
rdesc = makeResampleDesc("CV", iters = 5)
ctrl <- makeTuneControlRandom(maxit = 1L)
res = tuneParams(lrn, task = valTask2016, resampling = rdesc, par.set = params, control = ctrl)
我不确定是否需要在这里进行 5 折交叉验证,但变量 res 提供了我需要的所有参数,包括 fw.perc,它将按降序修剪我的变量选择重要性。
我的问题是,我如何使用这些参数再次使用重采样(这次使用Subsampling)但这次是在训练数据上?这是我得到的:
rdesc = makeResampleDesc("Subsample", iters = 5, split = 0.8)
lrn = setHyperPars(makeLearner("classif.xgboost"), par.vals = res$x)
r = resample(lrn, trainTask2016, rdesc, measures = list(mmce, fpr, fnr, timetrain))
在这种情况下,valTask2016 是我用于验证参数的分类任务。我使用createDummyFeatures 进行 XGBoost 所需的 one-hot 编码。
这是我得到的错误:
setHyperPars2.Learner(learner, insert(par.vals, args)) 中的错误: classif.xgboost:在没有可用描述对象的情况下设置参数 fw.perc! 您是否指的是这些超参数之一: booster eta alpha
【问题讨论】: