KMeans-SMOTE 不平衡学习过采样技术深度解析
项目概述
KMeans-SMOTE 是一种基于 K-Means 聚类和 SMOTE 过采样的类不平衡数据过采样方法。该方法通过在输入空间的安全和关键区域生成少数类样本来辅助分类,有效避免了噪声生成,并克服了类间和类内的不平衡问题。
核心架构解析
项目目录结构
kmeans_smote/
├── LICENSE
├── README.rst
├── setup.cfg
├── setup.py
├── kmeans_smote.py
├── doc/
│ ├── Makefile
│ ├── conf.py
│ └── index.rst
└── test/
└── test_kmeans_smote.py
核心文件功能
kmeans_smote.py - 算法核心实现文件
- 包含 KMeansSMOTE 类的完整实现
- 提供数据聚类、过滤和重采样的完整流程
setup.py - 项目安装配置
- 定义项目依赖和版本要求
- 提供 pip 安装支持
test/test_kmeans_smote.py - 测试验证模块
- 包含多种测试场景验证算法正确性
- 确保与 SMOTE 和随机过采样的兼容性
算法工作原理
K-Means SMOTE 通过三个关键步骤实现智能过采样:
第一步:K-Means 聚类
使用 K-Means 算法对整个输入空间进行聚类分析,识别数据的自然分布模式。
第二步:集群筛选与权重分配
- 集群过滤:筛选出具有较高少数类样本比例的集群
- 权重分配:为少数类样本稀疏分布的集群分配更多的合成样本
第三步:SMOTE 过采样
对每个过滤后的集群应用 SMOTE 算法生成新的少数类样本
安装部署指南
环境要求
- Python 3.6+
- imbalanced-learn (>=0.4.0, <0.5)
- numpy (>=1.13, <1.16)
- scikit-learn (>=0.19.0, <0.21)
安装方法
通过 pip 安装:
pip install kmeans-smote
从源码安装:
git clone https://gitcode.com/gh_mirrors/km/kmeans_smote
cd kmeans_smote
pip install .
核心参数配置
主要参数详解
from kmeans_smote import KMeansSMOTE
# 创建 KMeansSMOTE 实例
kmeans_smote = KMeansSMOTE(
sampling_strategy='auto', # 重采样策略
random_state=42, # 随机种子
kmeans_args={'n_clusters': 100}, # K-Means 参数
smote_args={'k_neighbors': 10}, # SMOTE 参数
imbalance_ratio_threshold=1.0, # 不平衡比阈值
density_power=None, # 密度计算幂次
use_minibatch_kmeans=True, # 使用小批量 K-Means
n_jobs=1 # 并行作业数
)
参数说明
- sampling_strategy:重采样策略,支持 'auto'、字典或可调用对象
- random_state:随机状态,确保结果可重现
- kmeans_args:传递给 K-Means 算法的参数
- smote_args:传递给 SMOTE 算法的参数
- imbalance_ratio_threshold:集群不平衡比阈值
- density_power:少数类样本密度计算幂次
- use_minibatch_kmeans:是否使用小批量 K-Means
- n_jobs:并行计算线程数
实战应用示例
基础使用案例
import numpy as np
from imblearn.datasets import fetch_datasets
from kmeans_smote import KMeansSMOTE
# 加载不平衡数据集
datasets = fetch_datasets(filter_data=['oil'])
X, y = datasets['oil']['data'], datasets['oil']['target']
# 查看原始数据分布
[print('Class {} has {} instances'.format(label, count))
for label, count in zip(*np.unique(y, return_counts=True))]
# 应用 KMeans-SMOTE 过采样
kmeans_smote = KMeansSMOTE(
kmeans_args={'n_clusters': 100},
smote_args={'k_neighbors': 10}
)
X_resampled, y_resampled = kmeans_smote.fit_sample(X, y)
# 查看重采样后数据分布
[print('Class {} has {} instances after oversampling'.format(label, count))
for label, count in zip(*np.unique(y_resampled, return_counts=True))]
多类别数据集处理
# 多类别不平衡数据重采样
kmeans_smote = KMeansSMOTE(
random_state=0,
kmeans_args={'n_clusters': 10}
)
X_resampled, y_resampled = kmeans_smote.fit_sample(X_multiclass, y_multiclass)
算法优势特性
极限情况兼容
KMeans-SMOTE 实现了 SMOTE 和随机过采样作为极限情况,可通过以下配置实现:
- SMOTE 行为:
imbalance_ratio_threshold=float('Inf'), kmeans_args={'n_clusters':1} - 随机过采样行为:
imbalance_ratio_threshold=float('Inf'), kmeans_args={'n_clusters':1}, smote_args={'k_neighbors':0}
智能集群过滤
算法能够自动识别并过滤掉包含大量多数类样本的集群,只在少数类样本密集的区域内生成新样本,有效避免噪声。
测试验证体系
项目包含完整的测试套件,确保算法在各种场景下的正确性:
- 基础功能测试:验证默认参数下的算法运行
- 极限情况测试:验证与 SMOTE 和随机过采样的兼容性
- 多类别测试:验证在多类别不平衡数据集上的表现
- 文档示例测试:确保文档中的代码示例正确运行
技术实现细节
集群分配优化
算法对 K-Means 的集群标签进行优化处理,确保标签的连续性和一致性。
参数验证机制
内置参数验证系统,自动调整 SMOTE 的 k_neighbors 参数以适应集群大小。
应用场景推荐
KMeans-SMOTE 特别适用于以下场景:
- 高维不平衡数据:在特征空间复杂的场景下表现优异
- 类内不平衡:能够处理同一类别内部的不平衡问题
- 多类别分类:支持多类别不平衡数据的重采样
- 噪声敏感应用:在需要避免噪声生成的关键应用中表现稳定
通过本项目的深度解析,开发者可以充分理解 KMeans-SMOTE 算法的核心原理、技术实现和最佳实践,为解决实际业务中的类不平衡问题提供强有力的技术支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



