什么是SMOTE sampling方法?

  统计/机器学习 抽样方法 数据预处理    浏览次数:15098        分享
10

在其他文献中看到了SMOTE Sampling方法,它可以解决非平衡二元分类问题,有人具体了解这个抽样方法吗?可以介绍一下吗?

谢谢!

-----

后续问题SMOTE对categorical feature如何处理

 

PR   2017-06-12 09:17



   3个回答 
28

SMOTE是一种对普通过采样(oversampling)的一个改良。普通的过采样会使得训练集中有很多重复的样本。

SMOTE的全称是Synthetic Minority Over-Sampling Technique,译为“人工少数类过采样法”。

SMOTE没有直接对少数类进行重采样,而是设计了算法来人工合成一些新的少数类的样本。


为了叙述方便,就假设阳性为少数类,阴性为多数类

合成新少数类的阳性样本的算法如下:

  1. 选定一个阳性样本$s$
  2. 找到$s$最近的$k$个样本,$k$可以取5,10之类。这$k$个样本可能有阳性的也有阴性的。
  3. 从这$k$个样本中随机挑选一个样本,记为$r$。
  4. 合成一个新的阳性样本$s'$,$s'=\lambda s + (1-\lambda)r$,$\lambda$是$(0,1)$之间的随机数。换句话说,新生成的点在$r$与$s$之间的连线上。

重复以上步骤,就可以生成很多阳性样本。


=======画了几张图,更新一下======

用图的形式说明一下SMOTE的步骤:

1.先选定一个阳性样本(假设阳性为少数类)


2.找出这个阳性样本的k近邻(假设k=5)。5个近邻已经被圈出。


3.随机从这k个近邻中选出一个样本(用绿色圈出来了)。


4.在阳性样本和被选出的这个近邻之间的连线上,随机找一点。这个点就是人工合成的新的阳性样本(绿色正号标出)。



SofaSofa数据科学社区DS面试题库 DS面经

高代兄   2018-02-03 11:43

图文并茂,很清楚,谢谢分享~ - 木子周   2018-02-06 00:03
我好老的问题了,啊哈哈!谢谢回答!非常清楚! - PR   2018-02-13 10:52
哇,简单明了。但是如果有categorical feature怎么办呢? - 桐桐酱   2018-02-28 13:29
谢谢回答!我也有疑问,如果有binary的话,中间取个小数,也没有什么意义吧? - wlk1993   2018-03-10 16:28
8

原论文:SMOTE: Synthetic Minority Over-sampling Technique


SofaSofa数据科学社区DS面试题库 DS面经

orz_k   2018-02-03 12:12

谢谢链接! - PR   2018-02-13 10:53
3

有个疑问:在第二步 "找到$s$最近的$k$个样本,$k$可以取5,10之类。这$k$个样本可能有阳性的也有阴性的", 感觉这样选会导致label混乱,比如随机数接近1的情况下,label是阴性还是阳性?我找了下资料,基本上都是要找同样label的近邻样本,比如这个:http://rikunert.com/SMOTE_explained

SofaSofa数据科学社区DS面试题库 DS面经

holidy   2018-08-21 01:56

我感觉你说的是对的。不过我刚刚看了原论文,里面的方法的确是限制在同类别的近邻。然后文章的最后也提到了,其实也没有必要限制在同类别的近邻,也可以不管类别,只看近邻。 - sasa   2018-08-21 05:01


  相关讨论

SMOTE对于categorical feature如何处理?

蓄水池抽样算法的问题

bootstrap 一般用在哪些方面

自助法(bootstrap)的0.632是怎么来的?

两阶段抽样和分层抽样是一回事吗?

滚雪球抽样算法的实现

Jackknife vs Bootstrap

parametric bootstrap和nonparametric bootstrap的区别是什么?

如何对流数据(stream data)进行无差别抽样

python产生一个随机置换?

  随便看看

pip install opencv-python失败,难道非要编译安装?

sklearn可以用gpu加速吗?

sklearn中的predict_proba方法的返回值的意义

laplace光滑什么意思

K-means怎么选K?