场景描述
在我们训练二分类网络的时候,例如医疗诊断、网络入侵检测、信用卡反诈骗邓。经常会遇到的问题就是正负样本不均衡的问题。如果我们直接采用不均衡的样本集进行训练和处理,会存在一些问题。
例如,如果正负样本的比例达到1:99,那么我们的分类器简单地把我们的所有样本全部判定为负样本,都有99%的正确率,显然这都不是我们想要的,我们想让分类器在正样本和负样本上都有足够的正确率和准确率。
问题描述
对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好地训练分类模型?
分析与解答
为什么很多分类模型在训练数据不均衡时会出现问题?本质原因是模型在训练时优化的目标函数和人们在测试时使用的评价标准不一致。这种“不一致”可能是由于训练数据的样本分布与测试时期望的样本分布不一致,例如,在训练时优化的是在整个训练集(正负样本比例可能是1:99)上的正确率,而测试时可能想要模型在正样本和负样本上的平均正确率尽可能大(实际上是期望正负样本比例为1:1);也可能是训练阶段不同类别的权重(重要性)与测试阶段不一致,例如训练时认为所有样本的贡献是相等的,而测试时 False Positive和False Negative有着不同的代价。
根据上述分析,一可以从两个角度来处理样本不均衡问题:
1.数据
2.算法
1.数据
数据解决该问题的思路就是重采样。通过采样来使得我们分布不均衡的数据分布均衡。
我们先从最简单的思路开始理解。
最简单的处理不平衡的样本集算法是随机采样。采样一般分为过采样(Over-sampling)和欠采样(Under-sampling)。
2.算法
在样本不均衡的时候,也可以通过改变模型训练中的目标函数(如代价函数敏感学习中不同类别有不同的权重)来矫正这种不平衡性。如果样本数目及其不平衡的时候,我们也可以把我们当前所解决的问题场景,转化为单类学习(one-class learning)、异常检测(anomaly detection).
总结
为了避免深度学习中样本数据不均衡,影响我们最后在实际场景的表现结果,我们需要做好以下几点:
这篇文章的核心思想是:
当我们使用机器学习算法时,必须谨慎选择模型的评估指标:我们必须使用那些能够帮助更好了解模型在实现目标方面的表现的指标;在处理不平衡数据集时,如果类与给定变量不能很好地分离,且我们的目标是获得最佳准确率,那么得到的分类器可能只是预测结果为多数类的朴素分类器;可以使用重采样方法,但必须仔细考虑:这不应该作为独立的解决方案使用,而是必须与问题相结合以实现特定的目标;重新处理问题本身通常是解决不平衡类问题的最佳方法:分类器和决策规则必须根据目标进行设置。
我们应该注意,本文并未讨论到所有技术,如常用于批量训练分类器的「分层抽样」技术。当面对不平衡类问题时,这种技术(通过消除批次内的比例差异)可使训练过程更加稳定。
参考文献
《百面机器学习:算法工程师带你去面试》
ps:特别好的一本书,推荐给有一定入门基础的朋友,能够更加深入的理解场景问题
hulu北京关于这个问题在知乎上的补充
https://zhuanlan.zhihu.com/p/31601557
机器之心在不均衡样本上的讨论
https://zhuanlan.zhihu.com/p/56960799