Python实现过采样和⽋采样
过采样
1.过采样的原理
过采样的⽅法有随机过采样和SMOTE法过采样。
(1)随机过采样
随机过采样是从100个违约样本中随机抽取旧样本作为⼀个新样本,共反复抽取900次,然后和原来的100个旧样本组合成新的1000个违约样本,和1000个不违约样本⼀起构成新的训练集。因为随机过采样重复地选取了违约样本,所以有可能造成对违约样本的过拟合。
(2)SMOTE法过采样
SMOTE法过采样即合成少数类过采样技术,它是⼀种针对随机过采样容易导致过拟合问题的改进⽅案。假设对少数类进⾏4倍过采样,通过下图来讲解SMOTE法的原理。
使⽤SMOTE法进⾏过采样时,传⼊函数⾥⾯的数据必须都是数值类型,且不存在缺失值,即经过缺失值处理,数据转换、标准化或归⼀化之后的⾼质量数据才可以使⽤SMOTE否则就会出现报错
import pandas as pd
from collections import Counter
from imblearn.over_sampling import RandomOverSampler, SMOTE # 随机采样函数和SMOTE过采样函数
data = pd.read_csv('数据.csv')
print(data.info())
# 分别获取特征值和标签值
X = data.drop(columns='FLAG')
y = data['FLAG']
# 对标签中的变量进⾏计数统计
print('原始标签数据统计:', Counter(y))
# 随机过采样⽅法
ros = RandomOverSampler(random_state=0)# random_state为0(此数字没有特殊含义,可以换成其他数字)使得每次代码运⾏的结果保持⼀致
X_oversampled, y_oversampled = ros.fit_resample(X, y)# 使⽤原始数据的特征变量和⽬标变量⽣成过采样数据集
print('随机过采样处理后', Counter(y_oversampled))
print(X_oversampled.info())#随机采样后的特征数据信息
# SMOTE法过采样
smote = SMOTE(random_state=0)# random_state为0(此数字没有特殊含义,可以换成其他数字)使得每次代码运⾏的结果保持⼀致
X_smotesampled, y_smotesampled = smote.fit_resample(X, y)# 使⽤原始数据的特征变量和⽬标变量⽣成过采样数据集
print('Smote法过采样后', Counter(y_smotesampled))
⽋采样
1.⽋采样的原理
⽋采样是从1000个不违约样本中随机选取100个样本,和100个违约样本⼀起构成新的训练集。⽋采样抛弃了⼤部分不违约样本,在搭建模型时有可能产⽣⽋拟合。random python
import pandas as pd
from collections import Counter
from imblearn.over_sampling import RandomUnderSampler, SMOTE # 随机⽋采样函数
data = pd.read_csv('数据.csv')
print(data.info())
# 分别获取特征值和标签值
X = data.drop(columns='FLAG')
y = data['FLAG']
rus = RandomUnderSampler(random_state=0)# random_state为0(此数字没有特殊含义,可以换成其他数字),使得每次代码运⾏的结果保持⼀致
X_undersampled, y_undersampled = rus.fit_resample(X,y)# 使⽤原始数据的特征变量和⽬标变量⽣成⽋采样数据集
print(Counter(y_undersampled))
print(X_undersampled.shape)
在实战中处理样本不均衡问题时,如果样本数据量不⼤,通常使⽤过采样,因为这样能更好地利⽤数据,不会像⽋采样那样很多数据都没有使⽤到;如果数据量充⾜,则过采样和⽋采样都可以考虑使⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论