机器学习 周志华书 类别不平衡问题解决办法

三个解决办法:假设反例数目多于正例数目,类别不平衡

1. 过采样 : 增加一些正例,使得正反例数目接近,再进行学习;

2. 负采样 : 去除一些反例,使得正反例数目接近,再进行学习;

3. 再缩放策略 :

                直接基于原始训练集进行学习,但是在训练好的分类器进行预测时,将式子judge嵌入决策过程,称为阈值移动.

                judge = y'/(1-y') = [y/(1-y)] * [m-/m+] 其中m-代表反例样本数,m+代表正例样本数,

                

为什么Judge长那个形式呢?

因为对于线性分类器进行二分类,y = w * x + b对新样本x进行分类时,y是样本属于正例的概率,事实上是在用预测出的y值与一个阈值比较,例如通常在y>0.5时判别为正例,否则为反例。y是实际上表达了预测为正例的可能性,几率

y/(1-y)反映了新样本为正例的可能性与为反例的可能性的比值,阈值设为0.5恰表明分类器认为真实正例和反例可能性相同,即分类器决策为:

             y/(1-y) > 1, 即为正例.

然而,当训练集中正反例的数目不同时,令m+表示正例数目,m-表示反例数目,则观测几率是(m+)/(m-),由于通常假设训练集是真实样本总体的无偏估计,因此几率代表了真实的概率。于是只要分类器的预测几率高于观测几率,就应判定为正例,即:

若 y/(1-y) >(m+)/(m-), 即为正例.也就是 y/(1-y) * (m-)/(m+) >1,即为正例.这就是“再缩放策略”,按照训练样本中正例和反例的比率,进行阈值缩放。

三种解决方法比较:

(1). 欠采样时间开销通常远小于过采样,但会丢弃很多反例,可能会丢失重要信息,且使得训练集远小于初始训练集规模,过采样增加了很多正例,使得训练集大于初始训练集。

(2). 过采样如果简单的对正例样本重复采样,会导致严重的过拟合,应该采用SMOTE算法进行采样,即通过对训练集里的正例进行插值来产生额外的正例。SMOTE算法截图如下:来自于链接https://blog.csdn.net/qq_23534759/article/details/80499759 


(3). 欠采样的代表算法是EasyEnsemble,即利用集成学习机制,将反例划分成若干个集合,分别于正例集组合,训练不同的分类器,这样看来对每个分类器进行了欠采样,在全局来看不会丢失任何信息,最终根据多个分类器集成结果,来分类。

猜你喜欢

转载自blog.csdn.net/qq_23534759/article/details/80499759