数据预处理与特征工程—1.不均衡样本集采样—SMOTE算法与ADASYN算法

针对样本类别不均衡的问题,本文介绍了两种思路:平衡采样和使用新的评估指标。重点讲解了SMOTE和ADASYN这两种过采样算法,用于改善数据不平衡。SMOTE通过合成少数类样本来增加样本量,而ADASYN则依据样本密度自动确定新样本数量。同时,讨论了SMOTE与RandomUnderSampler结合以及与决策树的结合使用,以及如何选择合适的近邻数。
摘要由CSDN通过智能技术生成


  在训练二分类模型中,例如医疗诊断、网络入侵检测、信用卡反欺诈等,经常会遇到正负样本不均衡的问题。直接采用正负样本非常不均衡的数据集进行训练学习会遇到很多问题。使用不平衡数据集的挑战在于,大多数机器学习技术将忽略少数类,并且反过来在少数类上表现不佳,尽管通常最重要的是少数类(比如申请卡中的逾期)。

比如:正负样本比例是99:1,那么分类器将所有样本都预测成正样本就有99%的正确率

当碰到样本类别不均衡的情况下,占比大的类别往往会成为影响准确率的最主要因素。
这时就有两种思路来改进这种情况。

一、第一种思路:平衡采样

  第一种思路就是通过平衡采样的方法,改变正负样本非常不均衡的情况。通常会对小数据量的类别进行上采样,或者对大数据量的类别进行下采样。这里基于数据量进行选择,如果大数据量极大,那么对大数据量进行下采样(欠采样)也同样能满足训练模型的需求;如果大数据量不是很多,为了满足训练模型的需求,就需要对小数据量进行上采样(过采样)。其中SMOTE算法与ADASYN算法正是过采样里面两个常用的算法。下面对这两种算法进行简单介绍。

1.SMOTE算法

  SMOTE算法即合成少数过采样技术,顾名思义,其基本思想是:对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
SMOTE算法步骤:

  1. 利用最近邻算法进行采样,计算出每个少数类样本的K个近邻
  2. 从K个近邻中随机挑选N个样本进行随机线性插值
  3. 构造新的少数类样本
    N e w = New= New= x x x i i i + r a n d ( 0 , 1 ) × +rand(0,1)× +rand(0,1)×( y y y j j j − - x x x i i i), j = 1 , 2 , . . . N j=1,2,...N j=1,2,...N
    其中 x x x i i i是少类中的一个观测点, y y y j j j是K近邻中随机抽取的样本
  4. 将新样本与原数据组合,组成新的数据集

python使用
  SMOTE过采样算法实现 python有一个专门实现的库—imblearn.over_sampling.SMOTE

import pandas as pd
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE

X, y = make_classification(n_classes=2, class_sep=2,
weights=[0.01, 0.99], n_informative=3, n_redundant=1, flip_y=0,
n_features=20, n_clusters_per_class=1, n_samples=10000, random_state=10)
print('Original dataset shape %s' % Counter(y))

# 此时正负样本比大致为99:1
# 该数据集是公开的申请评分卡数据集,质量比较高

# 比如:经过过采样,我们想把数据集正负样本比例设置成10:1
# sampling_strategy这个参数控制采样后负样本占总样本的比例,这一个尤其注意
sm = SMOTE(sampling_strategy=0.1, random_state=10, k_neighbors=5, n_jobs=-1)

X_res, y_res = sm.fit_resample(X, y)
print('Resampled dataset shape %s' % Counter(y_res))
Original dataset shape Counter({
   1: 9900, 0: 100})
Resampled dataset shape Counter({
   1: 9900, 0: 990})
2.SMOTE与RandomUnderSampler进行结合

  在SMOTE的原始论文中,建议将少数类别SMOTE过采样与多数类别的随机欠采样相结合。

from collections import Counter
from sklearn.datasets import make_classification
from
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值