交叉验证中的信息泄漏

时间:2014-09-01 07:58:56

标签: machine-learning cross-validation

分类问题描述:

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

我的方法描述:

  1. 我选择了d个功能的所有成对组合,并使用x个样本创建了许多二维子数据集n
  2. 在每个子数据集x上,我执行10次交叉验证(使用主数据集X的所有样本)。这是一个非常漫长的过程,需要数周的计算。
  3. 我选择了顶级k对(例如根据最高AUC)并将其标记为+。所有其他对都标记为-
  4. 对于每一对,我可以计算几个属性(例如,使用Expert的知识,每对之间的关​​系)。可以在不使用主数据集X中的标签的情况下计算这些属性。
  5. 现在我有成对标记为+-的对。此外,每对都有许多基于专家知识(即特征)计算的属性。因此,我有一个新的分类问题。让我们调用这个新生成的数据集Y
  6. 我在Y上训练分类器,同时遵循交叉验证规则。令人惊讶的是,我可以使用+ AUC预测-90%标签。
  7. 据我所知,这意味着我可以选择相关功能。然而,看到90% AUC让我担心在这个漫长的过程中某处的信息泄漏。特别是在第3步。 我想知道是否有人能看到这种方法有任何泄漏。


    信息泄漏:

    • 在实际功能中加入目标标签。你的分类器会产生很好的预测,但没有学到任何东西。
    • 在培训阶段向您的分类器显示您的测试集。您的分类器将“记住”测试集及其相应的标签,而无需“学习”任何内容。

    更新1:

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

    更新2:

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

1 个答案:

答案 0 :(得分:0)

如果您在步骤1中的流程使用了所有数据。然后,您正在学习的功能包含整个数据集的信息。由于您是根据整个数据集和THEN验证选择的,因此您正在泄漏严重的信息。

你可能应该坚持使用众所周知/已经为你做过的工具,然后再用完这些奇怪的策略。尝试使用具有L1正则化的模型为您进行特征选择,或者从顺序向后选择等一些更简单的搜索开始。

如果最终正确地进行了交叉验证,则每次培训都会执行自己独立的功能选择。如果你做了一个全局特征选择,然后做了简历,你就会做错了,可能会泄漏信息。