对于不均衡数据的分类方法,大体上可以从两个层面来解决!
1.数据层面 即过采样和欠采样
1)随机过采样和随机欠采样
随机过采样即通过多次 有放回 随机 从少数类样本中抽取数据集,与多数类样本一起组成训练集。
随机欠采样即从多数样本中随机选择少量样本与少数类样本组成新的训练集,可以可以有放回也可以无放回。
2)SMOTE(Synthetic Minority Oversampling Technique)
随即过采样通过简单的样本复制来增加样本数,缺点是容易过拟合,模型学习到的信息过于特别不够泛化,
SMOTE算法根据少数样本合成新样本添加到数据集中。
算法过程如下:
1.对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集s_min中所有样本的距离,得到其k近邻。
2.根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为。对于每一个随机选出的近邻,分别与原样本按照如下的公式构建新的样本。
该方法可以防止随机过采样过拟合问题,实验证明可以提高分类器的性能,但是由于对于每个少数样本都生成新样本,因此容易发生样本重叠,为了解决这一问题,提出Borderline-SMOTE算法。
算法大体流程如下:
1.少数类样本的每个样本xi求k近邻,记作Si_knn,且Si_knn属于整个样本集合而不再是少数类样本,若满足
(Smaj表示多数类样本集)。则将样本xi加入DANGER集合,显然DANGER集合代表了接近分类边界的样本,将DANGER当作SMOTE种子样本的输入生成新样本。特别地,当上述条件取右边界,即k近邻中全部样本都是多数类时,此样本不会被选择为种样本生成新样本,此情况下的样本为噪音。
3)Informed Undersampling中的EasyEnsemble
每次从多数类中抽样出和少数类数目差不多的样本,然后和少数类样本组合作为训练集。在这个训练集上学习一个adaboost分类器。 最后预测的时候,是使用之前学习到的所有adaboost中的弱分类器(就是每颗决策树)的预测结果向量(每个树给的结果组成一个向量)和对应的权重向量做内积,然后减去阈值,根据差的符号确定样本的类别。
Balance Cascade 算法
可以看出balance cascade算法和easy ensemble还是挺像的,差别就在第7步和第8步。
第6步,算法训练出一个分类器,然后在第7步调整分类器HiHi的阈值θi 以保证分类器Hi的false positive rate 为f。
这样的话,根据Hi 的阈值θi对所有的多数类样本进行预测,如果样本的估计值大于该阈值则判定为正例(即少数类),如果样本的估计值小于阈值则判定为负例(即多数类)。第8步中去掉这一部分样本预测正确的样本,而这些样本占当前所有多数类的样本的1−f,即每次迭代多数类样本保留下来的比例为f,那么T-1次后,多数类样本还剩个,在第T次迭代中,多数类样本就会少于少数类样本,此时可以停止迭代。
2.算法层面 包括:
1)代价敏感
给每个训练样本添加一个权重,或者在算法中引入敏感因子
2)集成学习方法
多个分类器投票,包括同种分类器投票和不同分类器的投票
3)单类分类器方法
仅对少数类进行训练,如使用svm
未完待续。。。。。