简介
SMOTE法(Synthetic Minority Oversampling Technique)是有效而常用的方法。该算法基于特征空间(而不是数据空间)生成与小类观测相似的新数据(译者注:总体是基于欧氏距离来度量相似性,在特征空间生成一些人工样本,更通俗地说是在样本点和它近邻点的连线上随机投点作为生成的人工样本)。我们也可以说,它生成了小类观测的随机集合来降低分类器的误差。
步骤
- 1.计算样本点间的距离并确定其近邻。
- 2.生成一个0到1上的均匀随机数,并将其乘以距离。
- 3.把第二步生成的值加到样本点的特征向量上。
- 4.这一过程等价于在在两个样本的连线上随机选择了一个点
伪代码
伪代码 tips
1.从最少的类别获取其中的最近邻,拓展倍数不足1倍时,会扩充的到1倍。
2.从k个最近邻中,选取一个A,在这个A的方向上,生成一个随机的点。
python 中使用
# 构建自变量和因变量
X = data
y = np.array(target)
n_sample = y.shape[0]
n_pos_sample = y[y == 0].shape[0]
n_neg_sample = y[y == 1].shape[0]
print('样本个数:{}; 正样本占{:.2%}; 负样本占{:.2%}'.format(n_sample,
n_pos_sample / n_sample,
n_neg_sample / n_sample))
print('特征维数:', X.shape[1])
from imblearn.over_sampling import SMOTE # 导入SMOTE算法模块
# 处理不平衡数据
sm = SMOTE(random_state=42) # 处理过采样的方法
X, y = sm.fit_sample(X, y)
print('通过SMOTE方法平衡正负样本后')
n_sample = y.shape[0]
n_pos_sample = y[y == 0].shape[0]
n_neg_sample = y[y == 1].shape[0]
print('样本个数:{}; 正样本占{:.2%}; 负样本占{:.2%}'.format(n_sample,
n_pos_sample / n_sample,
n_neg_sample / n_sample))
参数详解
ref:
SMOTE: Synthetic Minority Over-sampling Technique
Python:SMOTE算法
API
网友评论