泛统计理论初探——机器学习的重采样算法

统计学习-经典重采样方法简介

机器学习中的重采样方法
    在我们之前讲过的文章里,介绍过一些抽样、采样的方法,当实际情况中由于数据本身的均衡性出现很大偏差的时候,采用之前的方法会有一些问题,比如模型过拟合或者是在抽样的数据预测的非常完美。其实这种样本的不均衡问题在实际情况中非常常见,比如信用卡欺诈的问题、垃圾邮件的问题等,如果使用传统的抽样会使得样本数据无法体现负样本的情况,所以需要使用重采样方法进行处理。
    其实最简单的方式会使用类似bootstrap那种进行样本的扩充,或者是从少数类的样本集合里进行有放回地样本抽取,从而达到正样本和负样本之间较为平衡的状态。但显然,这种抽取的方式有很大可能会使得样本被反复抽到,从而使得学习到的负样本没有完全显示出原始数据的负样本特性,也就是模型会学不到一些特征导致模型整体的预测能力变差。
    因此针对上述的情况,本文在此处介绍一种比较经典的重采样方法,也就是SMOTE方法,这种方法对于含有某类样本比较小的数据集的采样是比较有效果的,它的中文名称是人工少数类过采样法,也就是制造一些很像负样本数据的人工数据,不同于之前的反复放回再抽样的方法,这种方法是将负样本数据结合KNN方法,然后在选定最近的K个样本后,随机选择其中一个和当前样本进行连线,然后随机选择线上的一点作为抽取到的样本,它的具体步骤如下:
    1、设置初始化的参数,比如最近邻方法里的K的个数,需要重复操作的阈值也就是采样倍率R,使用何种距离度量去计算,比如欧式距离、曼哈顿距离等。
    2、获取某一类小样本数据里的所有样本,将每个样本都计算它和剩下样本的距离,并且取前K个数据作为K个邻居,从这些邻居中随机选择一个样本v,将这个样本和当前的样本u连成一条直线,在直线上通过生成[0,1]之间的随机数进行选择,即新样本w是满足公式w=u+rand(0,1)*|u-v|的,得到这个样本后记下来。
    3、重复步骤2,直到需要的样本个数已经达到采样倍率的阈值R,结束步骤并且将得到的所有样本与原始的其他类的样本进行合并,从而得到新的样本数据集,在这个样本数据再进行一些简单的采样后,得到的结果就是数据样本类别比较平衡的数据集。
在这里插入图片描述
    根据上述的SMOTE方法的步骤,我们可以发现该算法比原来的反复采样更加合理,人工地生成了一些样本,保留了原始样本的某些特征并且制造出一些新的样本。但值得注意的是,这种方法有可能会制造出一些互相重叠度较高的样本,特别是样本量极小而这种类有很多的情况下。所以针对这个SMOTE算法,后面又有了一些改进,比如ADASYN方法是在不同类的合成数量上进行优化,对于那种不同的少数类的人工合成后样本的个数是不一样的;比如Borderline-SMOTE方法是只会在处于分类样本边界的样本进行新样本的合成,这些方法都是可以避免得到生成的样本是无意义的。
    总的来说,重采样方法是一种比较常用的采样方法,当数据不均衡的时候需要被使用,当然初学者需要去了解这种方法的原理,从而在使用的时候了解这么做的思路,并且在适当的时候可以基于自己的想法对此类的采样方法进行优化,从而提升原始数据集的使用效果。

猜你喜欢

转载自blog.csdn.net/qq_26727101/article/details/108994613