机器学习中的样本不平衡学习

不平衡数据集的处理 

python包:imblearn,参考文档:imbalanced-learn


目录

一、上采样方法(imblearn.over_sampling)

1.1、RandomOverSampler

1.2、SMOTE

1.3、ADASYN

1.4、BorderlineSMOTE

1.5、SVMSMOTE

1.6、KMeansSMOTE

1.7、SMOTENC

二、下采样方法(imblearn.under_sampling)

样本生成方法(prototype generation)

2.1、ClusterCentroids

样本选择方法(prototype selection)

可控制的下采样方法(the controlled under-sampling techniques)

2.2、RandomUnderSampler

2.3、NearMiss

数据清洗方法(the cleaning under-sampling techniques)

2.5、EditedNearestNeighbours

2.6、RepeatedEditedNearestNeighbours

2.7、AllKNN

2.8、CondensedNearestNeighbour

2.9、OneSidedSelection

2.10、NeighbourhoodCleaningRule

2.11、InstanceHardnessThreshold

 三、上、下采样结合(imblearn.combine)

3.1、SMOTEENN

3.2、SMOTETomek

四、下采样多模型融合方法(imblearn.ensemble)

4.1、EasyEnsembleClassifier

4.2、BalancedBaggingClassifier

4.3、BalancedRandomForestClassifier

4.4、RUSBoostClassifier


一、上采样方法(imblearn.over_sampling)

增加少数类的样本。

1.1、RandomOverSampler

通过对少数类样本进行有放回地随机采样来生成少数类的样本。

from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(sampling_strategy={0: 100, 1: 100}, random_state=42)
X_res, y_res = ros.fit_resample(X, y)

1.2、SMOTE

Synthetic Minority Oversampling Technique (SMOTE),通过插值来生成新样本,对于每个少数类样本计算其K个最近的少数类邻居,然后根据采样比率随机选择若干邻居,最后在少数类样本与邻居样本之间进行插值生成新样本。

from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)

1.3、ADASYN

Adaptive Synthetic (ADASYN),也是通过插值来生成新样本,ADASYN更关注于在被K最近邻分类器误分类为多数类的少数类样本(离群点)旁生成新样本,一个少数类样本周围的多数类样本越多,则赋予该少数类样本越大的权重,在该少数类样本旁生成越多的样本,生成过程与SMOTE类似,从少数类样本的K个最近的少数类邻居中随机选择一个少数类邻居进行插值,根据该少数类样本的权重对该少数类样本重复插值若干次。

from imblearn.over_sampling import ADASYN
ada = ADASYN(random_state=42)
X_res, y_res = ada.fit_resample(X, y)

1.4、BorderlineSMOTE

由于SMOTE算法随机选择少数类样本来生成新样本,没有考虑到所选少数类样本周围的情况,因此可能存在两个问题:

  • 所选的少数类样本周围也都是少数类样本,这样合成的新样本不会提供太多有用信息;
  • 所选的少数类样本周围都是多数类样本,这样的样本可能是噪声,生成的新样本可能会与周围多数类样本重叠。

因此BorderlineSMOTE算法在SMOTE算法上进行改进,只使用处于边界上的少数类样本来合成新样本,算法首先将所有少数类样本划分为三类,分别是:

  • noise:噪声样本,即少数类样本的周围K个近邻都是多数类样本;
  • danger:危险样本,即少数类样本的周围K个近邻中有一半及以上为多数类样本;
  • safe:安全样本,即少数类样本的周围K个近邻中有一半以上为少数类样本。

然后算法使用danger样本根据SMOTE算法来生成新样本,根据在生成新样本时选择邻居类别的不同,BorderlineSMOTE又分为borderline-1和borderline-2,前者在K近邻中选择少数类样本来进行插值,后者选择任意类别样本来进行插值。

from imblearn.over_sampling import BorderlineSMOTE
sm = BorderlineSMOTE(random_state=42, kind='borderline-1')
X_res, y_res = sm.fit_resample(X, y)

1.5、SVMSMOTE

SVMSMOTE用SVM分类器来寻找支持向量,然后在支持向量的基础上生成新样本。类似于BorderlineSMOTE,SVMSMOTE也将少数类样本划分为noise、danger和safe三类。

from imblearn.over_sampling import SVMSMOTE
sm = SVMSMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y)

1.6、KMeansSMOTE

KMeansSMOTE先对样本进行KMeans聚类,然后根据簇密度来对不同簇的少数类样本进行合成。具体包括三个步骤:

  1. 聚类:使用KMeans将所有样本聚为K个簇;
  2. 过滤:选择用于上采样的簇,保留具有高比例少数类样本的簇;
  3. 上采样:应用SMOTE在每个选定的簇中生成新样本,对于少数类样本越稀疏的簇,生成的少数类样本越多。
from imblearn.over_sampling import KMeansSMOTE
sm = KMeansSMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值