分类问题:如何解决样本分布不均衡

分类问题:如何解决样本分布不均衡

提出问题

样本分布不均衡是解决分类问题过程中经常遇到的一种情况。

当数据集中某一类的样本数量远超于其他样本的时候,模型自然会有一种倾向使得分类结果偏向于该类样本,这是概率统计中先验的性质。

在极端情况下,如果有一类样本的数量占了数据集的绝大多数,那么哪怕模型直接将所有的样本都预测为该类样本,模型预测的错误率依然不会太低。

为了发现这种情况,我们可以采用AUC等其他的指标。当出现样本不均衡时,AUC会趋于0.5

解决问题

1. 改变采样的方式

既然不同类别的样本的数量相差悬殊时,会导致模型的预测出现较为明显的偏差,那么我们可以通过采样的方式来平衡不同类别的数量。

采样的方式有两种:

第一种是欠采样,就是对数量较多类别的样本再次采样,取其中的一部分,使其最终输入模型的数量与其他类别样本的数量相仿。欠采样显然是最理想的方案,因为完美的平衡了不同类别样本的数量,从根本上解决了问题。但是,在解决实际问题的时候,我们往往没有那么多的数据集可以供我们挥霍,所以在现实中这种方法的可行性并不高。

第二种是重采样,意思是,对数量较少的类别的样本重复采样,使其最终输入模型的数量与数量多的类别的样本的数量相仿。但是,虽然重采样可以在样本数量少,样本珍惜的情况下,手动的使不同类别样本的数量趋于平衡,但是它很大程度上破坏了数据的分布(其实欠采样也是)。

2. 施加惩罚项

样本分布不均衡一个很直观的体现就是,哪怕我把所用样本都预测为样本数量较多的类别,我的误差也不会太高。这样,模型在以误差(错误率)为指标的情况下,依然能取得较高分数。

那么,如果我们对“将样本数量较少的类别的样本分类错误”这一情况施加惩罚呢?

很好理解,在这样的情况下,哪怕模型在错误率方面的得分很高,但因为惩罚存在,整体的分数会下降。所以模型会主动避免这样的情况出现。

接下来的问题是,我们该如何设计惩罚项呢?

首先想到的是分类问题中相当经典的SVM模型中的软间隔。我们可以对每一个点施加一个约束,约束如果分类错误,该点距离划分超平面点距离不能超过多少。统计每一个约束,我们的目标是让模型在基于错误率的得分高的同时,也要保证所有点误分类到超平面的和不能太大,即这部分的得分不能太低。

所以,惩罚项的核心是 ∑ i = 1 n ξ i \displaystyle\sum_{i=1}^n{\xi_i} i=1nξi,其中是 ξ i \xi_i ξi x i x_i xi到超平面的距离。

接下来要考虑的是,我们怎么体现惩罚的大小呢,并如何设置呢?

这个很好理解,我们在惩罚项前面加上系数 C k C_k Ck,让其反应类别 c k c_k ck的惩罚的大小。

对与其数值,既然我们希望样本数量少的分类错了以后惩罚更大,样本数量多的分类错了以后惩罚更小,那么我们不如取样本数的倒数为系数。

总样本数为 N N N,第 c k c_k ck个类别的样本的样本数为 N k N_k Nk,那么 C k = N k N C_k=\cfrac{N_k}{N} Ck=NNk

最终的惩罚项为 ∑ x i ∈ c k ∑ i = 1 n C k ξ i \displaystyle\sum_{x_i\in c_k}\sum_{i=1}^n{C_k\xi_i} xicki=1nCkξi

你可能感兴趣的:(机器学习,分类,机器学习)