首先说明:改进方案是本人原创,请尊重。其次,改进方案风险很大,请谨慎使用。
首先说smote算法,样本本身就是在特征空间的一些点,所以该算法用于增加样本的方法就是在特征空间中两个同类点之间随机选取一个点,这个点就是一个新样本了,和另外两个点具有相同的类别。
然后说一下smote算法的问题,首先样本不平衡会带来样本点的空间分布并不能符合真实分布,因此使用smote扩充样本集合时,并不能改变原有样本的分布的外围轮廓特征,这就意味着对分类问题中分类边界的影响比较小。
下面是本人对smote算法的改进:
不再只选用两个样本之间的点,而且以一定概率也选用样本点周围的点,距离越近,选用概率越大,越远越小,成指数下降趋势。
输入:样本点集合A,参数m, n , p,q ( 此处p=1,q=3)
1,对于随机选取的样本a属于A,针对点a的n个维度,重复选取m(m<n)次,选出K个待修改的维度
2,针对该K个维度的值val,更新为 val = val + val*[(-1)**random(100)]* [ 1 / exp(random(1,3)) ]
3,将新生成的样本加入A,直至新生成的样本数目满足要求,否则,执行1
对于该算法需要把握几个方面:
1,生成新样本的数目,建议不要多于原有的数目太多
2,每次选取修改的维度 数量, 这个建议根据情况选取,原则而言,不要高于10%
3,波动范围,即更改的幅度,建议也不要太大,尽量控制到30%以下
以上情况,全凭借个人使用经验来做的建议。具体情况,可以再做分析。
最后,需要注意,smote算法也好,本算法也罢,本质都是无中生有,添加训练样本。添加样本信息帮助分类,同时也是添加了噪声,影响了分类边界的确定。
建议在使用过程中谨慎把握使用的幅度。