smoteenn算法_类别不平衡问题之SMOTE算法
(Pythonimblearn极简实现)
类别不平衡问题
类别不平衡问题,顾名思义,即数据集中存在某⼀类样本,其数量远多于或远少于其他类样本,从⽽导致⼀些机器学习模型失效的问题。例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问题中,因为绝⼤多数样本都为正常样本,欺诈样本很少,逻辑回归算法会倾向于把⼤多数样本判定为正常样本,这样能达到很⾼的准确率,但是达不到很⾼的召回率。php define和const定义常量的区别
类别不平衡问题在很多场景中存在,例如欺诈检测,风控识别,在这些样本中,⿊样本(⼀般为存在问题的样本)的数量⼀般远少于⽩样本(正常样本)。
关于activities的英文单词
上采样(过采样)
和下采样(负采样)策略是解决类别不平衡问题的基本⽅法之⼀。上采样即增加少数类样本的数量,下采样即减少多数类样本以获取相对平衡的数据集。
最简单的上采样⽅法可以直接将少数类样本复制⼏份后添加到样本集中,最简单的下采样则可以直接只取⼀定百分⽐的多数类样本作为训练集。
极简python快速入门教程
SMOTE算法是⽤的⽐较多的⼀种上采样算法,SMOTE算法的原理并不是太复杂,⽤python从头实现也只有⼏⼗⾏代码,但是python的imblearn包提供了更⽅便的接⼝,在需要快速实现代码的时候可直接调⽤imblearn。
imblearn类别不平衡包提供了上采样和下采样策略中的多种接⼝,基本调⽤⽅式⼀致,主要介绍⼀下对应的SMOTE⽅法和下采样中的RandomUnderSampler⽅法。imblearn可使⽤pip
install
imblearn直接安装。
代码⽰例
⽣成类别不平衡数据
# 使⽤sklearn的make_classification⽣成不平衡数据样本
from sklearn.datasets import make_classification
# ⽣成⼀组0和1⽐例为9⽐1的样本,X为特征,y为对应的标签
X, y = make_classification(n_classes=2, class_sep=2,
weights=[0.9, 0.1], n_informative=3,
n_redundant=1, flip_y=0
n_features = 20, n_clusters_per_class = 1,
n_samples = 1000, random_state = 10)
查看数据分布
from collections import Counter
continue语句用在哪里# 查看所⽣成的样本类别分布,0和1样本⽐例9⽐1,属于类别不平衡数据
print(Counter(y))
# Counter({0: 900, 1: 100})
SMOTE算法核⼼语句
mavenrepository网站# 使⽤imlbearn库中上采样⽅法中的SMOTE接⼝
from imblearn.over_sampling import SMOTE
# 定义SMOTE模型,random_state相当于随机数种⼦的作⽤
smo = SMOTE(random_state=42)
X_smo, y_smo = smo.fit_sample(X, y)
查看经过SMOTE之后的数据分布
print(Counter(y_smo))
# Counter({0: 900, 1: 900})
从上述代码中可以看出,SMOTE模型默认⽣成⼀⽐⼀的数据,如果想⽣成其他⽐例的数据,可以使⽤radio参数。不仅可以处理⼆分类问题,同样适⽤于多分类问题
# 可通过radio参数指定对应类别要⽣成的数据的数量
smo = SMOTE(ratio={1: 300}, random_state=42)
# ⽣成0和1⽐例为3⽐1的数据样本
X_smo, y_smo = smo.fit_sample(X, y)百度站长工具站点html标签验证
print(Counter(y_smo))
# Counter({0: 900, 1: 300})
imblearn中上采样接⼝提供了随机上采样RandomOverSampler,SMOTE,ADASYN三种⽅式,调⽤⽅式和主要参数基本⼀样。下采样接⼝中也提供了多种⽅法,以RandomUnderSampler为例。
from imblearn.under_sampling import RandomUnderSampler
# 同理,也可使⽤ratio来指定下采样的⽐例
rus = RandomUnderSampler(ratio={0: 500}, random_state=0)
X_rus, y_rus = rus.fit_sample(X, y)
print(Counter(y_smo))
# Counter({0: 500, 1: 300})

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。