SMOTE

star2017 1年前 ⋅ 4777 阅读

from http://blog.sina.com.cn/s/blog_7103b28a0102wpqm.html

这是应对非均衡训练数据集的一种方法。

针对非均衡训练数据,可以采用的方法包括:1)对多数类进行欠采样,去除一些样本使样本数目接近;2)对少数类进行过采样,增加一些样本使样本数目接近;3)阈值移动(threshold-moving)。这些参考周志华《机器学习》P67。

针对使用过采样的方法,不能简单的对样本进行有放回的抽样,这样会导致过拟合。​SMOTE(Synthetic Minority Over-sampling TEchnique)是一种利用已有样本以及其近邻,合成新样本数据对少数类进行“过采样”的算法。算法的大致流程文字描述如下:

1.针对少数类中的每一个样本,找到其k个近邻(k值可选);

2.针对每一个样本,根据少数类需要扩大的情况,从近邻中随机挑选出需要的近邻;

例如,需要少数类增加200%,即原来有100个,希望扩到到300个,就从k个近邻中随机挑选出两个近邻。

3.针对一个样本a和它的近邻b:

3.1.计算两者在各个特征空间中值的差值;

3.2.并将这个差值乘以一个(0,1)的随机数后,与当前样本的特征值相加,作为新的合成样本。​

SMOTE

​SMOTE算法的为代码如下:

SMOTE
SMOTE

​除了对少数类样本使用SMOTE进行过采样,还可以将SMOTE与欠采样结合使用,即同时对多数类样本进行欠采样。对多数类样本欠采样也不能简单的随机去除样本,这样可能丢失重要信息(我觉得也可以理解成会损失独立同分布的特性),与SMOTE类似,也有专门的EasyEnsemble算法完成欠采样,后面会介绍。

之所以将过采样和欠采样相结合,我觉得有以下几个原因:

1.只采用对少数类进行过采样,少数类数据要扩大的倍数很大,这就不得不选取很大的k值,计算近邻的开销会增大很多。

2.当k值取得很大时,举个极端的例子,有100个样本,k值取99,这就相当于每次计算新的合成样本时​都要使用全部的样本,虽然有乘以(0,1)随机数的这一步骤,但是还是会使新生成的合成样本太接近,失去了合成样本的意义,还是会造成过拟合。

这样看来,同时采用欠采样和过采样,是不是要考虑​正负样本的比例,而不是一定要是1:1?因为如果为了凑1:1的比例,有可能要么少数类样本的过采样中k值很大,造成生成的合成样本过于密集,还是会过拟合,要么多数类样本的欠采样去除的样本数目太多,即使采用了EasyEnsemble也会造成重要信息丢失。

附 easy ensemble 算法和balance cascade算法

原创文章,作者:xsmile,如若转载,请注明出处:http://www.17bigdata.com/smote/

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: