SMOTE过采样算法

一、概念

        SMOTE(Synthetic Minority Over-sampling Technique)是一种用于处理不平衡数据集的过采样方法。SMOTE基于插值法。通过在少数类样本之间生成新的合成样本来增加少数类的数量,从而平衡数据集中的类别分布。因此,与简单的复制少数类样本不同,SMOTE通过生成新的样本来避免过拟合问题。

二、原理

        SMOTE的基本思想是通过在少数类样本之间进行插值来生成新的样本,算法逻辑相对简单。具体步骤如下:

  1. 选择少数类样本:从少数类样本中随机选择一个样本
  2. 选择邻居样本:在少数类样本中找到的 k 个最近邻样本,并从中随机选择一个邻居样本
  3. 生成新样本:通过在​之间进行线性插值生成一个新的样本。插值公式为,其中 λ 是一个在0到1之间的随机数。

        举个例子,假设我们有一个少数类样本集{(1,2),(2,3),(3,4)},我们选择k=2,则:

  • 随机选择一个少数类样本,例如(1,2)。
  • 找到(1,2)的2个最近邻样本,例如(2,3)和(3,4),并随机选择一个邻居样本,例如(2,3)。
  • 生成新样本,设lambda为0.5,则

        SMOTE方法在处理不平衡数据集时主要有以下两个优势:

  • 增加少数类样本:SMOTE通过生成新的少数类样本来平衡数据集,而不是简单地复制现有的少数类样本。这有助于避免过拟合问题,因为新生成的样本是基于现有样本的插值,而不是简单的重复。

  • 多样性:SMOTE生成的新样本是基于现有样本的插值,因此可以增加数据集的多样性。这有助于分类器更好地学习数据的特征,从而提高模型的泛化能力。

三、python实现

        在下面的示例中,我们先生成一个不平衡的数据集,其中少数类样本占比非常低。然后,我们使用SMOTE对数据集进行过采样,生成新的少数类样本,使得数据集变得平衡。这里直接安装imbalanced-learn并调用其提供的SMOTE方法即可。

import numpy as np
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE
from collections import Counter

# 生成一个不平衡的数据集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10,
                           n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=1)

print(f"原始数据集类别分布: {Counter(y)}")

# 使用SMOTE进行过采样
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)

print(f"过采样后的数据集类别分布: {Counter(y_resampled)}")

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值