不平衡数据采样方法介绍以及python实现(imblearn包)

不平衡数据采样方法介绍以及python实现——imblearn包

  • 对不平衡数据的处理
  • python实现——imblearn包

对不平衡数据的处理

对于不平衡数据,常见而有效的处理方式有基本的数据处理、调整样本权重与使用模型等三类。
不平衡数据采样方法介绍以及python实现(imblearn包)_第1张图片
关于数据处理(采样):

注意此部分图片+文字来源于51CTO博客作者wx619cba0ee76f7的原创作品
《Python 实现不平衡采样 | SMOTE,Tomek Link,SMOTETomek 综合采样》

过采样会随机复制少数样例以增大它们的规模。欠采样则随机地少采样主要的类。

Tomek Link 法欠采样
不平衡数据采样方法介绍以及python实现(imblearn包)_第2张图片
上图为 Tomek Link 欠采样法的核心。不难发现左边的分布中 0-1 两个类别之间并没有明显的分界。Tomek Link 法处理后,将占比多的一方(0),与离它(0)最近的一个少的另一方 (1) 配对,而后将这个配对删去,这样一来便如右边所示构造出了一条明显一些的分界线。所以说欠采样需要在占比少的那一类的数据量比较大的时候使用。

Random Over Sampling 随机过采样
随机过采样并不是将原始数据集中占比少的类简单的乘个指定的倍数,而是对较少类按一定比例进行一定次数的随机抽样,然后将每次随机抽样所得到的数据集叠加。但如果只是简单的随机抽样也难免会出现问题,因为任意两次的随机抽样中,可能会有重复被抽到的数据,所以经过多次随机抽样后叠加在一起的数据中可能会有不少的重复值,这便会使数据的变异程度减小。所以这是随机过采样的弊端。

SMOTE 过采样
SMOTE 过采样法的出现正好弥补了随机过采样的不足。
不平衡数据采样方法介绍以及python实现(imblearn包)_第3张图片

综合采样
综合采样——先使用过采样,扩大样本后再对处在胶着状态的点用 Tomek Link 法进行删除,有时候甚至连 Tomek Link 都不用,直接把离得近的对全部删除,因为在进行过采样后,0 和 1 的样本量已经达到了 1:1。
不平衡数据采样方法介绍以及python实现(imblearn包)_第4张图片

python实现——imblearn包

pip install imblearn

基本模式:
(与sklearn模式基本相同)

#以使用imblearn进行随机过采样为例
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
#查看结果
Counter(y_resampled) 
#过采样后样本结果Counter({2: 4674, 1: 4674, 0: 4674})各类样本数相同

包里的函数有哪些的合集汇总

详情参见:

数据分析:使用Imblearn处理不平衡数据(过采样、欠采样)

Imblearn package study(不平衡数据处理之过采样、下采样、综合采样)

你可能感兴趣的:(机器学习,python,机器学习)