【问题标题】:Can imbalance in class ratio in training and testing set cause poor validation accuracy?训练集和测试集的类比不平衡会导致验证准确度差吗?
【发布时间】:2018-12-28 06:37:12
【问题描述】:

我正在参加一个黑客马拉松,我们应该根据性别、城市、培训时间、经验、当前公司等特征来预测用户是否对工作感兴趣。

在训练集中,大约有 90% 的人对工作不感兴趣,而只有 10% 的人对工作感兴趣。 但是在他们发布的公共测试集中,这两个分类中的每一个都有 50%,我的验证准确度没有超过 55%,而训练准确度为 99%。

测试和训练数据都有缺失值,我正在使用 RBM 进行估算。

我的问题是:

验证准确率很差,是因为类别比例不平衡,还是因为错误地估算了缺失值?

【问题讨论】:

  • 在开始训练之前,您是否平衡了训练集?
  • @TimH 我照原样喂它。 90% 不感兴趣,10% 感兴趣。如何平衡我的数据?
  • 这可能是个问题,想象一下,如果您的分类器预测每个人都不感兴趣,它仍然会获得 90% 的准确度,因此仅靠准确度并不是一个好的性能指标

标签: machine-learning deep-learning data-science oversampling


【解决方案1】:

解释:

好的,我认为您需要先重新采样您的数据,因为您的算法知道大多数人对工作不感兴趣,如果我们只查看您的训练数据的分布情况就是这样(90% 不感兴趣,10%感兴趣的)。你的算法只是假设答案总是“不感兴趣”。这就是您在训练集上达到高精度的原因。

在您的测试数据中,分布更改为 50%:50%。您的算法仍然假设所有人“不感兴趣”并且无法预测感兴趣的人。 (你在测试集上的准确率下降到大约 50%)

如何解决这个问题:

重新采样您的训练数据以匹配训练集中的 50%:50% 分布。有不同的重采样方法可用。一些例子是:

  • 欠采样
  • 过采样
  • 合成少数过采样技术 (SMOTE)

欠采样:通过删除项目对多数类进行下采样。在你的情况下,它会是(10% 感兴趣,10% 不感兴趣)。缺点是你只会学习 20% 的可用训练数据。

过采样:通过添加冗余点对少数类进行上采样。优势:您将使用所有数据。 缺点:可能导致过拟合。

SMOTE:一种更复杂的过采样方法,它添加了合成样本。

我会尝试开始使用简单的 over- 并检查这是否能解决您的问题。

对于python,您可以使用所谓的imbalanced-learn 包,其中包含此处所述的所有方法。

【讨论】:

  • 我同意蒂姆的观点。平衡数据集后,您还需要关注如何避免过度拟合,因为您似乎也对训练集进行了过度拟合。
  • @TimH 我试过 SMOTE ,我的数据被加强到 30k 个样本。使用 SVM,我得到了 62% 的准确率。我注意到输出 15k 个测试样本,10k 被预测为 no,只有 5k 被预测为 yes。但每个要求是 7.5。
  • 也许,我们可以降低阈值以将样本分类为“感兴趣”。比如如果输出 > 0.3 感兴趣并且输出
猜你喜欢
  • 2017-06-13
  • 2020-12-05
  • 2020-07-08
  • 2013-01-15
  • 2019-12-05
  • 1970-01-01
  • 2020-08-05
  • 2020-06-16
  • 2020-07-08
相关资源
最近更新 更多