目录
1. 不平衡数据的定义
大多数分类学习方法都有一个共同的基本假设,即不同类别的训练样本数目相当。如果不同类别的训练样例数目稍有差别,通常影响不大,若差别很大,会对学习过程造成困扰。
例如有998个反例,但正例只有2个,那么学习方法只需返回一个永远将新样本预测为反例的学习器,就能达到98%的精度。如何只有的学习器没有价值,因为它不能预测出任何正例。
类别不平衡:值分类任务中不同类别的训练样例数目差别很大的情况。
2. 解决不平衡数据的方法
2.1 欠采样
直接对数据集里数量多的类别样例进行欠采样,去除一些类别多的样例使得各个类别的样例数据接近。
欠采样若随机丢弃样例,可能丢失一些重要信息。
- EasyEnsemble算法
利用集成学习机制,将(数量多的类别)划分为若干个集合供不同学习器使用,这样对每个学习器来看都进行了欠采样,但在全局来看却不会丢失重要信息。 - Balance Casecade算法
BalanceCascade算法基于Adaboost,将Adaboost作为基分类器,其核心思路是在每一轮训练时都使用多数类与少数类数量上相等的训练集,然后使用该分类器对全体多数类进行预测,通过控制分类阈值(即概率超过多少判定为少数类)来控制FP(False Positive)率,将所有判断正确的类(数量为负样本总数×(1-FP))删除,然后进入下一轮迭代继续降低多数类数量。 - Edited Nearest Neighbor(ENN)算法
删除不满足近邻规则的样本点。两种策略:
1)mode众数策略,计算每一个多数类样本的N个最近邻样本点,如果这N个最近邻样本点中多数样本点属于多数类,则删除该店,否则,保留该点;
2)all全部策略,计算每一个多数类样本的N个最近邻样本点,如果这N个最近邻样本点全部属于多数类,则删除该点,否则保留该点
含义:如果该点附近多数是或全部是多数类,则表明在决策程式判断时很有可能也会判断成多数类,同时表明该点所携带的绝大部分信息或者全部信息能够在近邻点中找到,所以该点携带了重复信息,删除对样本的信息并没有太大的伤害。
缺陷:真实数据中这样的点是比较少的,只能有限删除,并不能达到平衡数据的要求。
更多算法参考:https://zhuanlan.zhihu.com/p/37248527
2.2 过采样
对训练集里数量少的样例进行过采样,即增加一些数量少的类别样例使得各个类别样例的数目接近。
过采样不能简单地对初始(数量少的类别)样本进行重复采样,否则会导致严重的过拟合。
- SMOTE 算法
通过对于训练集里(数量少的类别)样例进行插值来产生额外的样例。
1、对于少数类中每一个样本 x i x_i xi,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
2、根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本 x i x_i xi,从其k近邻中随机选择若N个样本,假设选择的近邻为 x z i x_{zi} xzi。
3、对于每一个随机选出的近邻 x z i x_{zi} xzi,分别与原样本按照如下的公式构建新的样本
x n = x i + r a n d ( 0 , 1 ) ∗ ( x z i − x i ) x_n = x_i + rand(0,1)*(x_{zi}-x_i) xn=xi+rand(0,1)∗(xzi−xi)
缺陷:
1) 在近邻选择时,存在一定的盲目性。从上面的算法流程可以看出,在算法执行过程中,需要确定K值。从K值的定义可以看出,K值的下限是N值(N值为从K个近邻中随机挑选出的近邻样本的个数,且有N< K),N的大小可以根据负类样本数量、正类样本数量和数据集最后需要达到的平衡率决定。但K值的上限没有办法确定,只能根据具体的数据集去反复测试。因此如何确定K值,才能使算法达到最优这是未知的。
2)该算法无法克服非平衡数据集的数据分布问题,容易产生分布边缘化问题。由于负类样本的分布决定了其可选择的近邻,如果一个负类样本处在负类样本集的分布边缘,则由此负类样本和相邻样本产生的“人造”样本也会处在这个边缘,且会越来越边缘化,从而模糊了正类样本和负类样本的边界,而且使边界变得越来越模糊。这种边界模糊性,虽然使数据集的平衡性得到了改善,但加大了分类算法进行分类的难度.
2.3 阈值移动
对算法决策过程进行更改。
2.4 扩大数据集
是否可能再增加数据(一定要有小类样本数据),更多的数据往往战胜更好的算法。因为机器学习是使用现有的数据多整个数据的分布进行估计,因此更多的数据往往能够得到更多的分布信息,以及更好分布估计。
2.5 尝试对模型进行惩罚
比如你的分类任务是识别那些小类,那么可以对分类器的小类样本数据增加权值,降低大类样本的权值(这种方法其实是产生了新的数据分布,即产生了新的数据集),从而使得分类器将重点集中在小类样本身上。
一个具体做法就是,在训练分类器时,若分类器将小类样本分错时额外增加分类器一个小类样本分错代价,这个额外的代价可以使得分类器更加“关心”小类样本。如penalized-SVM和penalized-LDA算法。
2.6 将问题变为异常点检测
我们可以从不同于分类的角度去解决数据不均衡性问题,我们可以把那些小类的样本作为异常点(outliers),因此该问题便转化为异常点检测(anomaly detection)与变化趋势检测问题(change detection)。
异常点检测是对那些罕见事件进行识别。如通过机器的部件的振动识别机器故障,又如通过系统调用序列识别恶意程序。这些事件相对于正常情况是很少见的。
2.7 特殊的集成的方法
首先使用原始数据集训练第一个学习器L1。
然后使用50%在L1学习正确和50%学习错误的的那些样本训练得到学习器L2,即从L1中学习错误的样本集与学习正确的样本集中,循环一边采样一个。
接着,使用L1与L2不一致的那些样本去训练得到学习器L3。
最后,使用投票方式作为最后输出。
那么如何使用该算法来解决类别不平衡问题呢?
假设是一个二分类问题,大部分的样本都是true类。让L1输出始终为true。
使用50%在L1分类正确的与50%分类错误的样本训练得到L2,即从L1中学习错误的样本集与学习正确的样本集中,循环一边采样一个。因此,L2的训练样本是平衡的。
L使用L1与L2分类不一致的那些样本训练得到L3,即在L2中分类为false的那些样本。
最后,结合这三个分类器,采用投票的方式来决定分类结果,因此只有当L2与L3都分类为false时,最终结果才为false,否则true。
2.8 改变评价指标
对于不平衡数据样本的建模工作不能简单的用准确率进行评估,由于样本失衡,在建模过程中,学习器更加倾向于学习数据量多的类,这样对数据量少的类并不公平。目前常用的不平衡数据的评价指标是precision rate,recall rate,ROC,AUC,F1_score(近期知道,其实就是精准率和查全率的调和平均数)。