zoukankan      html  css  js  c++  java
  • 不平衡数据的处理

    传统处理方法

    1.加权

    即其对不同类别分错的代价不同,这种方法的难点在于设置合理的权重,实际应用中一般让各个分类间的加权损失值近似相等。当然这并不是通用法则,还是需要具体问题具体分析。有如下加权方法:

      概率权重法:当数量差距不那么悬殊时,把各类标签的实例出现的频率比作权重,此特征权重来源于数据本身,能够较好的适应数据集的改变;

    2.采样

    采样方法是通过对训练集进行处理使其从不平衡的数据集变成平衡的数据集,在大部分情况下会对最终的结果带来提升。

    采样分为上采样和下采样,上采样是把小众类复制多份,下采样是从大众类中剔除一些样本,或者说只从大众类中选取部分样本。

    随机采样最大的优点是简单,但缺点也很明显。上采样后的数据集中会反复出现一些样本,训练出来的模型会有一定的过拟合;而下采样的缺点显而易见,那就是最终的训练集丢失了数据,模型只学到了总体模式的一部分。

    上采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。

    因为下采样会丢失信息,如何减少信息的损失呢?第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。第二种方法叫做BalanceCascade,利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。第三种方法是利用KNN试图挑选那些最具代表性的大众样本,叫做NearMiss,这类方法计算量很大,感兴趣的可以参考“Learning from Imbalanced Data”这篇综述的3.2.1节。

    3.数据合成

    数据合成方法是利用已有样本生成更多样本,这类方法在小数据场景下有很多成功案例,比如医学图像分析等。

    4.如何选择

    解决数据不平衡问题的方法有很多,上面只是一些最常用的方法,而最常用的方法也有这么多种,如何根据实际问题选择合适的方法呢?接下来谈谈一些我的经验。

    1、在正负样本都非常之少的情况下,应该采用数据合成的方式;

    2、在负样本足够多,正样本非常之少且比例及其悬殊的情况下,应该考虑一分类方法;

    3、在正负样本都足够多且比例不是特别悬殊的情况下,应该考虑采样或者加权的方法。

    4、采样和加权在数学上是等价的,但实际应用中效果却有差别。尤其是采样了诸如Random Forest等分类方法,训练过程会对训练集进行随机采样。在这种情况下,如果计算资源允许上采样往往要比加权好一些。

    5、另外,虽然上采样和下采样都可以使数据集变得平衡,并且在数据足够多的情况下等价,但两者也是有区别的。实际应用中,我的经验是如果计算资源足够且小众类样本足够多的情况下使用上采样,否则使用下采样,因为上采样会增加训练集的大小进而增加训练时间,同时小的训练集非常容易产生过拟合。

    6、对于下采样,如果计算资源相对较多且有良好的并行环境,应该选择Ensemble方法。

    二:新方法

    1.双邻域:通过双邻域机制判断查询邻域中少数类实例的稀疏性,并利用倾向权重机制为易误判的少数类实例加权,由此来提高算法对少数类的敏感性,最后根据加权投票规则完成分类;

    2.基于惩罚函数:基于不平衡度提出惩罚函数计算出最大的信息损失量,计算出最多消除多少实例。通过计算每个实例的贡献度来决定消除那个实例。

    3.在多分类问题中,可以通过把少数类结合,使他们在数量上与多数类相近,最后变成二分类问题。

     https://blog.csdn.net/u012879957/article/details/82459538

    https://blog.csdn.net/u012744245/article/details/108602036?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-8-108602036.nonecase&utm_term=%E6%AD%A3%E4%BE%8B%E5%92%8C%E8%B4%9F%E4%BE%8B%E6%95%B0%E6%95%B0%E6%8D%AE%E9%9B%86%E7%9A%84%E4%BF%A1%E6%81%AF%E9%87%8F&spm=1000.2123.3001.4430

    https://www.cnblogs.com/yuesi/articles/9236796.html

    https://www.cnblogs.com/dyl222/p/11055756.html

  • 相关阅读:
    Mock工具Mockito教程
    基于Jmeter的自动化测试实施方案
    基于敏捷的测试交付物通用设计
    Jmeter 冒烟测试设计
    Jmockit之mock特性详解
    Sonar 常用代码规则(二)
    从Hg迁移到Git
    使用谷歌colab训练crnn模型
    使用AIstudio训练YOLOv3模型
    阿里云服务器部署Djano+Nginx+uWSGI+conda+Https
  • 原文地址:https://www.cnblogs.com/QianYue111/p/13971345.html
Copyright © 2011-2022 走看看