过采样实现方法:SMOTE样本生成策略

SMOTE原理

SMOTE(Synthetic Minority Oversampling Technique),合成少数类过采样技术.它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中,具体如下图所示,算法流程如下。

(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
(2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为o。
(3)对于每一个随机选出的近邻o,分别与原样本按照公式o(new)=o+rand(0,1)*(x-o)构建新的样本。
类似K近邻算法
假设现在有100个少数类样本,采样倍率为5,即想生成500个新样本
1.对每一个少数类样本求该样本到其他少数类样本的欧氏距离,并且从小到大排序得到d1,d2…d99的序列
2.采样倍率为5就取d1到d5,再根据 X n = X + r a n d ( 0 , 1 ) × ( X ˇ − X ) X_n=X+rand(0,1)×(\check{X}-X) Xn=X+rand(0,1)×(XˇX)得到Xn(Xn是新生成的X,rand(0,1)是生成一个随机0~1的随机数, ( X ˇ − X ) (\check{X}-X) (XˇX))相当于d
3.再接着对下一个X重复1,2操作

例子

例如下面这组数据

#先导入模块
import pandas as pd
from imblearn.over_sampling import SMOTE
#从这个不平衡数据库的过采样类里导入SMOTE方法
from sklearn.model_selection import train_test_split
credit_cards=pd.read_csv('creditcard.csv')
credit_cards.head(3)

在这里插入图片描述
长这个样子,接着把特征和结果提取出来,结果是最后的Class列,其他都是特征

columns=credit_cards.columns
features_columns=columns.delete(-1)

features=credit_cards[features_columns]
labels=credit_cards['Class']
features['normAmount'] = StandardScaler().fit_transform(features['Amount'].values.reshape(-1,1))
#归一化处理
features=features.drop(['Amount','Time'],axis=1)#删掉无关列
features.head(3)

在这里插入图片描述
OK特征部分处理完毕了,再看一下结果的分布
在这里插入图片描述
可以看出这里样本分布十分不均,考虑采用过采样的方式

features_train, features_test, labels_train, labels_test = train_test_split(features, labels, test_size=0.2, random_state=0)
#先随机把数据集分成训练集和验证集
oversampler=SMOTE(random_state=0)
#初始化一个SMOTE对象,random_state类似随机数种子
os_features,os_labels=oversampler.fit_sample(features_train,labels_train)
#用.fit_sample()方法生成过采样处理的数据
len(os_labels[os_labels==1])

可以看到Class=1的数量已经和Class=0的持平
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值