对于Imbalance Data的总结
来源:互联网 发布:股价历史数据库 编辑:程序博客网 时间:2024/06/15 14:59
在实际项目中,遇到的imbalance的情况有很多,常见的一个情况就是异常检测(Anomaly Detection). 针对常见的办法进行总结。
通常来说,遇到imbalance的情况可以用一下的方法:
- 增加新的样本
- 上采样(over sampling)
- 下采样(under sampling)
上采样 vs 下采样
通俗来说,上采样就是增加imbalance中的样本
下采样就是去把正样本给消减一部分内容.
然而这两种方法都有着本身的弊病:
上采样容易加入一些无关紧要的负样本,或者是已有负样本的重复,导致over fitting
下采样会把有用样本中的一部分有效的信息给消减下去
所以有2种算法能够在一定程度上缓和这种情况:
- SMOTE
- Adasyn
Smote的原理
JAIR’2002的文章《SMOTE: Synthetic Minority Over-sampling Technique》提出了一种过采样算法SMOTE。概括来说,本算法基于“插值”来为少数类合成新的样本。下面介绍如何合成新的样本。
设训练集的一个少数类的样本数为 TT ,那么SMOTE算法将为这个少数类合成 NTNT 个新样本。这里要求 NN 必须是正整数,如果给定的 N<1N<1 那么算法将“认为”少数类的样本数 T=NTT=NT ,并将强制 N=1。
考虑该少数类的一个样本 ii ,其特征向量为 xi,i∈{1,…,T}xi,i∈{1,…,T} :
1. 首先从该少数类的全部 TT 个样本中找到样本 xixi 的 kk 个近邻(例如用欧氏距离),记为 xi(near),near∈{1,...,k}xi(near),near∈{1,...,k} ; 2. 然后从这 kk 个近邻中随机选择一个样本 xi(nn)xi(nn) ,再生成一个 00 到 11 之间的随机数 ζ1ζ1 ,从而合成一个新样本 xi1xi1 :
xi1=xi+ζ1⋅(xi(nn)−xi)
xi1=xi+ζ1⋅(xi(nn)−xi)
3. 将步骤2重复进行 NN 次,从而可以合成 NN 个新样本:xinew,new∈1,...,Nxinew,new∈1,...,N。 那么,对全部的 TT 个少数类样本进行上述操作,便可为该少数类合成 NTNT 个新样本。
Smote的优缺点:
优点:
- 通过随机采样生成的合成样本而非实例的副本,可以缓解过拟合的问题。
- 不会损失有价值信息。
缺点:
* 当生成合成性实例时,SMOTE 并不会把来自其他类的相邻实例考虑进来。这导致了类重叠的增加,并会引入额外的噪音。
* SMOTE 对高维数据不是很有效。
改进的合成少数类过采样技术(MSMOTE)
这是 SMOTE 的改进版本,SMOTE 没有考虑数据集中少数类和潜在噪声的基本分布。所以为了提高 SMOTE 的效果,MSMOTE 应运而生。
该算法将少数类别的样本分为 3 个不同的组:安全样本、边界样本和潜在噪声样本。分类通过计算少数类的样本和训练数据的样本之间的距离来完成。安全样本是可以提高分类器性能的那些数据点。而另一方面,噪声是可以降低分类器的性能的数据点。两者之间的那些数据点被分类为边界样本。
虽然 MSOMTE 的基本流程与 SMOTE 的基本流程相同,在 MSMOTE 中,选择近邻的策略不同于 SMOTE。该算法是从安全样本出发随机选择 k-最近邻的数据点,并从边界样本出发选择最近邻,并且不对潜在噪声样本进行任何操作。
另外一种方法就是Adasyn:
解决思路是根据数据分布情况为不同小众样本生成不同数量的新样本。首先根据最终的平衡程度设定总共需要生成的新小众样本数量 G,然后为每个小众样本 xi 计算分布比例
基于聚类的重抽样方法
(1)首先分别对正负例进行K-means聚类
(2)聚类之后进行Oversampling等系列方法
举例说明,假设我们运行K-means方法分别对正负例进行了聚类: 正例三个簇,个数分别为:20 , 5, 12 负例两个簇,个数分别为:4 ,6
可以看出,正负例簇中个数最大的为20,所以正例其他两个簇通过oversampling都提高到20个实例,负例簇都提高到(20+20+20)/2=30 个实例。
最后变为,正例三个簇:20,20,20 负例两个簇:30,30
基于聚类的抽样算法的优点:该算法不仅可以解决类间不平衡问题,而且还能解决类内部不平衡问题。
Sergey Quora提出了一种优雅的方法,他建议不要依赖随机样本来覆盖训练样本的种类,而是将r个群体中丰富类别进行聚类,其中r为r中的例数。每个组只保留集群中心(medoid)。然后,基于稀有类和仅保留的类别对该模型进行训练。
不平衡学习的评价方法
正确率和F值,G-Mean和ROC曲线和AUC。
[机器学习模型的评价指标和方法 ]
[综述论文“Learning from Imbalanced Data”] http://blog.csdn.net/pipisorry/article/details/52574156
[不平衡数据下的机器学习方法简介]http://www.jianshu.com/p/3e8b9f2764c8
[机器学习︱非平衡数据处理方式与评估] http://blog.csdn.net/sinat_26917383/article/details/75890859
[不平衡数据处理]
https://github.com/ThoughtWorksInc/dataclouds/blob/master/source/_posts/%E4%B8%8D%E5%B9%B3%E8%A1%A1%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86.md
- 对于Imbalance Data的总结
- ML on Imbalance Data
- imbalance data分类解决办法
- DL:DBN on Imbalance Data 问题所在
- 【whr的深度学习总结1】使用Matconvnet训练imbalance全连接网络
- 对于Ext.data.Store 介紹 与总结,以及对以前代码的重构与优化
- 对于编程的总结
- 对于异常的总结
- 对于 gevent 的总结
- 对于poll的总结
- 对于algorithm101的总结
- 对于algorithm102的总结
- 对于检索的总结
- 对于背包的总结
- 对于DWR的简单总结
- 对于DWR的简单总结
- 对于格式化字符串的总结
- 对于Hibernate的一些总结
- oracle可视化建表网站
- 并发和并行的区别
- bzoj 4345: [POI2016]Korale
- 《红楼梦》的香气空白
- 用程序打三角形
- 对于Imbalance Data的总结
- 179. Largest Number
- Spark
- C语言和C++语言关系
- css
- 设计模式(17)——中介者 Mediator
- XML编程(CRUD)
- C++ template
- SpringMVC知识汇总