我正在尝试设置mlr
分类任务,其中75%的数据将用于培训,而这75%将通过重复交叉验证进行重新采样。
我的任务设置如下
pred.Bin.Task <- makeClassifTask(id="CountyCrime", data=df, target="count.bins")
preProc.Task <- normalizeFeatures(pred.Bin.Task, method="range")
rdesc <- makeResampleDesc("RepCV", reps=3, folds=5)
inTraining <- caret::createDataPartition(df$count.bins, p = .75, list = FALSE)
但我无法重新取样工作。当我做lda.train <- resample("classif.lda", preProc.Task, rdesc, subset=inTraining)
我收到错误
Error in setHyperPars2.Learner(learner, insert(par.vals, args)) :
classif.lda: Setting parameter subset without available description object!
You can switch off this check by using configureMlr!
无子集训练(即lda.train <- resample("classif.lda", preProc.Task, rdesc)
)有效。
我宁愿拥有整个数据而不仅仅是任务中的训练数据,因此当我使用保持数据进行预测时,我不需要预处理并重新提交新数据。关于如何使子集正确的任何建议?
答案 0 :(得分:3)
错误的原因是resample
函数没有subset
参数,所以它被传递给学习者,而没有这样的参数任
mlr
的重新采样说明不允许您将数据完全分开(即在培训期间根本不使用它),因为您正在尝试这样做。但是,您可以使用subsetTask
函数对数据进行分区,而无需再次预处理:
preproc.task.train = subsetTask(preproc.task, inTraining)
resample("classif.lda", preproc.task.train, rdesc)