lightgbm 数据不平衡_不平衡数据下的机器学习(下)

本文从不平衡学习的基础概念和问题定义出发,介绍了几类常见的不平衡学习算法和部分研究成果。总体来说,不平衡学习是一个很广阔的研究领域,但受笔者能力和篇幅的限制,本文仅对其中部分内容做了简单概述,有兴趣深入学习或研究的读者可以参阅下文所列参考文献或其他相关资料。来自: 哈工大讯飞联合实验室

3.5 不平衡学习算法的实际应用效果对比

上面4小节已经给出了很多针对数据不平衡问题的处理算法,下面将对这些算法的实际应用效果进行对比,本节的所有数据与图表都来自于Buda, M.等人于2017年发表在Arxiv上的文章《A systematic study of the class imbalance problem in convolutional neural networks》。

28508fbf586dbd8de2ef2d4cab9eb565.png

图 3.10 数据不平衡的形式。(a)和(b)为阶梯性不平衡,(c)为线性不平衡。

在这篇文章中,作者定义了2种数据不平衡的形式:阶梯性不平衡和线性不平衡,两种形式见图 3.10。评价指标为ROC AUC,实验了四种不平衡学习算法:

1)随机过采样

2)随机降采样

3)使用随机过采样方法预训练CNN模型,然后再使用原始数据集对模型最后一层做微调

4)使用随机降采样方法预训练CNN模型,然后再使用原始数据集对模型最后一层做微调

作者在MNIST、CIFAR-10和ImageNet这3个数据集上分别进行了实验,实验配置均在下表中列出:

f097c1b79dfda641325240de862c0804.png

3.5.1 在阶梯性不平衡数据上的实验结果

a91d4c2823ff8c2ddc9772be81a93a13.png

图 3.11 在阶梯状不平衡数据上,随不平衡比例变化的各个算法的表现。(a)(b)(c)为在MNIST上的结果,(d)(e)(f)为在CIFAR-10上的结果

从图 3.11中可以看到:相比于简单任务(MNIST),数据不平衡对CNN在复杂任务(CIFAR-10)上的表现影响更大;随机过采样方法在几乎所有情况下都要优于其他方法。

137d9a8b5e5a22e97aa6c74d4b681af8.png

图 3.12在阶梯状不平衡数据上,随少数类数量变化的各个算法的表现。(a)(b)(c)为在MNIST上的结果,(d)(e)(f)为在CIFAR-10上的结果

从图 3.12中也可以看出:使用随机过采样之后效果几乎始终优于原始的不使用任何不平衡学习算法的效果;预训练方法的效果始终介于非预训练方法和原始方法之间。

3.5.2 在线性不平衡数据上的实验结果

893b56142d84008ebf5054b3545dd478.png

图 3.13 线性不平衡数据上的实验效果

从图 3.13可以看出:随机过采样对于实验效果始终有促进能力;随机降采样的效果则会随着不均衡比例的提升而逐渐下降。

b8b60a7b914feedb0e79fef0aa2aa3d6.png

上表给出了作者在ImageNet上的实验效果,可以看到,随机过采样方法还是始终优于随机降采样方法,但要差于不使用任何不平衡学习算法的Baseline方法。因为,我们在将采样方法应用于复杂任务时,需要格外小心。

3.5.4 过采样/降采样比例对实验结果的影响

8e76154de071988b45feb4e09ccb46e9.png

图 3.14 过采样/降采样比例对实验结果的影响

从图 3.14可以看到:随机过采样方法会在过采样到各类别完全均衡的情况下取得较好效果;随机降采样方法所需的较佳降采样比例则随着数据变化而变化。

3.5.5 对采样方法泛化能力的研究

32db14cbaeb901caf975d0e3dd5624a1.png

图 3.15 在CIFAR-10 阶梯性不平衡数据集上的实验结果

图 3.15比较了不使用任何不平衡学习算法、随机过采样和随机降采样的泛化能力。从图中可以看出,对于该任务中使用的CNN模型,随机过采样方法可以在测试集上取得最优的分类准确率,并且不会导致更严重的过拟合。


4、不平衡学习的成果

