• 1 什么是非均衡

  • 2 10种解决办法

    • 2.1 重采样(六种方法)

    • 2.2 调整损失函数

    • 2.3 异常值检测框架

    • 2.4 二分类变成多分类

    • 2.5 EasyEnsemble

  • 3 为什么树模型不担心这个问题

1 什么是非均衡

分类(classification)问题是数据挖掘领域中非常重要的一类问题,目前有琳琅满目的方法来完成分类。然而在真实的应用环境中,分类器(classifier)扮演的角色通常是识别数据中的“少数派”,比如:

  • 银行识别信用卡异常交易记录

  • 垃圾邮件识别

  • 检测流水线识别残次品

  • 病情监测与识别等等

在这样的应用环境下,作为少数派的群组在数据总体中往往占了极少的比例:绝大多数的信用卡交易都是正常交易,八成以上的邮件都是正常邮件,大多数的流水线产品是合格产品,在进行检查的人群中特定疾病的发病率通常非常低。

如果这样的话,假设99%的正样本+1%的负样本构成了数据集,那么假设模型的预测结果全是正,这样的完全没有分辨能力的模型也可以得到99%的准确率。这个按照样本个数计算准确率的评价指标叫做——Accuracy.

因此我们为了避免这种情况,最常用的评价指标就是F-score,Precision&Recal,Kappa系数。

【F-Score和Kappa系数已经在历史文章中讲解过啦】

2 10种解决办法

解决办法主要有下面10种不同的方法。

  • 重采样resampling

    • 上采样:简单上采样,SMOT,ADASYN

    • 下采样:简单下采样,聚类Cluter,Tomek links

  • 调整损失函数

  • 异常值检测框架

  • 二分类变成多分类

  • EasyEnsemble

2.1 重采样(四种方法)

重采样的目的就是让少的样本变多,或者是让多的样本变少。下图很形象的展示出这个过程:


【简单上采样】

就是有放回的随机抽取少数量的样本,饭后不断复制抽取的随机样本,直到少数量的样本与多数量的样本处于同一数量级。但是这样容易造成过拟合问题。

为什么会造成过拟合呢? 最极端的例子就是把一个样本复制100次,这样就有了一个100样本的数据库。模型训练出来很可能得到100%的正确率,但是这模型真的学到东西了吗?


【SMOTE】

  • SMOT:Synthetic Minority Over-sampling Technique.(翻译成中文,合成最少个体上采样技术?)

核心思想是依据现有的少数类样本人为制造一些新的少数类样本 SMOTE在先用K近邻算法找到K个近邻,利用这个K个近邻的各项指标,乘上一个0~1之间的随机数就可以组成一个新的少数类样本。容易发现的是,就是SMOTE永远不会生成离群样本


【ADASYN】

  • ADASYN:Adaptive Synthetic Sampling Approach(自适应合成样本方法)

ADASYN其实是SMOTE的一种衍生技术,相比SMOT在每一个少数类样本的周围随机的创建样本,ADASYN给每一个少数类的样本分配了权重,在学习难度较高的少数类样本周围创建更多的样本。在K近邻分类器分类错误的那些样本周围生成更多的样本,也就是给他们更大的权重,而并不是随机0~1的权重。

这样的话,就好像,一个负样本周围有正样本,经过这样的处理后,这个负样本周围会产生一些相近的负样本。这样的弊端也是显而易见的,就是对离群点异常敏感。


【简单下采样】这个很简单,就是随机删除一些多数的样本。弊端自然是,样本数量的减少,删除了数据的信息


【聚类】这个是一个非常有意思的方法。我们先选取样本之间相似度的评估函数,比方说就用欧氏距离(可能需要对样本的数据做归一化来保证不同特征的同一量纲)。

方法1:假设有10个负样本和100个正样本,对100个正样本做kmeans聚类,总共聚10个类出来,然后每一个类中心作为一个正样本。

方法2:使用K近邻,然后用K个样本的中心来代替原来K个样本。一直这样做,直到正样本的数量等于负样本的数量。


【Tomek links】

  • 这个不知道咋翻译

Tomek links是指相反类样本的配对,这样的配对距离非常近,也就是说这样的配对中两个样本的各项指标都非常接近,但是属于不同的类。如图所示,这一方法能够找到这样的配对,并删除配对中的多数类样本。经过这样的处理,两类样本之间的分界线变得更加清晰,使少数类的存在更加明显。

下图是操作的过程。

2.2 调整损失函数

调整损失函数的目的本身是为了使模型对少数量样本更加敏感。训练任何一个机器学习模型的最终目标是损失函数(loss function)的最小化,如果能够在损失函数中加大错判少数类样本的损失,那么模型自然而然能够更好地识别出少数类样本。

比较著名的损失函数就是目标检测任务中的focal loss。不过在处理其他任务的时候,也可以人为的增加少数样本错判的损失。

2.3 异常值检测框架

  • 将分类问题转换成为一个异常值监测框架

这个异常值检测框架又是一个非常大的体系,有很多不同的模型,比方说:异常森立等。之后会专门讲讲这个体系的模型的。

(小伙伴关注下公众号呗,不迷路呀)

2.4 二分类变成多分类

对于不均衡程度较低的数据,可以将多数量样本进一步分为多个组,虽然二分类问题被转化成了一个多分类问题,但是数据的不平衡问题被解决,接下来就可以使用多分类中的一对多(OVA)或一对一(OVO)的分类方式进行分类。

就是把多数类的样本通过聚类等方法,划分成不同的类别。这样2分类任务就变成了多分类任务。

2.5 EasyEnsemble

