分类问题:如何解决样本分布不均衡
提出问题
样本分布不均衡是解决分类问题过程中经常遇到的一种情况。
当数据集中某一类的样本数量远超于其他样本的时候,模型自然会有一种倾向使得分类结果偏向于该类样本,这是概率统计中先验的性质。
在极端情况下,如果有一类样本的数量占了数据集的绝大多数,那么哪怕模型直接将所有的样本都预测为该类样本,模型预测的错误率依然不会太低。
为了发现这种情况,我们可以采用AUC等其他的指标。当出现样本不均衡时,AUC会趋于0.5
解决问题
1. 改变采样的方式
既然不同类别的样本的数量相差悬殊时,会导致模型的预测出现较为明显的偏差,那么我们可以通过采样的方式来平衡不同类别的数量。
采样的方式有两种:
第一种是欠采样,就是对数量较多类别的样本再次采样,取其中的一部分,使其最终输入模型的数量与其他类别样本的数量相仿。欠采样显然是最理想的方案,因为完美的平衡了不同类别样本的数量,从根本上解决了问题。但是,在解决实际问题的时候,我们往往没有那么多的数据集可以供我们挥霍,所以在现实中这种方法的可行性并不高。
第二种是重采样,意思是,对数量较少的类别的样本重复采样,使其最终输入模型的数量与数量多的类别的样本的数量相仿。但是,虽然重采样可以在样本数量少,样本珍惜的情况下,手动的使不同类别样本的数量趋于平衡,但是它很大程度上破坏了数据的分布(其实欠采样也是)。
2. 施加惩罚项
样本分布不均衡一个很直观的体现就是,哪怕我把所用样本都预测为样本数量较多的类别,我的误差也不会太高。这样,模型在以误差(错误率)为指标的情况下,依然能取得较高分数。
那么,如果我们对“将样本数量较少的类别的样本分类错误”这一情况施加惩罚呢?
很好理解,在这样的情况下,哪怕模型在错误率方面的得分很高,但因为惩罚存在,整体的分数会下降。所以模型会主动避免这样的情况出现。
接下来的问题是,我们该如何设计惩罚项呢?
首先想到的是分类问题中相当经典的SVM模型中的软间隔。我们可以对每一个点施加一个约束,约束如果分类错误,该点距离划分超平面点距离不能超过多少。统计每一个约束,我们的目标是让模型在基于错误率的得分高的同时,也要保证所有点误分类到超平面的和不能太大,即这部分的得分不能太低。
所以,惩罚项的核心是 ∑ i = 1 n ξ i \displaystyle\sum_{i=1}^n{\xi_i} i=1∑nξi