SMOTE采样处理数据不平衡问题

SMOTE算法:

过采样和欠采样是处理非平衡分类问题时的常用手段。

拿二分类为例,如果训练集中阳性样本有1000个,阴性样本有10万个,两者比例为1:100严重失衡。为了一些模型的性能考虑,我们需要进行一些处理使得两者的比例尽可能接近。

过采样:对少的一类进行重复选择,比如我们对1000个阳性样本进行有放回的抽样,抽5万次(当然其中有很多重复的样本),现在两类的比例就变成了1:2,比较平衡。

欠采样:对多的一类进行少量随机选择,比如我们对10万个阴性样本进行随机选择,抽中2000个(当然原样本中很多样本未被选中),现在两类的比例就变成了1:2,比较平衡。

SMOTE:SMOTE算法的基本思想就是对少数类别样本进行分析和模拟,并将人工模拟的新样本添加到数据集中,进而使原始数据中的类别不再严重失衡。该算法的模拟过程采用了KNN技术。

做法:

它以每个样本点的k个最近邻样本点为依据,随机的选择N个邻近点进行差值乘上一个[0,1]范围的阈值,从而达到合成数据的目的。这种算法的核心是:特征空间上邻近的点其特征都是相似的。它并不是在数据空间上进行采样,而是在特征空间中进行采样。

SMOTE采样处理数据不平衡问题_第1张图片

SMOTE负责接受要采样的类数据集X,返回一个经过SMOTE采样后的数据集,大小为(N/100)*T,函数有三个参数,分别是T: 需要处理的数据集X的样本数量; N: 采样比例,一般为100, 200, 300等整百数,对应即1倍,2倍,3倍;K: 为采样的最近邻数量,论文中默认为5SMOTE代码思想非常简单,扫描每一个样本点,计算每一个样本点的K个最近邻,将每一个最近邻样本点的索引记录在nnarray中,之后传入Populate(N, i, nnarray)中即完成一个样本点的采样。

Populate则负责根据nnarray中的索引去随机生成N个与观测样本i相似的样本。该函数会计算随机邻近点nn与观测样本i点的每一个特征之间的差距dif,将其差距乘上一个[0, 1]随机因子gap,再将dif*gap的值加上观测点i即完成了一个特征的合成。

你可能感兴趣的:(SMOTE,深度学习,人工智能)