【问题标题】:How to use over-sampled data in cross validation?如何在交叉验证中使用过采样数据?
【发布时间】:2018-09-05 05:54:48
【问题描述】:

我有一个不平衡的数据集。我正在使用 SMOTE(合成少数过采样技术)来执行过采样。在执行二元分类时,我在这个过采样数据集上使用了 10 倍交叉验证。

但是,我最近看到了这篇论文; Joint use of over- and under-sampling techniques and cross-validation for the development and assessment of prediction models 提到在交叉验证期间使用过采样数据集是不正确的,因为它会导致性能估计过于乐观。

我想验证在交叉验证中使用过采样数据正确方法/程序

【问题讨论】:

  • 您总是希望独立执行每个交叉验证折叠的所有分析步骤。在这种情况下,分别对每个折叠进行过度采样。你链接到的论文描述了做简历的正确方法。
  • 我认为这个问题应该在 Cross Validated stats.stackexchange.com 上,因为它不是关于实施,而是更多关于想法。
  • @Gabe 你的意思是10折,我必须分别进行过采样吗?
  • 是的,您希望仅使用该折叠中的数据对每个折叠本身进行过度采样。这样,您实际上是在对 10 个“不同”数据集进行分类(包括过采样),这是进行 CV 来估计性能的关键。我自己不使用 Weka,但似乎 nekomatic 的回答解释了如何在那里实现它。

标签: machine-learning weka cross-validation oversampling


【解决方案1】:

为避免在使用监督过滤器时 Weka 中的交叉验证对性能估计过于乐观,请使用 FilteredClassifier(在 meta 类别中)并使用过滤器(例如 SMOTE)和分类器(例如朴素贝叶斯)对其进行配置你想用。

对于每个交叉验证折叠,Weka 将仅使用该折叠的训练数据来参数化过滤器。

当您使用 SMOTE 执行此操作时,您不会在 Weka 结果窗口中看到实例数量的差异,但是发生的情况是 Weka 正在 SMOTE 应用的数据集上构建模型,但显示了评估的输出它在未过滤的训练集上——这在理解真实性能方面是有意义的。尝试更改 SMOTE 过滤器设置(例如,-P 设置,它控制生成的额外少数类实例的数量占数据集中数量的百分比),您应该会看到性能发生变化,表明过滤器实际上是做某事。

FilteredClassifier 的使用在 使用 Weka 进行更多数据挖掘 online course 中的 this videothese slides 中进行了说明。在这个例子中,滤波操作是有监督的离散化,而不是 SMOTE,但同样的原理适用于任何有监督的滤波器。

如果您对 SMOTE 技术还有其他问题,我建议您通过 Cross Validated 和/或 Weka mailing list 向他们提问。

【讨论】:

  • 不,不要在Preprocess 窗格中应用任何内容(因为这将使用整个数据集,因此会影响性能结果)。将FilteredClassifier 配置为Naive Bayes 作为分类器,SMOTE 作为过滤器。
  • 是的,正是这个想法。请参阅我的编辑以获取参考资料 - 如果您对如何使用该程序和技术有任何疑问,我建议您通过 free online Weka courses 工作。
  • 我无法快速找到参考,但我很确定 Weka 正在 SMOTE 应用数据集上构建模型,但显示了在未过滤训练上评估它的输出set - 这在理解真实性能方面是有意义的。尝试更改 SMOTE 过滤器设置(例如 -P 百分比设置),您应该会看到性能发生变化,表明 SMOTE 确实在做某事。
  • 是的,我认为 -P 是增加少数类中样本数量的百分比 - 即 0 不会添加任何样本,100 会使样本数量增加一倍,等等 - 所以你只需要计算合适的值来使用。
  • 我不是 SMOTE 方面的专家,所以我建议您将该问题提交到 Cross Validated SE 网站和/或 Weka 邮件列表,这通常会很有帮助(请参阅编辑后的链接答案)。重要的是,您能否在真实数据上获得可接受的性能。
【解决方案2】:

正确的方法是首先将数据拆分为多个折叠,然后仅对训练数据应用采样,让验证数据保持原样。下图说明了如何以 K 倍方式重新采样数据集的正确方法。

如果你想在 python 中实现这一点,有一个库可以做到这一点: 图书馆链接:https://pypi.org/project/k-fold-imblearn/

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 2023-03-17
    • 2019-10-02
    • 2019-10-27
    • 2021-09-25
    • 2019-11-19
    • 1970-01-01
    • 2018-07-20
    • 2023-02-24
    相关资源
    最近更新 更多