在MLR
中,有一种实现嵌套交叉验证的方法。在嵌套 cv 中,内循环用于选择最佳调优参数,外循环用于评估模型性能。当我将嵌套 cv 与特征选择过程相结合时,我对内部最佳调优模型MLR
返回的内容有点困惑。例如,我想首先应用一个基于结果<0.05 的相关 p 值的过滤器。在嵌套的 cv 中(我在训练、验证和测试集中说(,它应该是: 在内部循环中,对于每个训练集,应用过滤器,然后调整我们感兴趣的参数并在验证集中进行测试。在内部循环中,我们可以获得最佳调优参数和与之关联的功能集。
我想知道的是内部最佳调优参数将返回什么用于外部循环训练,我假设有两种可能的模型:
内部最佳调优模型仅返回最佳调优参数,而不返回所选特征子集。因此,在外部循环中,我们将首先应用相同的筛选器,然后使用最佳调优参数训练 + 验证集。
内部最佳调优模型返回最佳调优参数和所选特征子集。因此,在外部循环中,我们将仅使用最佳调优参数和选定的特征子集(来自内部循环(训练训练+验证集。
在我看来,我认为第一个更合乎逻辑。我的部分代码如下:
svm_learner<-makeLearner("classif.svm",predict.type="prob",fix.factors.prediction = TRUE)
svm_filter<-makeFilterWrapper(learner = svm_learner,
fw.method = "t.test.filter", fw.threshold = -0.05)
svm_filter_nested<-makeTuneWrapper(svm_filter,par.set=ps,
control=ctrl,resampling=inner)
r=resample(svm_filter_nested,task,resampling=outer,models=TRUE)
选项 2( 是正确的。
超参数针对所选特征子集进行了优化。如果您在外循环中再次重新运行过滤器进程,我将没有意义。
在每个外部折叠中发生的参数来自内部优化循环的参数不超过训练/预测。外循环中没有进行优化。
PS:你可能想在 https://stats.stackexchange.com/而不是Stackoverflow上提出这样的一般性问题,因为它们与一般(统计(概念而不是编程有关。 人们会投票关闭这些问题,因为它们与编程无关。(请注意,MLR团队中没有人在看stats.stackexchange问题(