作为imblearn介绍的第二节,介绍imblearn中上采样的方法和基本原理。
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
针对不同的上采样算法,修改RandomOverSampler和参数即可。
随机对欠表达样本进行采样,该算法允许对heterogeneous data(异构数据)进行采样(例如含有一些字符串)。
通过对原少数样本的重复取样进行上采样。
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
通过interpolation(插值) 生成新的样本,不对easy samples and hard samples进行区分。
from imblearn.over_sampling import SMOTE
X_resampled,y_resampled = SMOTE().fit_resample(X, y)
主要思路为:
通过插值生成新的样本,生成靠近在KNN中被分类错误的原样本。
from imblearn.over_sampling import ADASYN
X_resampled, y_resampled = ADASYN().fit_resample(X, y)
主要思路与SMOTE相同,只是选取 x x x的方式有所不同。
因为SMOTE算法和ADASY算法在上采样的时候用到了距离,因此当 x x x为异构数据,即含有离散变量(例如0代表男,1代表女),此时无法直接对离散变量使用欧氏距离。因此有了变体SMOTENC,其在处理离散数据时,采用K近邻样本中出现频率最高的离散数据作为新的样本的值。但是要提前告知离散数据出现的维度位置。
from imblearn.over_sampling import BorderlineSMOTE
#当处理mixed data时,以上除了RandomOverSampler都不行(因为用到了距离),但是一下算法可以——SMORENC
from imblearn.over_sampling import SMOTENC
#例如我们的数据的第一个(0)和最后一个数据(3)为categorical features(离散数据)
smote_nc = SMOTENC(categorical_features=[0,2], random_state=0)
X_resampled, y_resampled = smote_nc.fit_resample(X,y)
首先对样本(负例样本)x划分为noise(所有KNN样本类别都与x类别不同);in danger(至少有一半KNN样本类别与x类别相同);safe(所有KNN样本类别都与x类别相同)三类样本。
bordeline SMOTE: Borderline-1 和 Borderline-2 SMOTE 会使用 in danger的样本。
区别在于Borderline-1 SMOTE选取的参与插值的KNN样本 y y y会跟 x x x属于同一类别;Borderline-2 SMOTE可能使用任何类别的KNN样本。
使用SVM分类器找到支持向量,在生成的时候会考虑它们. SVM的C参数决定了选择支持向量的多少。