imbalanced-learn项目中的过采样技术详解
什么是类别不平衡问题
在机器学习分类任务中,我们经常会遇到类别不平衡问题,即某些类别的样本数量远多于其他类别。这种不平衡会导致分类器倾向于预测多数类,从而影响模型在少数类上的表现。imbalanced-learn项目提供了一系列解决类别不平衡问题的工具,其中过采样(Over-sampling)是重要的技术手段之一。
过采样技术概述
过采样技术通过增加少数类样本的数量来平衡数据集,主要分为两大类:
- 随机过采样:简单复制少数类样本
- 合成过采样:通过算法生成新的合成样本
随机过采样(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)
算法原理:
- 对于每个少数类样本x_i,找到其k个最近邻
- 随机选择一个邻居x_zi
- 生成新样本: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:使用一对多策略处理每个目标类
算法选择建议
- 对于简单问题或非数值数据,优先考虑RandomOverSampler
- 对于数值数据,SMOTE通常是良好的起点
- 当样本边界很重要时,考虑BorderlineSMOTE或SVMSMOTE
- 对于高度不平衡数据,ADASYN可能更合适
- 对于混合数据类型,必须使用SMOTENC
注意事项
- 过采样应在数据分割后仅应用于训练集,避免数据泄露
- 过采样通常与欠采样技术结合使用效果更好
- 交叉验证时应将过采样包含在管道中
- 评估时应使用适合不平衡数据的指标(如F1-score、AUC-ROC等)
通过合理使用imbalanced-learn中的过采样技术,可以有效改善分类器在少数类上的表现,解决实际应用中的类别不平衡问题。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考