KMeans-SMOTE 不平衡学习过采样方法详解

KMeans-SMOTE 不平衡学习过采样方法详解

【免费下载链接】kmeans_smote Oversampling for imbalanced learning based on k-means and SMOTE 【免费下载链接】kmeans_smote 项目地址: https://gitcode.com/gh_mirrors/km/kmeans_smote

KMeans-SMOTE 是一种基于 K-Means 聚类和 SMOTE 过采样的类不平衡数据过采样方法。它通过在输入空间的安全和关键区域生成少数类样本来辅助分类,避免噪声生成,并有效克服类间和类内的不平衡问题。

项目结构与核心文件

项目采用简洁的Python包结构,主要包含以下核心文件:

kmeans_smote/
├── LICENSE
├── README.rst
├── setup.py
├── kmeans_smote.py
└── test/
    └── test_kmeans_smote.py
  • kmeans_smote.py: 核心算法实现文件,包含KMeansSMOTE类
  • test/test_kmeans_smote.py: 完整的测试套件,验证算法正确性
  • setup.py: 项目安装配置脚本
  • README.rst: 详细的项目说明文档

核心算法原理

KMeans-SMOTE 算法工作流程分为三个关键步骤:

  1. K-Means聚类: 使用K-Means算法对整个输入空间进行聚类
  2. 样本分布策略: 根据聚类特征分配要生成的样本数量
    • 筛选具有大量多数类样本的聚类
    • 在少数类样本稀疏分布的聚类中分配更多合成样本
  3. SMOTE过采样: 对每个筛选出的聚类使用SMOTE方法进行过采样

安装与依赖

环境要求

  • Python 3.6+
  • imbalanced-learn (>=0.4.0, <0.5)
  • numpy (>=1.13, <1.16)
  • scikit-learn (>=0.19.0, <0.21)

安装方式

从Pypi安装:

pip install kmeans-smote

从源码安装:

git clone https://gitcode.com/gh_mirrors/km/kmeans_smote.git
cd kmeans-smote
pip install .

核心类与方法详解

KMeansSMOTE 类

KMeansSMOTE 类继承自 imbalanced-learn 的 BaseOverSampler,提供完整的过采样功能。

初始化参数
def __init__(self,
            sampling_strategy='auto',
            random_state=None,
            kmeans_args=None,
            smote_args=None,
            imbalance_ratio_threshold=1.0,
            density_power=None,
            use_minibatch_kmeans=True,
            n_jobs=1,
            **kwargs)

参数说明:

  • sampling_strategy: 重采样策略,可以是字符串、字典或可调用对象
  • random_state: 随机种子,确保实验可重复性
  • kmeans_args: 传递给KMeans聚类的参数
  • smote_args: 传递给SMOTE过采样的参数
  • imbalance_ratio_threshold: 聚类不平衡比率阈值
  • density_power: 用于计算聚类内少数类样本密度的参数
  • use_minibatch_kmeans: 是否使用MiniBatchKMeans
  • n_jobs: 并行作业数
核心方法

_cluster(self, X): 使用K-Means算法对数据集进行聚类

**_filter_clusters(self, X, y, cluster_assignment, minority_class_label): 确定每个聚类的采样权重

_fit_resample(self, X, y): 执行重采样操作,返回重采样后的数据

使用示例

基础使用

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))]

# 创建KMeansSMOTE实例并执行过采样
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(非MiniBatch)
kmeans_smote = KMeansSMOTE(
    random_state=42,
    use_minibatch_kmeans=False,
    kmeans_args={'n_clusters': 50},
    smote_args={'k_neighbors': 5}
)

算法特性与优势

极限情况处理

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和随机过采样的兼容性
  • 向后兼容性测试: 确保旧版本参数的正常使用

应用场景

KMeans-SMOTE 特别适用于以下场景:

  1. 金融风控: 欺诈检测中的少数类样本增强
  2. 医疗诊断: 罕见疾病病例的数据平衡
  3. 工业制造: 缺陷产品预测中的样本优化

性能优化建议

  • 聚类数量设置: 根据数据集规模合理设置聚类数量
  • 邻居参数调整: 根据数据特征优化k_neighbors值
  • 密度功率参数: 利用density_power参数控制样本生成密度

通过使用KMeans-SMOTE,您可以有效解决机器学习中的类别不平衡问题,提升模型在少数类上的识别性能。算法的智能聚类机制确保生成的合成样本具有高质量和代表性,避免引入噪声数据。

【免费下载链接】kmeans_smote Oversampling for imbalanced learning based on k-means and SMOTE 【免费下载链接】kmeans_smote 项目地址: https://gitcode.com/gh_mirrors/km/kmeans_smote

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

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

抵扣说明:

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

余额充值