imbalanced-learn项目中的过采样技术详解

imbalanced-learn项目中的过采样技术详解

imbalanced-learn A Python Package to Tackle the Curse of Imbalanced Datasets in Machine Learning imbalanced-learn 项目地址: https://gitcode.com/gh_mirrors/im/imbalanced-learn

什么是类别不平衡问题

在机器学习分类任务中,我们经常会遇到类别不平衡问题,即某些类别的样本数量远多于其他类别。这种不平衡会导致分类器倾向于预测多数类,从而影响模型在少数类上的表现。imbalanced-learn项目提供了一系列解决类别不平衡问题的工具,其中过采样(Over-sampling)是重要的技术手段之一。

过采样技术概述

过采样技术通过增加少数类样本的数量来平衡数据集,主要分为两大类:

  1. 随机过采样:简单复制少数类样本
  2. 合成过采样:通过算法生成新的合成样本

随机过采样(RandomOverSampler)

随机过采样是最简单的过采样方法,它通过随机复制少数类样本来平衡数据集。

from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)

特点

  • 实现简单直接
  • 可能导致过拟合,因为只是简单复制样本
  • 支持异构数据(包含字符串等非数值特征)
  • 支持pandas DataFrame

平滑自助法(smoothed bootstrap): 通过设置shrinkage参数可以创建平滑的自助样本,避免样本完全重复,减少过拟合风险。

合成过采样技术

SMOTE (Synthetic Minority Over-sampling Technique)

SMOTE通过在少数类样本与其最近邻之间插值来生成新样本。

from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE().fit_resample(X, y)

算法原理

  1. 对于每个少数类样本x_i,找到其k个最近邻
  2. 随机选择一个邻居x_zi
  3. 生成新样本:x_new = x_i + λ × (x_zi - x_i),其中λ∈[0,1]

ADASYN (Adaptive Synthetic Sampling)

ADASYN是SMOTE的改进版本,它根据样本分布自适应地决定生成多少合成样本。

from imblearn.over_sampling import ADASYN
X_resampled, y_resampled = ADASYN().fit_resample(X, y)

与SMOTE的区别

  • 在分类困难区域生成更多样本
  • 样本生成数量与周围多数类样本密度成正比

SMOTE变种算法

BorderlineSMOTE

BorderlineSMOTE只对"边界线"样本(即分类困难的样本)进行过采样。

from imblearn.over_sampling import BorderlineSMOTE
X_resampled, y_resampled = BorderlineSMOTE().fit_resample(X, y)

两种模式

  • borderline-1:只使用同类最近邻生成样本
  • borderline-2:可以使用任何类的最近邻生成样本

SVMSMOTE

SVMSMOTE使用SVM的支持向量来识别边界样本,然后在这些区域生成新样本。

KMeansSMOTE

KMeansSMOTE先使用K-means聚类,然后根据聚类密度决定每个簇中的样本生成数量。

处理分类特征

SMOTENC (SMOTE for Numerical and Categorical)

SMOTNC可以处理同时包含数值和分类特征的数据。

from imblearn.over_sampling import SMOTENC
smote_nc = SMOTENC(categorical_features=[0, 2], random_state=0)
X_resampled, y_resampled = smote_nc.fit_resample(X, y)

特点

  • 数值特征:使用标准SMOTE插值
  • 分类特征:选择最近邻中最常见的类别

SMOTEN (SMOTE for Nominal)

SMOTEN专门处理纯分类数据,使用值差异度量(VDM)计算样本距离。

from imblearn.over_sampling import SMOTEN
sampler = SMOTEN(random_state=0)
X_res, y_res = sampler.fit_resample(X, y)

多类别处理

所有过采样算法都支持多类别问题:

  • RandomOverSampler:独立处理每个少数类
  • SMOTE/ADASYN:使用一对多策略处理每个目标类

算法选择建议

  1. 对于简单问题或非数值数据,优先考虑RandomOverSampler
  2. 对于数值数据,SMOTE通常是良好的起点
  3. 当样本边界很重要时,考虑BorderlineSMOTE或SVMSMOTE
  4. 对于高度不平衡数据,ADASYN可能更合适
  5. 对于混合数据类型,必须使用SMOTENC

注意事项

  1. 过采样应在数据分割后仅应用于训练集,避免数据泄露
  2. 过采样通常与欠采样技术结合使用效果更好
  3. 交叉验证时应将过采样包含在管道中
  4. 评估时应使用适合不平衡数据的指标(如F1-score、AUC-ROC等)

通过合理使用imbalanced-learn中的过采样技术,可以有效改善分类器在少数类上的表现,解决实际应用中的类别不平衡问题。

imbalanced-learn A Python Package to Tackle the Curse of Imbalanced Datasets in Machine Learning imbalanced-learn 项目地址: https://gitcode.com/gh_mirrors/im/imbalanced-learn

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农鸽望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值