上一节给出了不平衡学习算法的分类、几个经典算法的介绍和性能比较。本节将关注不平衡学习的研究进展,着重介绍两篇论文:

1)Lin, H.等人2018年发表在ACL上的《Adaptive Scaling for Sparse Detection in Information Extraction》

2)Huang, C.等人2016年发表在CVPR上的《Learning Deep Representation for Imbalanced Classification》

4.1 《Adaptive Scaling for Sparse Detection in Information Extraction》

4.1.1 引言

检测任务是信息抽取领域非常常见的任务,典型的任务如命名实体识别、关系抽取和事件检测等。在做检测任务时,我们可以把待检测的标签作为正例,其他标签作为反例,从而将检测任务转换为标准的分类任务。在这种分类任务中,一般使用交叉熵作为损失函数,正例的F值作为评价指标。由于正例(待检测的标签)往往非常稀疏,因此这是一个数据不平衡的分类任务。

9fb583d8b6c320c6a1284ec1fc57c738.png

可以看到,在计算F值时,正例和反例并非是等价的,这导致评估指标和优化目标出现了背离。因此在设计模型训练方法时,需要考虑到这种差异,尽量保证训练目标与评估指标的一致性。

一种做法是使用cost-sensitive的方法,对不同类别样本设置不同的损失权重,但在权重的设置上,过去的研究一般是手动设置或者是在大规模数据集上多次实验搜索得到,这些方法费时费力而且可迁移性较差。论文针对这一问题,提出一种自适应调整权重的算法,称为Adaptive Scaling。

4.1.2 Adaptive Scaling

Adaptive Scaling算法借鉴了经济学中的边际效用理论:指每新增(或减少)一个单位的商品或服务,它对商品或服务的收益增加(或减少)的效用。在分类任务中,将边际效用理论中的“商品或服务”替换为分类样本,收益即为评估指标(F值),此时的边际效用定义为:每新增(或减少)一个分类正确(错误)的样本,它对评估指标F值增加(或减少)的效用。由此,可以使用每个类别对F值的边际效用作为其重要程度的衡量。

实际计算时,可以将评估指标对TP和TN的偏导值作为正例和反例的边际效用值。如果是把Accuracy作为目标,计算正例和反例的边际效用可以得到:

可以看到,当把Accuracy作为目标时,正例和反例的边际效用始终是恒定而且相等的,如果是将F值作为目标,可以得到:

1a901f6b5d1191d55fe8bbf619535087.png

这样就得到了能够自动在训练过程中调整样本权重的Adaptive Scaling算法,而且该算法不需要引入任何额外的超参数。相比于传统的cost-sensitive方法,其特点在于:

1)正例和反例的相对重要程度既与正反例的比例有关,也会受到当前模型的分类能力影响

2)反例的重要性会随着正例分类准确率的提升而增加

3)反例的重要性也会随着反例分类准确率的提升而增加

4)当precision比recall更重要时,反例的重要性也会增加

4.1.3 Batch-wise Adaptive Scaling

在训练神经网络时,最常用的是batch-wise的方法,如果用TP和TN在当前batch下的预测值作为近似,我们就得到了Batch-wise Adaptive Scaling算法。

具体来说,当前batch下,TP和TN的近似值按照下式计算:

5d4976d70b32e22dde17cb1546351c60.png

再忽略掉PE对结果的影响(比较微弱),得到:

7abaae36cfbaac628a043a5d1abcaad1.png

由此,在每个batch训练时,首先可以根据前向预测结果估计得到正例和反例的相对权重,然后计算cost-sensitive的交叉熵损失,最后反向传播更新模型参数。

可以将Batch-wise Adaptive Scaling视为一个插件,运行在前向预测和反向传播之间,不会影响到前后流程的正常运行。

4.1.4 实验验证

9a2382858894a1cc71a87ab5c0356645.png

图 4.1 实验效果验证

论文在事件检测任务上进行了验证实验。测试数据为TAC KBP 2017 Event Nugget Detection Evaluation(LDC2017E55)官方提供的验证集,包含167篇英文文档和167篇中文文档。

