Machine learning 培训和测试集中的班级比例失衡是否会导致验证准确性差?

Machine learning 培训和测试集中的班级比例失衡是否会导致验证准确性差?,machine-learning,deep-learning,data-science,oversampling,Machine Learning,Deep Learning,Data Science,Oversampling,我正在参加一个黑客竞赛,我们应该根据性别、城市、培训时间、经验、当前公司等特征预测用户是否对工作感兴趣 在培训集中,大约90%的人对工作不感兴趣,而只有10%的人对工作感兴趣。 但在他们发布的公共测试集中,这两个类别中的每一个都有50%,我的验证准确率不超过55%,而培训准确率为99% 测试和训练数据都缺少值,我使用RBM进行插补 我的问题是: 由于类别比例的不平衡,或者是由于错误地输入缺失值,验证准确性很差?解释: 好的,我认为你需要首先对数据进行重采样,因为你的算法知道大多数人对工作不感兴趣

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

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

测试和训练数据都缺少值,我使用RBM进行插补

我的问题是:

由于类别比例的不平衡,或者是由于错误地输入缺失值,验证准确性很差?

解释: 好的,我认为你需要首先对数据进行重采样,因为你的算法知道大多数人对工作不感兴趣,如果我们只看一下你的培训数据分布(90%不感兴趣,10%感兴趣),这是真的。你的算法只是假设答案总是“不感兴趣”。这就是为什么你能在训练集上达到很高的准确性

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

如何解决这个问题: 对训练数据重新采样,以匹配训练集中的50%:50%分布。有不同的重采样方法可用。例如:

  • 抽样不足
  • 过采样
  • 合成少数超采样技术(SMOTE)
抽样下:通过删除项目对大多数类别进行抽样。在你的情况下(10%的人感兴趣,10%的人没有中间人)。缺点是你只能从20%的可用培训数据中学习

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

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

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


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

在你开始训练之前,你是在平衡你的训练装备吗?@TimH,我正在给它喂食。90%不感兴趣,10%感兴趣。我如何平衡我的数据?这可能是一个问题,想象一下,如果你预测每个人都不感兴趣,那么它的准确率仍然会达到90%,因此单是准确率并不是一个好的性能衡量标准。我同意Tim的观点。在平衡数据集后,您还需要关注如何避免过度拟合,因为您的训练集似乎也过度拟合了。@TimH我尝试了SMOTE,我的数据已增加到30k个样本。使用支持向量机,我得到了62%的准确率。我注意到的是,输出15k测试样本,10k预测为否,只有5k预测为是。但每个都需要7.5。也许,我们可以降低阈值,将样本分类为“感兴趣”。如果输出>0.3感兴趣,输出<0.3被拒绝?你怎么认为?