Hulu机器学习系列按时来报到~
快搬好小板凳,一起来学习吧
今天的主题是
【采样】
引言
古人有云:“知秋一叶,尝鼎一脔”,其中蕴含的就是采样思想。采样,就是根据特定的概率分布产生对应的样本点。对于一些简单的分布(如均匀分布、高斯分布),-很多编程语言里面都有直接的采样函数。然而,即使是这种简单的分布,其采样过程也并不是显而易见,需要精心设计;对于比较复杂的分布,往往并没有直接的采样函数可供调用,这时候就需要其它更加复杂的采样方法。因此,对采样方法的深入理解是很有必要的。
采样在机器学习中有着重要的应用,它可以将复杂的分布简化为离散的样本点,可以对样本集进行调整(重采样)以更好地适应后续的模型学习,或者用于随机模拟以进行复杂的模型求解。
在“采样”这个系列中,我们会通过不同的问题与解答,来展现机器学习中的采样知识,包括采样方法(直接采样、接受/拒绝采样、重要性采样、MonteCarlo采样等)、采样的应用,以及采样在一些算法中的具体实现。今天,我们以采样在训练数据不均衡时的应用来开始我们的“采样”系列。
“不均衡样本集的处理”
场景描述
在训练二分类模型时,经常会遇到正负样本不均衡的问题,例如医疗诊断、网络入侵检测、信用卡反诈骗等。对于很多分类算法,如果直接采用不均衡的样本集来进行训练学习,会存在一些问题。例如,如果正负样本比例达到1:99,则分类器简单地将所有样本都判为负样本就能达到99%的正确率,显然这并不是我们想要的,我们想让分类器在正样本和负样本上都有足够的准确率和召回率。
问题
对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好地训练分类模型?
背景知识:机器学习,概率统计
解答与分析
为什么很多分类模型在训练数据不均衡时会出现问题?本质原因是模型在训练时优化的目标函数和人们在测试时使用的评价标准不一致。这种“不一致”可能是由于训练数据的样本分布与测试时期望的样本分布不一致,例如,在训练时优化的是在整个训练集(正负样本比例可能是1:99)上的正确率,而测试时可能想要模型在正样本和负样本上的平均正确率尽可能大(实际上是期望正负样本比例为1:1);也可能是训练阶段不同类别的权重(重要性)与测试阶段不一致,例如训练时认为所有样本的贡献是相等的,而测试时 False Positive和False Negative有着不同的代价。
根据上述分析,一般可以从两个角度来处理样本不均衡问题:
1)基于数据的方法:主要是对数据进行重采样,使原本不均衡的样本变得均衡。
直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题:过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度,同时也容易造成过拟合;欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了整体模式的一部分。
SMOTE算法为每个少数类样本合成相同数量的新样本,这可能会增大类间重叠度,并且会生成一些不能提供有益信息的样本。为此出现Borderline-SMOTE、ADASYN等改进算法:Borderline-SMOTE只给那些处在分类边界上的少数类样本合成新样本,而ADASYN则给不同的少数类样本合成不同个数的新样本。此外,还可以采用一些数据清理方法(如基于TomekLinks)来进一步降低合成样本带来的类间重叠,以得到更加well-defined的类簇,从而更好地训练分类器。
SMOTE算法
在实际应用中,具体的采样操作可能并不总是如上述几个算法一样,但基本思路很多时候还是一致的。例如,基于聚类的采样方法,利用数据的类簇信息来指导过采样/欠采样操作;经常用到的数据扩充 (data augmentation) 方法也是一种过采样,对少数类样本进行一些噪音扰动或变换(如图像数据集中对图片进行裁剪、翻转、旋转、加光照等)以构造出新的样本;而Hard Negative Mining则是一种欠采样,把比较难的样本抽出来用于迭代分类器。
2)基于算法的方法:在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性;当样本数目极其不均衡时,也可以将问题转化为one-class learning / anomalydetection。本节主要关注采样,不再细述这些方法(我们会在其它章节的陆续推送相关知识点)。
扩展与总结
在实际面试时,这道题还有很多可扩展的知识点。例如,模型在不均衡样本集上的评价标准(可以参考“Hulu机器学习问题与解答系列”的第一弹:模型评估);不同样本量(绝对数值)下如何选择合适的处理方法(考虑正负样本比例为1:100和1000:100000的区别);代价敏感学习和采样方法的区别、联系以及效果对比等。
参考文献
[1] H. He and E. A. Garcia, "Learning from Imbalanced Data," in IEEE Transactions on Knowledge and Data Engineering, vol. 21, no. 9, pp. 1263-1284, Sept. 2009.
下一题预告
【余弦距离】
场景描述
在机器学习中,我们常将特征表达为向量的形式。在近年来的研究中,将高维稀疏的研究对象表示为低维分布的向量形式,极大地提高了各类模型的效果。在分析两个向量之间的相似性时,常使用余弦相似度来表示,余弦相似度的范围是[-1,1],此时相同的两个向量,相似度为1。而如果希望得到类似距离的表示,将1减余弦相似度即为余弦距离,相同的两个向量余弦距离为0。
问题描述
问题1: 结合你的学习和研究经历,探讨为什么要在一些场景使用余弦相似度而不是欧式距离?
问题2: 余弦距离是否是一个严格定义的距离?