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

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

对不平衡数据的处理

对于不平衡数据,常见而有效的处理方式有基本的数据处理、调整样本权重与使用模型等三类。
在这里插入图片描述
关于数据处理(采样):

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

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

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

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

SMOTE 过采样
SMOTE 过采样法的出现正好弥补了随机过采样的不足。
在这里插入图片描述

综合采样
综合采样——先使用过采样,扩大样本后再对处在胶着状态的点用 Tomek Link 法进行删除,有时候甚至连 Tomek Link 都不用,直接把离得近的对全部删除,因为在进行过采样后,0 和 1 的样本量已经达到了 1:1。
在这里插入图片描述

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中,可以通过多种方法处理不平衡数据,以下是一些常见的处理手段: 1. 重采样技术:这种方法括过采样少数类和欠采样多数类,或者两者的组合。 - 过采样少数类:使用如`imbalanced-learn`库中的`RandomOverSampler`,将少数类样本重复抽取,直到与多数类的样本数量相等或者接近相等。 ```python from imblearn.over_sampling import RandomOverSampler # 假设X是特征数据,y是标签数据 ros = RandomOverSampler(random_state=42) X_resampled, y_resampled = ros.fit_resample(X, y) ``` - 欠采样多数类:使用如`imbalanced-learn`库中的`RandomUnderSampler`,随机删除多数类的样本,直到与少数类的样本数量相等或者接近相等。 ```python from imblearn.under_sampling import RandomUnderSampler rus = RandomUnderSampler(random_state=42) X_resampled, y_resampled = rus.fit_resample(X, y) ``` 2. 合成少数类过采样技术(SMOTE):SMOTE是一种创造性的方法,它通过在少数类样本之间插值来生成新的、合成的少数类样本。 ```python from imblearn.over_sampling import SMOTE smote = SMOTE(random_state=42) X_resampled, y_resampled = smote.fit_resample(X, y) ``` 3. 使用不同的评估指标:在不平衡数据的情况下,传统的准确率可能不再适用。可以使用其他指标,如F1分数、ROC AUC、精确度、召回率等。 4. 集成方法:使用集成学习方法,如随机森林、梯度提升机(GBM)、平衡随机森林(Balanced Random Forests)等,这些方法在内部可能自然地处理不平衡数据。 5. 修改分类阈值:通过调整分类决策阈值来适应不平衡数据,例如在逻辑回归中,可以降低判定为少数类的阈值。 6. 使用特定于任务的方法:例如,在深度学习中,可以使用类权重(class weights)或焦点损失(Focal Loss)等技术来让模型更加关注少数类。 处理不平衡数据时,重要的是要结合具体问题的上下文来选择合适的方法,并通过交叉验证来验证所选方法的有效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值