另外一种欠采样的改进方法是 EasyEnsemble ,它将多数样本划分成若 N个集合,然后将划分过后的集合与少数样本组合,这样就形成了N个训练集合,而且每个训练都正负样本均衡,并且从全局来看却没有信息丢失。

3 为什么树模型不担心这个问题

要解释这个问题,首先要理解这两个算法拟合样本的本质。

逻辑回归的算法,采用的是经验风险最小化作为模型的学习准则,即,他的优化目标是最小化模型在训练集上的平均损失。 具体而言,逻辑回归采用的最大后验概率的策略,他的目标是使得训练集总体的后验概率最大。因此这种算法天然地会将关注点更多地放在多数类的拟合情况下,毕竟多数类别的分类正确与否,更为影响最终整体的损失情况。 而在样本不均衡的建模任务中,我们常常其实更关注的是少数类别的分类正确情况。这就导致了我们实际的建模目标和模型本身的优化目标是不一致的。因此,在我们的感觉之中就会认为逻辑回归(包含其他使用类似优化函数的模型)对样本不均衡比较敏感。

而另一方面,树模型采用的更新策略则完全不同,他的优化目标是最大化分叉以后的信息增益的。为了做到这一点,树模型天然地希望分叉以后,每个节点的样本更“纯”,从而增大增益。在这种情况下,即使样本有偏,模型也会对这个类别给予足够的关注度,因此受样本有偏的影响就大大减少。

- END -

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群请扫码进群:

【机器学习基础】八种应对样本不均衡的策略相关推荐

  1. 机器学习-10:MachineLN之样本不均衡

    版权声明:本文为博主原创文章,未经博主允许不得转载.有问题可以加微信:lp9628(注明CSDN). https://blog.csdn.net/u014365862/article/details/ ...

  2. 机器学习-特征工程中的样本不均衡处理方法

    如果你才开始学习机器学习,那么你使用过的数据集很大程度上都是简单.普通.规整的.其中一个原因就是,当你构建分类器时,样本类都是平衡的.在教学中,数据集通常是处理过的,这样才能够把注意力集中在特定算法或 ...

  3. 【机器学习】一文解决样本不均衡(全)

    一.样本不均衡的介绍 1.1 样本不均衡现象 样本(类别)样本不平衡(class-imbalance)指的是分类任务中不同类别的训练样例数目差别很大的情况,一般地,样本类别比例(Imbalance R ...

  4. selenium基础八种元素定位

    # coding:utf-8 from selenium import webdriver # 导入webdriver框架 import time # 导入time 功能driver = webdri ...

  5. 【一文速通】机器学习样本不均衡/数据分布不同怎么办?

    样本不均衡是什么意思 样本(类别)样本不平衡(class-imbalance)指的是分类任务中不同类别的训练样例数目差别很大的情况,一般地,样本类别比例(Imbalance Ratio)(多数类vs少 ...

  6. IPVS -三种IP负载均衡技术与八种调度算法

    三种IP负载均衡技术        在调度器的实现技术中,IP负载均衡技术是效率最高的.在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务 ...

  7. ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测

    ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测 目录 输出结果 数据集展示 输出结果 1.k-NN 2.LoR 4.DT 5.RF ...

  8. java 数据类型转换的一场_Java基础 — 四类八种基本数据类型

    整型:整数类型int 一般的数据. long 极大的数据. short 用于特定的场合,比如底层的文件处理或者需要控制占用存储单元空间量的大数组. byte 用于特定的场合,比如底层的文件处理或者需要 ...

  9. Java机器学习库ML之五样本不均衡

    样本不均衡的问题是指训练集中类别之间的样本数据量比例失衡.有研究表明,部分学习任务,在类别出现1∶35比例时就会使某些分类学习方法无效,甚至1∶10比例也会.样本不均衡导致的问题有: 1)少数类所包含 ...

最新文章

  1. 区块链的去中心化VS传统互联网的去中心化:技术与治理的双重困境
  2. tril--下三角矩阵的抽取
  3. 在MATLAB中使用tensorflow
  4. 查看linux服务器硬件信息
  5. 安装mysql查看随机密码命令_linux安装mysql-8.0.21-1.el7.x86_64.rpm-bundle - 君主-bye
  6. Java程序中fix time_Java Position.setFixTime方法代码示例
  7. idea查找类 方法在哪里被使用
  8. wps指定路径不存在怎么办_WPS说目录不存在
  9. 共享编辑文档系统dzzoffice安装
  10. 【程序员如何买基金 六】买卖指数基金的合适时机
  11. 使用ScriptableObject代替部分配置表的坑点
  12. 基于局部平面拟合的法向估计
  13. Python个人博客项目-3.用户应用开发
  14. 跨省游拯救疫后旅游业:汝之蜜糖,彼之砒霜
  15. 如果房子5折甩卖,你会买吗?
  16. 7620a路由mysql,7620A路由求助 - 新手入门及其它(软件) - 恩山无线论坛 - Powered by Discuz!...
  17. uniapp通过uni.addInterceptor实现路由拦截功能
  18. c语言保留小数点后几位
  19. python猜价格小游戏
  20. LaTeX输出实心圆点列表

热门文章

  1. MySql远程连接设置
  2. Linux更改终端的用户名和主机名的颜色
  3. HTTPS是如何加密的
  4. POJ2142-The Balance【扩欧】
  5. 软件工程第四周作业之四则运算-C#实现
  6. JavaScript中随着鼠标拖拽而移动的块
  7. js函数中的参数的个数
  8. C语言之判断是否为闰年
  9. JSON字符串转换object错误:MorphDynaBean cannot be cast to com.softright.bean.TestBean,类中有集合类型的属性...
  10. scrapy模拟登录新浪微博