《百面机器学习》读书笔记(八)-采样

全部笔记的汇总贴:《百面机器学习》-读书笔记汇总

采样在机器学习中有着非常重要的应用:它可以将复杂的分布简化为离散的样本点;可以用重采样对样本集进行调整以更好地适应后期的模型学习;可以用于随机模拟以进行复杂模型的近似求解或推理。

对于一些简单的分布,如均匀分布、高斯分布等,很多编程语言里面都有直接的采样函数。然而,即使是这些简单分布,其采样过程也并不是显而易见的,仍需要精心设计。对于比较复杂的分布,往往并没有直接的采样函数可供调用,这时就需要其他更加复杂的采样方法。因此,对采样方法的深入理解是很有必要的。

一、采样的作用

采样是从特定的概率分布中抽取对应的样本点。

  • ★★☆☆☆ 举例说明采样在机器学习中的应用。

采样本质上是对随机现象的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件。采样可以让人们对随机事件及其产生过程有更直观的认识。例如,通过对二项分布的采样,可以模拟“抛硬币出现正面还是反面”这个随机事件,进而模拟产生一个多次抛硬币出现的结果序列,或者计算多次抛硬币后出现正面的频率。
另一方面,采样得到的样本集也可以看作是一种非参数模型,即用较少量的样本点(经验分布)来近似总体分布,并刻画总体分布中的不确定性。从这个角度来说,采样其实也是一种信息降维,可以起到简化问题的作用。例如,在训练机器学习模型时,一般想要优化的是模型在总体分布上的期望损失(期望风险),但总体分布可能包含无穷多个样本点,要在训练时全部用上几乎是不可能的,采集和存储样本的代价也非常大。
因此,一般采用总体分布的一个样本集来作为总体分布的近似,称之为训练集,训练模型的时候是最小化模型在训练集上损失函数(经验风险)。同理,在评估模型时,也是看模型在另外一个样本集(测试集)上的效果。这种信息降维的特性,使得采样在数据可视化方面也有很多应用,它可以帮助人们快速、直观地了解总体分布中数据的结构和特性。
此外,很多模型由于结构复杂、含有隐变量等原因,导致对应的求解公式比较复杂,没有显式解析解,难以进行精确求解或推理。在这种情况下,可以利用采样方法进行随机模拟,从而对这些复杂模型进行近似求解或推理。这一般会转化为某些函数在特定分布下的积分或期望,或者是求某些随机变量或参数在给定数据下的后验分布等。

二、均匀分布随机数

均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的。根据样本空间是否连续,又分为离散均匀分布和连续均匀分布。均匀分布可以算作是最简单的概率分布。从均匀分布中进行采样,即生成均匀分布随机数,几乎是所有采样算法都需要用到的基本操作。

  • ★☆☆☆☆ 如何编程实现均匀分布随机数生成器?

首先需要明确的是,计算机程序都是确定性的,因此并不能产生真正意义上的完全均匀分布随机数,只能产生伪随机数(伪随机数是指这些数字虽然是通过确定性的程序产生的,但是它们能通过近似的随机性测试)。另外,由于计算机的存储和计算单元只能处理离散状态值,因此也不能产生连续均匀分布随机数,只能通过离散分布来逼近连续分布(用很大的离散空间来提供足够的精度)。
由计算机程序实现的随机数生成器产生的都是伪随机数,真正的随机数只会存在于自然界的物理现象中,比如放射性物质的衰变,温度、气流的随机扰动等。

三、常见的采样方法

对于一个随机变量,通常用概率密度函数来刻画该变量的概率分布特性。具体来说,给定随机变量的一个取值,可以根据概率密度函数来计算该值对应的概率(密度)。反过来,也可以根据概率密度函数提供的概率分布信息来生成随机变量的一个取值,这就是采样。因此,从某种意义上来说,采样是概率密度函数的逆向应用。

  • ★★★☆☆ 抛开那些针对特定分布而精心设计的采样方法,说一些你所知道的通用采样方法或采样策略,简单描述它们的主要思想以及具体操作步骤。

几乎所有的采样方法都是以均匀分布随机数作为基本操作。
对于一些简单的分布,可以直接用均匀采样的一些扩展方法来产生样本点,比如有限离散分布可以用轮盘赌算法来采样。然而,很多分布一般不好直接进行采样,可以考虑函数变换法。

  • 逆变换采样(Inverse Transform Sampling)

从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)产生一个随机数 u i u_i ui
计算 x i = Φ − 1 ( u i ) x_i=\Phi^{-1}(u_i) xi=Φ1(ui),其中 Φ − 1 ( ⋅ ) \Phi^{-1}(\cdot) Φ1()是累积分布的逆函数。

  • 接受/拒绝采样(Accept-Reject Sampling)

从参考分布 q ( x ) q(x) q(x)中随机抽取一个样本 x i x_i xi
从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)产生一个随机数 u i u_i ui
如果 u i < p ( x i ) M q ( x i ) u_i<\frac{p(x_i)}{M q(x_i)} ui<Mq(xi)p(xi),则接受样本 x i x_i xi;否则拒绝,重新进行步骤,直到新产生的样本 x i x_i xi被接受。

  • 重要性重采样(Sampling-Importance Re-sampling, SIR)

