文章目录

  • 数据不平衡
  • 类别不平横会影响模型的效果
  • 如何解决

数据不平衡

很多算法都有一个基本假设,那就是数据分布是均匀的。当我们把这些算法直接应用于实际数据时,大多数情况下都无法取得理想的结果。因为实际数据往往分布得很不均匀,都会存在“长尾现象”,也就是所谓的“二八原理”。

不平衡程度相同的问题,解决的难易程度也可能不同,因为问题难易程度还取决于我们所拥有数据有多大。可以把问题根据难度从小到大排个序:大数据+分布均衡 < 大数据+分布不均衡 < 小数据+数据均衡 < 小数据+数据不均衡。
说明:对于需要解决的问题,拿到数据后,首先统计可用训练数据有多大,然后再观察数据分布情况。经验表明,训练数据中每个类别有5000个以上样本,其实也要相对于特征而言,来判断样本数目是不是足够,数据量是足够的,正负样本差一个数量级以内是可以接受的,不太需要考虑数据不平衡问题(完全是经验,没有理论依据,仅供参考)。

类别不平横会影响模型的效果

许多模型的输出类别是基于阈值的,例如逻辑回归中小于0.5的为反例,大于则为正例。在数据不平衡时,默认的阈值会导致模型输出倾向与类别数据多的类别。

如何解决

调整分类阈值,使得更倾向与类别少的数据。
选择合适的评估标准,比如ROC或者F1,而不是准确度(accuracy)。
采样法(sampling)来处理不平横的问题。
分为欠采样(undersampling)和过采样(oversampling)两种,过采样小样本(SMOTE),欠采样大样本。

  • 过采样:通过增加样本中小类样本的数据量来实现样本均衡。其中较为简单的方式是直接复制小类样本,形成数量上的均衡。但实际上,并没有为模型引入更多数据,过分强调正比例数据,会放大正比例噪音对模型的影响。即随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General)。
  • 欠采样:通过减少多数类样本的样本数量来实现样本均衡。其中比较简单直接的方法就是随机去掉一些数据来减少多数类样本的规模,但这种方法可能会丢失一些重要的信息。还有一种方法就是,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,再加上少数类的所有样本进行训练。这样就可以保证了多数类样本在特征空间的分布特性。
    数据合成
    SMOTE(Synthetic Minority Oversampling Technique)即合成少数类,它是基于随机过采样算法的一种改进方案,SMOTE算法的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本添加到数据集中。
    针对少数类样本的xix_{i}xi​,求出其kkk近邻,随机选取kkk紧邻中一个样本记为xnx_{n}xn​。生成一个0到1之间的随机数r,然后根据Xnew=xi+r∗(xn−xi)X_{new} = x_{i} + r * (x_{n} - x_{i})Xnew​=xi​+r∗(xn​−xi​)生成新数据。也可通过经过改进的抽样的方法,在少数类中加入随机噪声等生成数据。
    对原数据的权值进行改变
    通过改变多数类样本和少数类样本数据在训练时的权重来解决样本不均衡的问题,是指在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。例如scikit-learn中的SVM算法,也称作penalized-SVM,可以手动设置权重。若选择balanced,则算法会设定样本权重与其对应的样本数量成反比。
    通过特征选择
    在样本数据较为不均衡,某一类别数据较少的情况下,通常会出现特征分布很不均衡的情况。例如文本分类中,有大量的特征可以选择。因此我们可以选择具有显著区分能力的特征进行训练,也能在一定程度上提高模型的泛化效果。
    通过组合集成方法解决
    通过训练多个模型的方式解决数据不均衡的问题,是指将多数类数据随机分成少数类数据的量N份,每一份与全部的少数类数据一起训练成为一个分类器,这样反复训练会生成很多的分类器。最后再用组合的方式(bagging或者boosting)对分类器进行组合,得到更好的预测效果。简单来说若是分类问题可采用投票法,预测问题可以采用平均值。这个解决方式需要很强的计算能力以及时间,但效果较好,相当于结合了组合分类器的优势。

注:
采样方法一般比直接调阈值效果好。
使用采样方法一般可以提升模型的泛化能力,但有一定的过拟合的风险,应和正则搭配使用。
过采样大部分时候比欠采样效果好,但很难一概而论哪种方法好,还是要根据数据的特性具体讨论。

