-2

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

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

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

我的问题是:

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

4

1 回答 1

1

解释:

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

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

如何解决这个问题呢:

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

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

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

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

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

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

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

于 2018-07-20T07:10:52.350 回答