普通的机器学习方法,对于非平衡数据分类,总是倾向于最大化占比多的类别的分类准确率,而把占比少的类别分类错误,但是,现实应用中,我们研究的问题,对于少数的类别却更加感兴趣。所以总结一下,处理不平衡数据的方法。(假设占比多的正样本,占比少的为负样本)
1、过采样
增加少类别的样本,代表算法是SMOTE算法,基本思想是对每一个负样本利用KNN找到K个近邻,在这k个近邻
中根据采样倍率随机有放回的选取样本o,按照公式
o
(
n
e
w
)
=
o
+
r
a
n
d
(
0
,
1
)
∗
(
x
−
o
)
o(new)=o+rand(0,1)*(x-o)
o(new)=o+rand(0,1)∗(x−o)构建新的样本。
2、欠采样,即直接从正样本随机选取一部分样本,与负样本一起训练,但是这种方式会丢弃一些样本数据,造成信息的丢失,怎么减少信息损失呢?
3、采用集成学习的方法,多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。
4、基于聚类的欠采样方法,CUSBoost。首先把数据分开为少数类别实例和多数类别实例,然后使用K-means算法对多数类别实例进行聚类处理,并且从每个聚类中选择部分数据(这个地方怎么选视具体问题进行调整)来和少数类别实例组成平衡的数据。聚类的方法帮助我们在多数类别数据中选择了差异性更大的数据(同一个聚类里面的数据则选择的相对较少),这种方式适用于数据特征适于聚类的情况。
参考论文地址:CUSBoost: Cluster-based Under-sampling with Boosting for Imbalanced Classification
4、加权。对不同类别分错的代价不同,但是怎么合理设置权重是一个问题。
以后学习继续总结。