图 4.1给出了多种算法的效果比较,可以看到,Adaptive Scaling(A-Scaling)算法几乎在各项指标上都达到了State-of-the-Art的效果。

4593c2bcd4c68416c43f4c9b214a8974.png

图 4.2 稳定性分析

图 4.2给出了多次实验下,不同算法结果的稳定性比较,同样可以看到,Adaptive Scaling算法在稳定性上也要好于传统的采样方法或者代价敏感型方法,尤其是在数据不平衡程度更高的中文数据集上,Adaptive Scaling表现明显更加稳定。


4.2 《Learning Deep Representation for Imbalanced Classification》

4.2.1 引言

计算机视觉领域的很多数据集都存在数据不平衡的问题。例如在人脸识别任务中,正例和反例的数据就极为不平衡。传统的应对数据不平衡的算法有采样方法和代价敏感型方法等,这些方法在经典的“浅层”机器学习算法上已经有充分的研究,但在深度学习模型上还缺乏系统的研究。

针对计算机视觉领域的数据不平衡问题,论文提出一种在不平衡数据下的更有效的深度表征并结合kNN做分类的算法:Large Margin Local Embedding (LMLE)-kNN(LMLE-KNN)。该算法包括2个步骤:首先使用CNN模型从不平衡数据集中学习得到每个样本的深度表征(embedding向量),然后使用改进的k近邻分类算法对embedding向量分类。

4.2.2 从不平衡数据中学习深度表征

给定一个数据不均衡的计算机视觉数据集,论文希望先对每个样本学习一个embedding向量表示f(x),学习到的embedding既具有区分性又能不包含本地的类别不均衡。为了实现这一目标,论文首先从不平衡数据中采样获取多个五元组,如图 4.3所示。

c5e144b30ed94328fe525e4483528970.png

图 4.3 (a)传统的三元组表示 (b)五元组表示

5d414c611dcac6e8fdbd95129cb80326.png

相比于传统的三元组方法,这种五元组方法的优势在于:

1)五元组包括四个距离,这四个距离的大小需要满足一定的排序关系,这种排序关系可以提供更加丰富的信息和更强的约束。

2)尽管在做五元组采样时,我们会限制锚样本的采样概率分布使得来自少数类和多数类的数量尽量均衡,这种做法与降采样有些类似。但与降采样不同的是,由于这个采样过程会重复很多次,所以实际上并不会有降采样的信息丢失。

为了满足五元组四个距离的不等式要求,论文设计了一种三头的Hinge loss,表示如下:

7350ffd33b9e75545f4a1db667113c94.png

这个损失函数应用了Large Margin的思想,引入3个松弛变量限制了五元组四个距离的3个间隔。

论文使用CNN来生成对每张图片的深度表征,图 4.4示意了该CNN的的训练方法。

11c46f18548df0b0052e9b83fe031a60.png

图 4.4 CNN模型训练

训练时,五元组的五个样本分别由同一个CNN做编码,获得5个embedding向量,然后计算三头的Hinge loss,最后经过反向传播更新CNN参数。

fe25a9636eb6c109576702a77adc69c4.png

图 4.5 整体训练流程

图 4.5给出了训练获得样本数据深度表征的整体流程。

4.2.3 kNN不平衡数据分类

使用上一小节训练的CNN,可以获得对于数据集中每个样本的深度表征,在此基础上,论文设计了一种基于聚类cluster的kNN分类算法,用于做最终的分类。由于这一部分的算法与本文“不平衡学习”的主题没有关联,这里不再赘述,有兴趣的读者可以参阅Huang, C.等人的公开论文。

4.2.4 实验结果

论文在CelebA面部特性识别和BSD500边缘检测两个数据集上进行了实验,并与State-of-the-Art的方法做了比较。

a079611fd9bfcd76aa60a5a87a3d8403.png

图 4.6 CelebA上的实验结果。Imbalance level的值越大,该特性数据的不平衡程度越高;评估指标为balanced accuracy=(TP/P + TN/N)/2。

cfd556b71b37cc59729481f7ee975ae1.png

图 4.7 随数据不平衡程度增加的相对性能提升变化

