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

时间:2018-07-20 02:28:31

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

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

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

测试和培训数据均缺少值,我使用RBM估算。

我的问题是:

由于类比例的不平衡,还是由于错误地估算缺失值而导致的验证准确性很差?

1 个答案:

答案 0 :(得分:1)

说明:

好吧,我认为您需要首先对数据进行重新采样,因为您的算法了解到大多数人对工作没有兴趣,如果我们只看一下您的培训数据的分布(90%不感兴趣,10%感兴趣)。您的算法仅假设答案始终是“不感兴趣”。这就是为什么您在训练集上达到高精度的原因。

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

如何解决此问题:

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

  • 欠采样
  • 过度采样
  • 少数民族综合采样技术(SMOTE)

欠采样:通过删除项目来对多数类进行降采样。在您的情况下,这将是(10%的兴趣和10%的兴趣没有交织在一起)。缺点是您仅会学习20%的可用训练数据。

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

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

我将尝试开始使用简单的over-,并检查是否可以解决您的问题。

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