训练和测试集中类比例的不平衡会导致验证准确性差吗



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

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

测试和训练数据都有缺失的值,我用RBM来推断。

我的问题是:

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

说明:

好吧,我认为你需要首先对你的数据进行重新采样,因为你的算法了解到大多数人对工作没有兴趣,如果我们只看你的培训数据的分布,这是真的(90%不感兴趣,10%感兴趣(。你的算法只是假设答案总是"不感兴趣"。这就是你在训练中达到高准确度的原因。

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

如何解决此问题:

重新对训练数据进行采样,以匹配训练集中50%:50%的分布。有不同的重新采样方法可用。例如:

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

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

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

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

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

对于python,您可以使用所谓的不平衡学习包,其中包含此处所述的所有方法。

最新更新