图 4.6和图 4.7分别给出了在CelebA数据集上的实验效果比较和随数据不平衡程度增加的相对性能提升变化。可以看到,LMLE-kNN的分类效果明显优于其他State-of-the-Art方法,并且数据不平衡程度越高,LMLE-kNN在效果上的提升更加明显。

f054efd7a1afd3662b1efe999a8097f1.png

图 4.8 BSD500上的实验结果

图 4.8给出了在BSD500上的实验结果,LMLE-kNN算法同样取得了与State-of-the-Art方法相当的效果。需要说明的是,图中的HFL、HED等方法都使用了大型的VGGNet模型,而LMLE-kNN只使用了一个小型的6层CNN。

62a5d94ad629455160ff965786114250.png

图 4.9 一个边缘检测的例子。从左到右依次为原始图像、理想结果、Sketch Token、DeepContour和LMLE-kNN的检测结果

图 4.9给出了一个具体的边缘检测例子,相比于其他算法,LMLE-kNN算法不会受到太多噪声边缘的影响。

5、总结

本文从不平衡学习的基础概念和问题定义出发,介绍了几类常见的不平衡学习算法和部分研究成果。总体来说,不平衡学习是一个很广阔的研究领域,但受笔者能力和篇幅的限制,本文仅对其中部分内容做了简单概述,有兴趣深入学习或研究的读者可以参阅下文所列参考文献或其他相关资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

netty实现高性能文件服务器,通用文件服务组件(Netty实现版本)

本文所述文件服务组件在笔者此前一篇文章中已有阐述(基于netty的文件上传下载组件),不过本文将基于之前这个实现再次进行升级改造,利用基于注解的方式进行自动装配。1. 简介1.1 Netty简介Netty是一个异步事件驱动的网络应用程序框架,用于快速…

leetcode343. 整数拆分(动态规划)

给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 解题思路 组成整数两个数可以进一步拆分,所以可以运用到动态规划&#xff0c…

爱前端2018全栈大前端_启动2018年前端工具调查

爱前端2018全栈大前端by Ashley Watson-Nolan通过阿什利沃森-诺兰 启动2018年前端工具调查 (Launching the Front-End Tooling Survey 2018) The Front-End Tooling Survey is back to gather input and shed some light on the tooling habits across the web development in…

PHP 小数点保留两位【转】

最近在做统计这一块内容&#xff0c;接触关于数字的数据比较多&#xff0c; 用到了三个函数来是 数字保留小数后 N 位&#xff1b; 接下来简单的介绍一下三个函数&#xff1a; 1、number_format echo number_format("5000000")."<br>"; echo number_…

华为杯数学建模2020获奖名单_我校在2020年全国大学生数学建模竞赛中再获佳绩(内附获奖名单)...

# 近日&#xff0c;从全国大学生数学建模竞赛组委会获悉&#xff0c;我校在2020年全国大学生数学建模竞赛中获得5项国家二等奖。国家奖获奖数量在全国农林院校中并列排名第二。在黑龙江省高校中位居第三名。1你的喜悦&#xff0c;我们的欣慰# 2020年全国大学生数学建模竞赛于9月…

Python 面试总结

公司面试&#xff1a; 1&#xff0c;说说项目都用到了什么技术&#xff1f; 2&#xff0c;mysql索引的种类&#xff1f; 3&#xff0c;索引建多有什么不好&#xff1f; 4&#xff0c;mysql的引擎有什么&#xff1f; 5&#xff0c;redis是单线程还是多线程的? 6, redis的持久化…

医疗器械监管系统总结

算算时间毕业也两个多月了&#xff0c;心也慢慢塌下来了&#xff0c;少了些许的浮躁&#xff0c;增加了些许的淡定&#xff0c;同时也添加了一些不好的习气&#xff0c;“混”&#xff0c;混日子的混&#xff0c;生活慢慢的缺少了激情&#xff0c;伴随着和她渐渐的疏远。昨天听…

fn映射 mac 键盘_【新鲜评测】高颜值、低延迟、多模式跨平台办公神器-米物蓝牙键盘...

