1. 什么是采样
我们知道了一个变量的分布,要生成一批服从这个分布的样本,这个过程就叫采样。
听起来好像很简单,对一些简单的分布函数确实如此,比如,均匀分布、正太分布,但只要分布函数稍微复杂一点,采样这个事情就没那么简单了。
2. 为什么要采样
在讲具体的采样方法之前,有必要弄清楚采样的目的。为什么要采样呢?有人可能会这样想,样本一般是用来估计分布参数的,现在我都知道分布函数了,还采样干嘛呢?其实采样不只是可以用来估计分布参数,还有其他用途,比如说用来估计分布的期望、高阶动量等。其实在机器学习中,采样的主要用途是用来估计某个函数在某个分布上的期望,比如在EM算法中,计算E步的时候,已知隐变量的分布,用采样的方法估计对数似然的期望。
3.采样的作用
采样本质上是对随机线性的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件。也可以理解为用较少的样本点来近似总体分布,可以算是一种信息降维。
可以快速了解总体分布中数据的结构和特性。
通过重采样可以充分利用已有数据集,挖掘更多信息,如自助法,刀切法。
4. 常用的采样方法
几乎所有的采样方法都是以均匀分布随机数作为基本操作的。
逆变换采样法:第一步,从均匀分布中产生一个随机数;第二步,根据一个累计分布函数的逆函数进行计算。如果待采样的目标分步的累计分布函数的逆函数无法求得或不易求,则不适合使用逆变换采样法。
拒绝采样:接受/拒绝采样,对于目标分布p(x),选取一个容易采样的参考分布q(x),使得对于任意p(x)都小于等于M*q(x)。第一步,从参考分布q(x)中随机抽取一个样本;第二步,从均匀分布中产生一个随机数;第三步,如果 [公式] 大于随机数,则接受样本,如果小于则拒绝样本。
自适应拒绝采样:在目标函数是对数凹函数时,用分段函数来覆盖目标分布的对数。
重要性采样:就是用于计算函数在目标分布上的积分,如果只想从目标分布中采样出若干样本,可以使用重要性重采样。
在实际应用中,高维空间的随机向量,拒绝采样和重要性重采样经常难以找到合适的参考分布,采样效率比较低,可以考虑马尔科夫蒙特卡罗采样法。
5. 基本采样方法
首先,最基本的方法是变换法,大概思想是这样的,比如我们要对分布a采样,但是只有分布b的采样器,我们可以通过对b采样的结果进行一些变换,使变换后的结果服从分布a,举个例子,对0到1的均匀分布的结果进行tan函数变换得到的结果就服从柯西分布,大家可以试想下怎么变换能得到指数分布和高斯分布。
5.1 高斯分布的采样
逆变换法:第一步,生成均匀分布随机数;第二步,把随机数带入一个服从正态分布的公式。也可以用Box-Muller算法生成两个独立的均匀分布的随机数,计算三角函数。还可以用Marsaglia polar method加速运算。
拒绝采样法:先模拟一个均匀分布的随机数,并得到指数分布样本;再产生另一个随机数,进行比较,大于这个随机数接受,小于拒绝,并回到上一步重新采样;最后再生产一个随机数,随机数小于0.5,转换为负,大于0.5,保持不变。有时效率会比较低,可以用Ziggurat算法提高效率。
5.2 马尔科夫链蒙特卡洛采样(Markov Chain Monte Carlo)
马尔科夫蒙特卡罗MCMC,蒙特卡罗是指基于采样的数值型近似求解方法,马尔科夫链则用于采样。
要理解MCMC,有几个关键要点:
MCMC基本思想,针对待采样目标分布,构造一个马尔科夫链,使得该马尔科夫链的平稳分布就是目标分布,然后从任何一个初始状态出发,沿着马尔科夫链进行状态转移,最终得到的状态转移序列会收敛到目标分布,由此可以得到目标分布的一系列样本。
几种常见的MCMC
Metropolis-Hastings采样法:第一步,随机选一个初始样本;第二步,比较参考条件分布与随机数的大小,并进行赋值。
吉布斯采样法:每次只对样本的一个维度进行采样和更新。随机选择初始状态,每次更新一个维度,多次后形成新样本。
吉布斯采样的牛逼之处在于只需要知道条件概率的分布,便可以通过采样得到联合概率分布的样本,LDA的求解可以说是吉布斯采样的一个绝妙应用例子,通过采样的方法就完成了整个模型的求解,确实很巧妙。另一个很好的例子是玻尔兹曼机的训练,哪天有时间把这两个例子展开讲讲。
MCMC采样如何得到相互独立的样本
可以同时运行多条马尔科夫链,或者在一条马尔科夫链上间隔几个样本才选一个。
5.3 贝叶斯网络的采样
祖先采样:根据有向图的顺序,先对祖先节点进行采样,只有当某个节点的所有父节点都已完成采样,才对该节点进行采样。
逻辑采样:利用祖先采样的取值,如果这个取值与观测值相同,则接受,否则拒绝,重新采样。采样效率可能很低。实际中参考重要性采样的思想,不再对观测变量进行采样,只对非观测变量进行采样。
MCMC采样法:在随机向量上选择一个概率转移矩阵,按照概率转移矩阵不断进行状态转移,每次转移有一定概率接受或拒绝,最终得到的样本序列会收敛到目标分布。
5.4 不均衡样本集的重采样
(1)基于数据的方法
对数据进行重采样,是原本不均的样本变得均匀。具体方法:过采样和欠采样。
过采样会造成过拟合,欠采样会损失部分有用信息。
对此改进,SMOTE算法,对少数类样本集中的每个样本,从它到K个近邻中随机选一个样本点,然后在连线上随机选一个点作为新合成的样本。可以降低过拟合风险。但可能会增大类间重叠度,并且会生成一些不能提供有益信息的样本。
再改进,Borderline-SMOTE算法,只给那些处在分类边界上的少数类样本合成新样本;ADASYN算法,给不同的少数类样本合成不同个数的新样本。
欠采样,改进算法有Easy Ensemble算法、Balance Cascade算法、NearMiss、One-sided Selection
(2)基于算法的方法
在样本不均衡时,可以通过改变模型训练时的目标函数来矫正不平衡性;当样本数目极其不平衡时,也可以将问题转化为单类学习、异常检测。
https://zhuanlan.zhihu.com/p/46096712
https://zhuanlan.zhihu.com/p/125648419