样本不平衡的常用处理方法相关推荐

  1. 关于正负样本不平衡问题的解决方法收集整理

    参考文献 1.如何解决机器学习中数据不平衡问题 2.Learning from imbalanced data 原文 3.对于正负样本不均衡的解决方法 4.2中论文的翻译总结 一. 问题背分析 1.背 ...

  2. 不平衡数据集评价指标及常用解决方法

    1.不平衡数据集的评估指标有哪些? 评估指标1:recall,Precision,F-score,其中F-score是两者的中和,一般认为F-measure越高,分类器的性能越好: Precision ...

  3. 目标检测中的样本不平衡处理方法——OHEM, Focal Loss, GHM, PISA

    GitHub 简书 CSDN 文章目录 1. 前言 2. OHEM 3. Focal Loss 3.1 Cross Entropy 3.2 Balanced Cross Entropy 3.3 Foc ...

  4. 正负样本不平衡处理方法总结

    转载链接: https://blog.csdn.net/qq_14845119/article/details/78930091 1, Bootstrapping,hard negative mini ...

  5. 文献记录(part58)--不平衡数据处理的新方法一基于样本相似度的少数合成法

    学习笔记,仅供参考,有错必究 不平衡数据处理的新方法一基于样本相似度的少数合成法 摘要 引言

  6. 样本不平衡不均衡数据处理

    20220302 对连续性的不平衡也可以参照分类型数据的不平衡处理方法?划分为多个集合求平均值? 20220125 # 数据划分negtive_rows = negtive_data.shape[0] ...

  7. 2019 sample-free(样本不平衡)目标检测论文阅读笔记

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自知乎,已获作者同意转载,请勿二次转载 (原文地址:https://zhuanlan.zhihu.com/p/100052168) 背景 < ...

  8. 系统学习机器学习之总结(二)--样本不平衡问题处理

    原文链接:http://blog.csdn.net/heyongluoyao8/article/details/49408131 解决这一问题的基本思路是让正负样本在训练过程中拥有相同的话语权,比如利 ...

  9. 基于 Python 的 8 种常用抽样方法

    抽样是统计学.机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到.所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本. 上 ...

最新文章

  1. 云消防大数据_大数据在智慧消防中的应用
  2. AI解梦成为现实 未来还有无限可能
  3. 【深度学习入门到精通系列】拿捏Dice系数
  4. Python练习题:合并列表和列表排序
  5. phpmailer 发送邮件空隙太大_WordPress纯代码无插件开启SMTP邮件服务——墨涩网
  6. mfc制作登录界面mysql_MFC制作漂亮界面之登录界面
  7. Lang.String
  8. nmap配合shell使用
  9. oralcle中的性能统计基本用法statpack
  10. matlab fft 功率谱,matlab实现功率谱估计,关于FFT点数选取到底什么标准?
  11. 荣耀 android 5.0 root,华为EMUI5.0 可用的ROOT工具,我是作者!!!!——精华帖
  12. Spring是什么意思?
  13. php输出英文格式的日期
  14. 使用Google学术自动生成标准的参考文献格式(Word版+LaTex版)
  15. 自己写一个调查问卷Web项目 (超详细版)
  16. Java swing 写会员卡管理系统
  17. iOS/iPadOS中Office中文字体显示不正确的解决方法
  18. nvidia显卡控制面板的安装位置
  19. SoftRendererRenderPipeline(从迷你光栅化软渲染器的实现看渲染流水线)
  20. wps怎么统一修改标点符号_如何批量修改字母标点全角半角?

热门文章

  1. SAMSUNG i535(Verizon版S3)不能使用电信3G网络的问题
  2. 计算机按哪里有音乐键,电脑键盘声音键是哪个 怎么打开电脑键盘声音键 - 驱动管家...
  3. codeforces 416E President's Path floyd+D(递)P(推)
  4. **软件包xx没有可安装候选**
  5. 当a=1,b=2,c=3时,if(ac)b=a;a=c;c=b;的执行结果详解
  6. 微软自带输入法输入时英文的间距突然变大
  7. Linux 中的内存使用率计算方式
  8. EFR32--如何在EFR32程序中修改UUID
  9. html5/css实现字体上划线
  10. Microsoft Store无法显示错误,真正解决!