训练集和测试集的 class 比例失衡会导致验证准确率不佳吗?

Can imbalance in class ratio in training and testing set cause poor validation accuracy?

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

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

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

我的问题是:

由于类的比率不平衡,验证准确性很糟糕,还是由于错误地输入了缺失值?

解释:

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

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

如何解决这个问题:

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

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

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

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

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

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

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