不平衡数据集的处理
python包:imblearn,参考文档:imbalanced-learn
目录
一、上采样方法(imblearn.over_sampling)
二、下采样方法(imblearn.under_sampling)
可控制的下采样方法(the controlled under-sampling techniques)
数据清洗方法(the cleaning under-sampling techniques)
2.6、RepeatedEditedNearestNeighbours
2.10、NeighbourhoodCleaningRule
2.11、InstanceHardnessThreshold
四、下采样多模型融合方法(imblearn.ensemble)
4.3、BalancedRandomForestClassifier
一、上采样方法(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聚类,然后根据簇密度来对不同簇的少数类样本进行合成。具体包括三个步骤:
- 聚类:使用KMeans将所有样本聚为K个簇;
- 过滤:选择用于上采样的簇,保留具有高比例少数类样本的簇;
- 上采样:应用SMOTE在每个选定的簇中生成新样本,对于少数类样本越稀疏的簇,生成的少数类样本越多。
from imblearn.over_sampling import KMeansSMOTE
sm = KMeansSMOTE(random_state=42)
X_res, y_res = sm.fit_resample(X, y

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



