前言
如果你能找到这里,真是我的幸运~这里是蓝白绛的学习笔记,本集合主要针对《百面机器学习——算法工程师带你去面试》这本书。主要记录我认为重要的知识点,希望对大家有帮助。
第八章 采样
4、高斯分布的采样
- 高斯分布用逆变换法采样,基本操作步骤为:
(1) 产生上的均匀分布随机数。
(2) 令,则服从标准正态分布。其中是高斯误差函数,它是标准正态分布的累积分布函数经过简单平移和拉伸变换后的形式,定义如下:上述变换法需要求解的逆函数,但这并不是一个初等函数,没有显式解,计算起来比较麻烦。
为了避免这种非初等函数的求逆操作,Box-Muller算法提出了如下解决方案:单个高斯分布的累积分布函数不好求逆,那么尝试两个独立的高斯分布的联合分布。假设是两个服从标准正态分布的独立随机变量,他们的联合概率密度为:考虑在圆盘上的概率,通过极坐标变换将转化为,可以很容易求得二重积分,上式变为:这里可以看作是极坐标中的累积分布函数,计算公式简单,逆函数容易求,可以用逆变换方法对进行采样,在上对进行均匀采样,这样就得到了,对它进行坐标变换就可以得到符合标准正态分布的。采样过程如下:
(1) 产生[0,1]上的两个独立的均匀分布随机数。
(2) 令,则服从标准正态分布,并且相互独立。
Box-Muller算法由于需要计算三角函数,相对来说比较耗时,Marsaglia polar method方法可以避开三角函数计算,更快。 - 高斯分布用拒绝采样法采样:考虑到高斯分布的特性,这里用指数分布来作为参考分布。指数分布的累积分布及其逆函数都比较容易求解。
由于指数分布的样本空间为,而标准正态分布的样本空间为,因此还需要利用正态分布的对称性来在半坐标轴和全坐标轴之间转化。取的指数分布作为参考分布,其密度函数为累积分布函数为:密度函数的逆函数为利用逆变换法很容易得到指数分布的样本,然后再根据拒绝采样法来决定是否接受该样本,接受概率为其中是标准正态分布压缩到正半轴后的概率密度,常数因子需要满足如下条件:实际应用中需要尽可能小,这样每次接受的概率大,采样效率更高。可取计算后得到的接受概率具体采样过程如下:
(1) 产生上的均匀分布随机数,计算得到指数分布的样本。
(2) 再产生上的均匀分布随机数,若,则接受,进入下一步;否则拒绝,到(1)步骤重新采样。
(3) 最后再产生上的均匀分布随机数,若,则将转化为,否则保持不变;由此最终得到标准正态分布的一个样本。
拒绝采样法的效率取决于接受概率的大小,参考分布与目标分布越接近,则采样效率越高。Ziggurat算法本质也是拒绝采样,但采用多个阶梯矩形来逼近目标分布,更高效。
5、马尔可夫蒙特卡洛采样法
- 在高维空间中,拒绝采样和重要性重采样经常难以寻找合适的参考分布,采样效率低下(样本的接受概率小或重要性权重低),此时可以考虑马尔可夫蒙特卡洛(Markov Chain Monte Carlo,MCMC)采样法。
- MCMC采样法主要包括两个MC,即蒙特卡洛法(Monte Carlo)和马尔可夫链(Markov Chain)。蒙特卡洛法是指基于采样的数值型近似求解方法,而马尔可夫链则用于采样。
- MCMC采样法的基本思想:针对待采样的目标分布,构造一个马尔可夫链,使得该马尔可夫链的平稳分布就是目标分布;然后从任何一个初始状态出发,沿着马尔可夫链进行状态转移,最终得到的状态转移序列会收敛到目标分布,由此可以得到目标分布的一系列样本。
- 在实际操作中,核心点是如何构造合适的马尔可夫链,即确定马尔可夫链的状态转移概率,涉及马尔可夫链的相关知识,如时齐性、细致平衡条件、可遍历性、平稳分布等。不同的马尔可夫链对应着不同的MCMC采样法,常见的有Metropolis-Hastings采样法和吉布斯采样法。
- 与一般的蒙特卡洛算法不同,MCMC采样法得到的样本序列中相邻的样本不是独立的,因为后一个样本是由前一个样本根据特定的转移概率得到的,或者有一定概率就是前一个样本。如果仅仅是采样,并不需要样本之间相互独立。如果确实需要产生独立同分布的样本,可以同时运行多条马尔可夫链,这样不同链上的样本是独立的。或者在同一条马尔可夫链上每隔若干个样本才取一个,这样的样本也是近似独立的。
6、贝叶斯网络的采样
- 概率图模型经常被用来描述多个随机变量的联合概率分布。贝叶斯网络又称信念网络或有向无环图模型。它是一种概率图模型,利用有向无环图来刻画一组随机变量之间的条件概率分布关系。
-
对没有观测变量的贝叶斯网络进行采样,最简单的方法是祖先采样(Ancestral Sampling),核心思想是根据有向图的顺序,先对祖先节点进行采样,只有当某个节点的所有父节点都已完成采样,才对该节点进行采样。根据贝叶斯网络的全概率公式可以看出祖先采样得到的样本服从贝叶斯网络的联合概率分布。
如果只需要对贝叶斯网络中一部分随机变量的边缘分布进行采样,可以用祖先采样先对全部随机变量进行采样,然后直接忽视那些不需要的变量的采样值即可。
例如,如果需要对边缘分布进行采样,先用祖先采样得到全部变量的一个样本,如(Cloudy=T, Sprinkler=F, Rain=T, WetGrass=T),然后忽略掉无关变量,直接把这个样本看成Cloudy=T即可。 -
对有观测变量的贝叶斯网络进行采样,最直接的方法是逻辑采样,还是利用祖先采样得到所有变量的取值。如果这个样本在观测变量上的采样值与实际观测值相同,则接受,否则拒绝,重新采样。
这种方法的缺点是采样效率非常低,随着观测变量个数增加,每个变量状态数目的上升,逻辑采样的效率急剧下降,实际中基本不可用。
在实际中可以参考重要性采样的思想,不再对观测变量进行采样,只对非观测变量采样,但是最终得到的样本需要附一个重要性权值:其中是观测变量集合。则中采样方法称作似然加权采样(Likelihood Weighted Samping),产生的样本权值可以用于后续的积分操作。
- 除此之外还可以用MCMC采样法进行采样。
(1) 如果用Metropolis-Hastings采样法,只需要在随机向量(Cloudy,Rain)上选择一个概率转移矩阵,然后按照概率转移矩阵不断进行状态转换,每次转移有一定概率的接受或拒绝,最终得到的样本序列会收敛到目标分布。最简单的概率转移矩阵可以是:每次独立地随机选择(Cloudy, Rain)的四种状态之一。
(2) 如果用吉布斯采样法,根据条件概率(Clody|Rain, Sprinkler, WetGrass)和(Rain|Cloudy, Sprinkler, WetGrass),每次只对(Cloudy, Rain)中的一个变量进行采样,交替进行即可。
7、不均衡样本集的重采样
- 基于数据的方法处理样本不均衡问题,最简单的方法是随机采样。采样一般分为过采样(Over-sampling)和欠采样(Under-Sampling)。随机过采样是从少数类样本集中随机重复抽取样本(有放回)以得到更多样本;随机欠采样是从多数类样本集中随机选取较少的样本(有放回或无放回)。
过采样的缺点:对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度,容易造成过拟合。
欠采样的缺点:会丢弃一些样本,可能损失部分有用信息,造成模型只学到了整体模式的一部分。 -
SMOTE算法在过采样时不是简单地复制样本,而是采用一些方法生成新样本。SMOTE算法对少数类样本集中的每个样本,从它在的少数类样本集中的近邻中随机选一个样本,然后在的连线上随机选取一点作为新合成的样本。
SMOTE算法的缺点:为每个少数类样本合成相同数量的新样本,可能会增大类间重叠度,并且会生成一些不能提供有益信息的样本。
SMOTE算法的改进算法:Borderline-SMOTE、ADASYN等。Borderline-SMOTE只给那些处在分类边界上的少数类样本合成新样本。ADASYN则给不同的少数类样本合成不同个数的新样本。此外,还可以采用一些数据清理方法(如基于Tomek Links)来进一步降低合成样本带来的类间重叠,以得到更加良定义的类簇,从而更好地训练分类器。 - Informed Undersampling可以解决欠采样带来的数据丢失问题。常见的Informed Undersampling算法有:Easy Ensemble、Balance Cascade、NearMiss、One-sided Selection等算法。
(1) Easy Ensemble:每次从多数类样本集中随机抽取一个子集,然后用和训练一个分类器,重复若干次,将多个分类器结果融合。
(2) Balance Cascade:级联结构,在每一级中从多数类中随机抽取子集,然后用和训练该级分类器;然后将中能够被当前分类器正确判断的样本剔除掉,继续下一级操作,重复若干次得到级联结构,将分类器结果融合。
(3) NearMiss:利用近邻信息挑选具有代表性的样本。
(4) One-sided Selection:采用数据清理技术。
实际应用中,具体的采样操作可能并不总是如上述几个算法一样,但是思路一致。例如,基于聚类的采样方法,利用数据的类簇信息来指导过采样或欠采样操作;数据扩充方法也是一种过采样,对少数类样本进行一些噪声扰动或变换以构造出新样本;Hard Negative Mining则是一种欠采样,把比较难的样本抽出来用于迭代分类器。 - 基于算法的处理样本不均衡问题的方法:可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性;当样本数据及其不均衡时,也可以将问题转化为单类学习(one-class learning)、异常检测(anomaly detection)等。
小结
这是本章的第二部分,讲了高斯分布的逆变换采样和拒绝采样、马尔可夫蒙特卡洛采样、贝叶斯网络的采样以及处理不均衡数据集的各种采样方法。除了SMOTE算法比较熟以外,其余的又是把书抄了一遍。
结尾
如果您发现我的文章有任何错误,或对我的文章有什么好的建议,请联系我!如果您喜欢我的文章,请点喜欢~*我是蓝白绛,感谢你的阅读!