在交叉验证之前执行无监督特征选择真的很好吗?

机器算法验证 机器学习 交叉验证 特征选择
2022-03-06 20:06:30

The Elements of Statistical Learning中,我发现了以下陈述:

有一个条件:可以在样本被遗漏之前完成初始的无监督筛选步骤。例如,我们可以在开始交叉验证之前选择所有 50 个样本中方差最大的 1000 个预测变量。由于此过滤不涉及类别标签,因此不会给预测器带来不公平的优势。

这真的有效吗?我的意思是,通过预先过滤属性,我们不是在模仿训练数据/新数据环境——那么我们正在执行的过滤不受监督是否重要?在交叉验证过程中实际执行所有预处理步骤不是更好吗?如果不是这样,那么这意味着所有的无监督预处理都可以预先进行,包括特征归一化/PCA等。但是通过对整个训练集进行这些操作,我们实际上是在向训练集泄露一些数据。我可以同意,对于相对稳定的数据集,这些差异很可能非常小——但这并不意味着它们不存在,对吧?思考这个问题的正确方法是什么?

2个回答

我请求在这个问题上与@AmiTavory 的观点以及统计学习要素有所不同。

来自样本量非常小的应用领域,我的经验是,无监督的预处理步骤也会引入严重的偏差。

在我的领域中,在训练分类器之前最常使用 PCA 进行降维。虽然我无法在此处显示数据,但我已经看到 PCA +(交叉验证 LDA)与交叉验证(PCA + LDA)低估了错误率大约一个数量级(这通常表明 PCA 不稳定。)

至于 Elements 的“不公平优势”论证,如果检查 taining + 测试用例的方差,我们最终会得到适用于训练和测试用例的特征。因此,我们在这里创造了一个自我实现的预言,这是过度乐观偏见的原因。如果您有相当舒适的样本量,那么这种偏差就会很低。

所以我推荐一种比 Elements 稍微保守的方法:

  • 考虑多个案例的预处理计算需要包含在验证中:即它们仅在相应的训练集上计算(然后应用于测试数据)
  • 单独考虑每种情况的预处理步骤(我是光谱学家:示例将是基线校正和强度归一化,这是一种逐行归一化),只要它们在第一步之前就可以从交叉验证中提取出来计算多种情况。

话虽如此,交叉验证也只是进行适当验证研究的捷径。因此,您可能会与实用性争论:

  • 您可以检查有问题的预处理是否产生稳定的结果(例如,您可以通过交叉验证来做到这一点)。如果您发现它在样本量较小的情况下已经非常稳定,恕我直言,您可能会争辩说,将其从交叉验证中拉出不会引入太多偏差。

  • 然而,引用一位前任主管的话:计算时间不是科学论据。
    我经常为交叉验证进行几次折叠和几次迭代的“潜行预览”,以确保所有代码(包括结果的摘要/图表),然后将其留在服务器上过夜或周末左右更细粒度的交叉验证。

作为交叉验证之前完成的一个阶段,无监督特征选择有点类似于特征归一化:

  1. 从交叉验证的特定折叠的角度来看,训练数据窥探了测试数据(尽管仅在自变量中)。

  2. 这种偷看是相对温和的。

在这个问题中讨论了交叉验证之前的特征归一化引用 Dikran Marsupial 的答案

交叉验证最好被视为一种估计统计过程性能的方法,而不是统计模型。因此,为了获得无偏的性能估计,您需要在交叉验证的每个折叠中分别重复该过程的每个元素,其中包括标准化。

因此,如果您可以节省资源,最好的办法是让每个交叉验证折叠从头开始进行任何与数据相关的处理。

然而,正如该问题的答案所说,在实践中,颠倒顺序可能不会改变太多。肯定没有实质性的不公平优势y依赖的特征选择展品。恕我直言,这是对Elements Of Statistical Learning引用的解释