【机器学习】详解 使用 imblearn 应对类别不均衡

本文详细介绍了在机器学习中遇到类别不均衡问题时如何使用imblearn库进行数据重采样,包括过采样(如SMOTE、ADASYN)和欠采样(如RandomUnderSampler、TomekLinks)方法,以及它们的组合和集成采样器的使用。通过实例展示了各类采样技术的效果,帮助改善不均衡数据集上的模型性能。
摘要由CSDN通过智能技术生成

在这里插入图片描述



一、类别不均衡问题

事实上,许多数据集存在 类别不均衡问题 (Class-imbalance problem) 或者说 长尾问题 (Long-tail problem),即数据集中不同类别样本数比例差异过大的情况。然而,大部分机器学习算法在这类不均衡数据集上表现不佳。为此,可通过 设置类别权重、仔细选择指标、尝试不同算法、异常点检测、重采样数据集 等各种方法应对。以下则梳理了使用 imblance-learn 库 (简称 imblearn) 处理数据不均衡问题的若干方法。


二、使用 imblearn 重采样数据

其实,从不均衡数据自身出发解决问题,是最直观的想法。为此,可以 对类别占比小的样本过采样对类别占比大的样本欠采样,实现数据均衡。通常,使用 imblance-learn 库实现数据集重采样。

官方文档:

https://imbalanced-learn.org/stable/

安装方式:

pip install imbalanced-learn

2.1 过采样 (Over-sampling)

过采样通常是在样本不均衡且数据集不够时,通过增加少数类的样本数以获得类别均衡的数据集。常见的样本过采样方法如下所示:

2.1.1 随机过采样 (Random Over-sampling)

朴素的随机过采样是最简单而直接的方式,其 对少数类样本随机拷贝以扩充数据集。换言之,通过对少数类样本进行随机抽样,然后将得到的样本作为新样本加入原数据集中。

注意,对相同样本重复采样将 人为地减少数据集的方差,且 可能导致严重的过拟合

代码示范:

# API:https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.RandomOverSampler.html
from imblearn.over_sampling import RandomOverSampler

# 实例化 RandomOversampling 类对象
ros = RandomOverSampler(random_state=0)
# 过采样得到数据集及其标签
x_train_ros, y_train_ros = ros.fit_resample(x_train, y_train)

效果示范:
在这里插入图片描述
可见,采样前后几乎看不出差别,因为拷贝得到的新样本点与原样本点在二维平面上重叠了。

2.1.2 合成少数类过采样技术 (Synthetic Minority Over-sampling Technique, SMOTE)

SMOTE 是一种在原数据集样本间进行插值以生成新样本的技术。设输入空间中,任一样本点为 x i x_i xi,另一样本点为 x j x_j xj,则二者可通过下式合成新样本点 x i j x_{ij} xij

x i j = x i + α ( x j − x i ) ,    α ∈ [ 0 , 1 ] x_{ij} = x_i + \alpha(x_j - x_i), \; \alpha \in [0, 1] xij=xi+α(xjxi),α[0,1]

合成示意图如下所示:
在这里插入图片描述
可见࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值