【问题标题】:Information leakage in Cross-validation交叉验证中的信息泄露
【发布时间】:2014-10-25 09:53:49
【问题描述】:

分类问题描述:

  • 假设一个常规数据集 X 具有 n 样本和 d 特征。
  • 这个分类问题有点难(特征多,样本少,总体 AUC 低 ~70%)。
  • 提到特征选择/提取、降维、内核和许多分类器可能很有用。所以我对尝试这些不感兴趣。
  • 我不期待看到整体 AUC 的改善。目标是在特征的大海捞针中找到相关特征。

我的方法描述:

  1. 我选择d 特征的所有成对组合,并使用n 样本创建许多二维子数据集x
  2. 在每个子数据集 x 上,我执行 10 倍交叉验证(使用主数据集 X 的所有样本)。一个非常长的过程,假设需要数周的计算。
  3. 我选择顶部 k 对(例如根据最高 AUC)并将它们标记为 +。所有其他对都标记为-
  4. 对于每一对,我可以计算几个属性(例如,使用专家知识计算每对之间的关​​系)。无需使用主数据集X 中的标签即可计算这些属性。
  5. 现在我有标记为+- 的对。此外,每一对都有许多基于专家知识计算的属性(即特征)。因此,我有一个新的分类问题。让我们将这个新生成的数据集称为Y
  6. 我在遵循交叉验证规则的同时在Y 上训练分类器。令人惊讶的是,我可以用90% AUC 预测+- 标签。

据我所知,这意味着我能够选择相关的功能。然而,看到90% AUC 让我担心在这个漫长的过程中某处信息泄露。特别是在第 3 步。 我想知道是否有人能看到这种方法的任何泄漏。


信息泄露:

  • 在实际特征中加入目标标签。您的分类器会在没有学到任何东西的情况下产生良好的预测。
  • 在训练阶段向您的分类器显示您的测试集。您的分类器将“记住”测试集及其相应的标签,而无需“学习”任何东西。

更新 1:

我想强调的是,我确实在步骤 1 中使用了 X 的所有数据点。但是,我不再使用它们(即使是用于测试)。最终的 90% AUC 是从数据集 Y 的预测标签中获得的。 另一方面,需要注意的是,即使我将主数据集X 的值随机化,数据集Y 的计算特征也将是相同的。但是,Y 中的样本标签会发生变化,因为之前的 + 对可能不再是一个好标签。因此它们将被标记为-

更新 2:

虽然我没有任何意见,但我将陈述我在与模式识别研究人员交谈的 4 天中得到的结果。简而言之,我确信没有信息泄漏(只要我不会回到第一个数据集X 并使用它的标签)。稍后,如果我想检查是否可以在X 中获得更好的性能(即预测样本标签),我只需要使用数据集X 的一部分进行成对比较(作为训练集)。然后我可以使用X 中的其余样本作为测试集,同时使用正预测的Y 对作为特征。 如果没有人可以拒绝此方法,我会将其设置为答案。

【问题讨论】:

    标签: machine-learning cross-validation


    【解决方案1】:

    如果您在第 1 步中的流程使用所有数据。那么你正在学习的特征有来自整个数据集的信息。由于您基于整个数据集进行选择并进行了验证,因此您正在泄漏严重的信息。

    在用完并尝试像这样的奇怪策略之前,您可能应该坚持使用众所周知/已经为您完成的工具。尝试使用具有 L1 正则化的模型为您进行特征选择,或者从一些更简单的搜索开始,例如 Sequential Backward Selection。

    如果最终正确地进行交叉验证,则每次训练都会执行自己独立的特征选择。如果你做一个全局特征选择然后做 CV,你会做错并且可能会泄露信息。

    【讨论】:

    • 感谢您的回复拉夫。我猜你误读了我写的东西。如果您查看第 6 步,我提到我在新创建的数据集上获得了 90% 的 AUC。此外,我还表示几乎所有的特征选择/提取方法都已应用。包括 L1 正则化(称为 Lasso)。我将添加一些更新以避免将来的混乱。
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2023-03-10
    • 2018-03-09
    • 2018-06-13
    • 2012-01-13
    相关资源
    最近更新 更多