我'm trying to use the R package mlr to train a glmnet model on a binary classification problem with a large dataset (about 850000 rows and about 100 features) on very modest hardware (my laptop with 4GB RAM --- I don' t可以获得更多的CPU肌肉) . 我决定使用mlr,因为我需要使用嵌套交叉验证来调整分类器的超参数并评估最终模型的预期性能 . 据我所知,目前,插入符号或h2o都没有提供嵌套的交叉验证,但mlr提供了提供此功能的基础结构 . 但是,我发现mlr提供的大量功能极其庞大,而且's difficult to know how to slot everything together to achieve my goal. What goes where? How do they fit together? I'已经阅读了整个文档:https://mlr-org.github.io/mlr-tutorial/release/html/和我'm still confused. There are code snippets that show how to do specific things, but it'不清楚(对我来说)如何将这些拼接在一起 . 大局是什么?我找了一个完整的工作示例用作模板,只发现了这个:https://www.bioconductor.org/help/course-materials/2015/CSAMA2015/lab/classification.html我一直用它作为我的起点 . 任何人都可以帮助填补空白吗?

这就是我想要做的事情:

使用网格搜索或随机网格搜索(或任何更快的,如果它存在 - 迭代F-racing?自适应重采样?)和分层k折叠交叉验证内环,调整glmnet模型的超参数(l1和l2正则化参数),使用外部交叉验证循环来评估预期的最终性能 . 我想在内循环中包含一个特征预处理步骤,包括居中,缩放和Yeo-Johnson变换,以及基于快速滤波器的特征选择(后者是必需的,因为我有非常适度的硬件,我需要缩小特征空间减少训练时间) . 我有不 balancer 的课程(正面课程约为20%)所以我选择使用AUC作为我的优化目标,但这只是感兴趣的实际指标的替代品,是少数真阳性的假阳性率固定点(即,我想知道TPR的FPR = 0.6,0.7,0.8) . 我不知道究竟在这里优化了什么:https://github.com/mlr-org/mlr/issues/856我想知道切割应该在哪里而不会导致信息泄漏,所以我想用CV来选择它 .

我正在使用glmnet,因为我宁愿花费我的CPU周期来构建一个强大的模型而不是一个产生过度乐观结果的花哨模型 . GBM或随机森林可以在以后完成,如果我发现它可以做得足够快,但我不希望我的数据中的功能足够信息,以便花费很多时间来训练任何特别复杂的东西 .

最后,在我获得了对最终模型的性能估计之后,我想实际构建最终模型并获得glmnet模型的系数---包括哪些是零,所以我知道哪些特征已被LASSO罚款选中 .

希望这一切都有意义!

这是我到目前为止所得到的:

df <- as.data.frame(DT)

task <- makeClassifTask(id = "glmnet", 
                        data = df, 
                        target = "Flavour", 
                        positive = "quark")
task


lrn <- makeLearner("classif.glmnet", predict.type = "prob")
lrn

# Feature preprocessing -- want to do this as part of CV:
lrn <- makePreprocWrapperCaret(lrn,
                               ppc.center = TRUE, 
                               ppc.scale = TRUE,
                               ppc.YeoJohnson = TRUE)
lrn

# I want to use the implementation of info gain in CORElearn, not Weka:
infGain = makeFilter(
  name = "InfGain",
  desc = "Information gain ",
  pkg  = "CORElearn",
  supported.tasks = c("classif", "regr"),
  supported.features = c("numerics", "factors"),
  fun = function(task, nselect, ...) {
    CORElearn::attrEval(
      getTaskFormula(task), 
      data = getTaskData(task), estimator = "InfGain", ...)
  }
)
infGain

# Take top 20 features:
lrn <-  makeFilterWrapper(lrn, fw.method = "InfGain", fw.abs = 20)
lrn

# Now things start to get foggy...

tuningLrn <- makeTuneWrapper(
  lrn, 
  resampling = makeResampleDesc("CV", iters = 2,  stratify = TRUE), 
  par.set = makeParamSet(
    makeNumericParam("s", lower = 0.001, upper = 0.1),
    makeNumericParam("alpha", lower = 0.0, upper = 1.0)
  ), 
  control = makeTuneControlGrid(resolution = 2)
)

r2 <- resample(learner = tuningLrn, 
               task = task, 
               resampling = rdesc, 
               measures = auc)
# Now what...?