首先&#xff0c;要例行感谢糖纸众测&#xff0c;感谢麻麻酱给我这次评测机会。大家可以微信搜索【糖纸】小程序免费体验更多科技产品。小米旗下生态链公司米物最近出了一款蓝牙双模键盘&#xff0c;它作为一个85全键键盘&#xff0c;可以完成蓝牙和USB转换&#xff0c;以及PC和…

leetcode413. 等差数列划分(动态规划)

数组 A 包含 N 个数&#xff0c;且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q)&#xff0c;P 与 Q 是整数且满足 0<P<Q<N 。 如果满足以下条件&#xff0c;则称子数组(P, Q)为等差数组&#xff1a; 元素 A[P], A[p 1], …, A[Q - 1], A[Q] 是等差的。并且 …

(转发)python3用matplotlib绘图出现中文乱码的问题

from pandas import Series,DataFrame import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei] 字体的选择如下&#xff1a; 黑体 SimHei微软雅黑 Microsoft YaHei微软正黑体 Microsoft JhengHei新宋体 NSimSun新细明体 PMingLiU细明…

小程序 input 换行_小程序 input双向数据绑定

小程序 双向绑定数据&#xff08;单个&#xff09;<小程序 双向绑定数据&#xff08;多个&#xff09;<

平面设计 前端_我如何在5个月内从平面设计师过渡到前端开发人员

平面设计 前端2017 was a bumpy yet exciting year for me. I left my graphic designer job in March, and entered the maze of the coding world. Five months later, I finally got a job as a front-end developer at Tenten.co.2017年对我来说是坎a而又令人兴奋的一年。 …

logstash5.x改变

5.x版本 logstash中 elasticsearch插件的workers&#xff0c;无法配置大于1&#xff0c;会提示 This plugin uses the shared and doesnt need this option 这个的意思是进到logstash本身的配置文件pipeline.output.workers。 不要一开始就修改workers个数。这也许是一个误区。…

Suricata的初始化脚本

见官网 https://suricata.readthedocs.io/en/latest/initscripts.html

jpa在自己创建表的是字段名不一致_用 数据透视表 完成 Excel多表合并

一般情况下&#xff0c;数据透视表只能汇总一个表格中的数据。即使使用多区域汇总&#xff0c;也只能对多表的单列内容进行数据汇总&#xff0c;而多列却无法实现。前段时间也推送过Power Query的方法&#xff0c;但它有版本限制。而今天宏兴会计培训小编推送的是一个通用的多表…

python根据数据生成图像_从三个numpy数组生成图像数据

首先&#xff0c;您应该运行以下代码&#xff1a;import numpy as npX np.asarray()Y np.asarray()Z np.asarray()Xu np.unique(X)Yu np.unique(Y)然后您可以应用以下任何一种方法。值得注意的是&#xff0c;即使数据没有被分类(与目前接受的答案相反)&#xff0c;所有这些…

leetcode120. 三角形最小路径和(动态规划)

**给定一个三角形&#xff0c;找出自顶向下的最小路径和。**每一步只能移动到下一行中相邻的结点上。 相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点。 例如&#xff0c;给定三角形&#xff1a; [ [2], [3,4], [6,5,7], [4,1,…

Bootstrap教程:学习构建第一个Bootstrap 4网站

快速教程&#xff0c;可帮助您快速掌握最新版本的Bootstrap。 (A quick tutorial to get you up to speed with the latest version of Bootstrap.) In my opinion, the best way to learn a new technology is often to start building stuff from day one. This gives a sens…

使用栈实现队列 Implement Queue using Stacks

为什么80%的码农都做不了架构师&#xff1f;>>> 问题&#xff1a; Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of queue.pop() -- Removes the element from in front of queue.peek() -- Get the front…

Java利用POI生成Excel强制换行

前一段时间在做一个学校排课系统时&#xff0c;有一个地方需要利用把课程表生成excel汇出给客户&#xff0c;由于之前用excel都只是简单的应用&#xff0c;在单元格里都是用自动换行&#xff0c;而这次可能需要用到手动强制换行。 于是我在网上找了一下&#xff0c;网上找到的文…