先在从参考分布 q ( x ) q(x) q(x)中抽取N个样本 { x i } \{x_i\} { xi},然后按照它们对应的重要性权重 { w ( x i ) } \{w(x_i)\} { w(xi)}对这些样本进行重新采样(这是一个简单的针对有限离散分布的采样),最终得到的样本服从目标分布 p ( x ) p(x) p(x)

  • 马尔可夫蒙特卡洛采样法

常见的有Metropolis-Hastings采样法和吉布斯采样法。

四、高斯分布的采样

高斯分布,又称正态分布,是一个在数学、物理及工程领域都非常重要的概率分布。

  • ★★★☆☆ 如何对高斯分布进行采样?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、马尔科夫蒙特卡洛采样法

在高维空间中,拒绝采样和重要性重采样经常难以寻找合适的参考分布,采样效率低下(样本的接受概率小或重要性权重低),此时可以考虑马尔可夫蒙特卡洛(Markov Chain Monte Carlo,MCMC)采样法。MCMC采样法是机器学习中非常重要的一类采样算法,起源于物理学领域,到20世纪80年代后期才在统计学领域产生重要影响。它可以用于很多比较复杂的分布的采样,并且在高维空间中也能使用。

  • ★☆☆☆☆ 简述MCMC采样法的主要思想。

从名字看,MCMC采样法主要包括两个MC,即蒙特卡洛法(Monte Carlo)和马尔可夫链(Markov Chain)。蒙特卡洛法是指基于采样的数值型近似求解方法,而马尔可夫链则用于进行采样。MCMC采样法基本思想是:针对待采样的目标分布,构造一个马尔可夫链,使得该马尔可夫链的平稳分布就是目标分布;然后,从任何一个初始状态出发,沿着马尔可夫链进行状态转移,最终得到的状态转移序列会收敛到目标分布,由此可以得到目标分布的一系列样本。在实际操作中,核心点是如何构造合适的马尔可夫链,即确定马尔可夫链的状态转移概率,这涉及一些马尔可夫链的相关知识点,如时齐性、细致平衡条件、可遍历性、平稳分布等。

  • ★★☆☆☆ 简单介绍几种常见的MCMC采样法。

MCMC采样法的核心点是构造合适的马尔可夫链,不同的马尔可夫链对应着不同的MCMC采样法,常见的有Metropolis-Hastings采样法和吉布斯采样法。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • ★★☆☆☆ MCMC采样法如何得到相互独立的样本?

与一般的蒙特卡洛算法不同,MCMC采样法得到的样本序列中相邻的样本不是独立的,因为后一个样本是由前一个样本根据特定的转移概率得到的,或者有一定概率就是前一个样本。如果仅仅是采样,并不需要样本之间相互独立。如果确实需要产生独立同分布的样本,可以同时运行多条马尔可夫链,这样不同链上的样本是独立的;或者在同一条马尔可夫链上每隔若干个样本才选取一个,这样选取出来的样本也是近似独立的。

六、贝叶斯网络的采样

概率图模型经常被用来描述多个随机变量的联合概率分布。贝叶斯网络,又称信念网络或有向无环图模型。它是一种概率图模型,利用有向无环图来刻画一组随机变量之间的条件概率分布关系。

  • ★★★☆☆ 如何对贝叶斯网络进行采样?如果只需要考虑一部分变量的边缘分布,如何采样?如果网络中含有观测变量,又该如何采样?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、不均衡样本集的重采样

在训练二分类模型时,例如医疗诊断、网络入侵检测、信用卡反诈骗等,经常会遇到正负样本不均衡的问题。对于很多分类算法,如果直接采用不均衡的样本集来进行训练学习,会存在一些问题。例如,如果正负样本比例达到1∶99,则分类器简单地将所有样本都判为负样本就能达到99%的正确率,显然这并不是我们想要的,我们想让分类器在正样本和负样本上都有足够的准确率和召回率。

  • ★★★☆☆ 对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好地训练分类模型?

为什么很多分类模型在训练数据不均衡时会出现问题?本质原因是模型在训练时优化的目标函数和人们在测试时使用的评价标准不一致。这种“不一致”可能是由于训练数据的样本分布与测试时期望的样本分布不一致,例如,在训练时优化的是整个训练集(正负样本比例可能是1∶99)的正确率,而测试时可能想要模型在正样本和负样本上的平均正确率尽可能大(实际上是期望正负样本比例为1∶1);也可能是由于训练阶段不同类别的权重(重要性)与测试阶段不一致,例如训练时认为所有样本的贡献是相等的,而测试时假阳性样本(False Positive)和伪阴性样本(False Negative)有着不同的代价。
解决方法有两种。

  • 基于数据的方法:对数据进行重采样,使原本不均衡的样本变得均衡。

最简单的处理不均衡样本集的方法是随机采样。采样一般分为过采样(Over-sampling)和欠采样(Under-sampling)。
直接的随机采样虽然可以使样本集变得均衡,但会带来一些问题,比如,过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度,同时也容易造成过拟合;欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了整体模式的一部分。
过采样:SMOTE算法、Borderline-SMOTE算法、 ADASYN算法
欠采样:Easy Ensemble算法、Balance Cascade算法、NearMiss(利用K近邻信息挑选具有代表性的样本)、One-sided Selection(采用数据清理技术)等算法。

  • 基于算法的方法:在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性;当样本数目极其不均衡时,也可以将问题转化为单类学习(one-class learning)、异常检测(anomaly detection)。

下一章传送门:《百面机器学习》读书笔记(九)-前向神经网络

猜你喜欢

转载自blog.csdn.net/qq_41485273/article/details/113744921