机器学习(六)——采样

采样

采样的作用

采样的本质是随机现象的模型,根据给定的概率分布,来模拟产生一些随机时间.
另一方面,采样得到的样本集也可以看作是是一种非参数模型,即用较少量的样本点(经验分布)来近似总体分布,并刻画总体分布中的不确定性. 从这个角度来说,采样其实也是一种信息降维,可以起到简化问题的作用。

对当前的数据集进行重采样,可以充分利用已有的数据集,挖掘更多信息,如自助法和刀切法,通过对严格不能多次重采样来估计统计量的偏差、方差等.另外,利用重采样,可以在保持特定的信息下(目标信息不丢失),有意识地改变样本的分布,以更适应后续的模型训练和学习,例如利用重采样类处理分类模型的训练样本不均衡.

此外,许多模型由于 结构复杂、含有隐变量 等原因,导致对应的求解公式比较复杂,没有显式解析解,难以进行精确求解或推理。在这种情况下,可以利用采样方法进行随机模拟,从而对这些复杂模型进行近似求解或推理. 一般会转化为某些含糊在特定分布下的积分或期望,或者是求某些随机变量或者参数在给定数据下的后验分布等.

常见的采样方法

很多分布一般不好直接进行采样,可以考虑函数变换法.一般地,如果随机变量x和u存在变换关系$u=\phi(x)$,则它们地概率密度函数有如下关系:

因此,如果从目标分布p(x)中不好采样x,可以构造一个变换$u=\phi(x)$,使得从变换后地分布p(u)中采样u比较容易,这样可以通过对u进行采样然后通过反函数$x=\phi^{-1}(u)$来间接得到x.如果是高维空间地随机变量,则$\phi’(x)$对应Jacobian行列式.

拒绝采样

pic1
拒绝采样顾名思义会存在拒绝操作,但一定不是所有都拒绝,因此一定存在这一个拒绝率的问题.
假定现有一个分布p(x),但其非常复杂,我们不太容易直接对p(x)分布进行采样,找到一个比较容易地分布q(x),使得对于任意x都有p(x)≤Mq(x),显然这里是选取了一个合适的包络函数Mq(x)使其覆盖了p(x).
按如下过程进行采样:

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

重要性采样

很多时候,采样的最终目的并不是为了得到样本,而是为了进行一些后续任务,如预测变量取值,这通常表现为一个求$\underline{函数期望}$的形式
重要性采样就是用于计算函数f(x)在目标分布p(x)上的积分(函数期望),即

首先,找出一个比较容易抽样的参考分布q(x),并令$w(x)=\frac{p(x)}{q(x)}$,则有

这里w(x)可以看成是样本x的重要性权重.由此,可以先从参考分布q(x)中抽取N个样本{x_i},然后利用如下公式估计E[f]:

如果不需要计算函数积分,只想从目标分布p(x)中采样出若干样本,则可以用重要性重采样(Sampling-Importance Re-sample).先从参考分布q(x)中抽取N个样本$\{x_i\}$,然后按照它们对应的重要性权重$\{w(x_i)\}$对这些样本进行重采样(这是一个简单的针对有限离散分布的采样),最终得到的样本服从目标分布p(x)。、

\underline{用一个比较简单的分布q(x)代替复杂分布p(x),关键是要计算其中的重要性权重}

马尔可夫蒙特卡洛(MCMC)采样法

MCMC采样法主要包括两个MC,即蒙特卡洛法和马尔可夫链.蒙特卡洛法是指基于采样的数值型近似求解方法,而马尔可夫链则用于进行采样.MCMC采样法基本思想是:针对待采样的目标分布,构造一个马尔可夫链,使得该 马尔可夫链的平稳分布就是目标分布;然后,从任何一个初始状态出发,沿着马尔可夫链进行状态转移,最终得到的状态转移序列会收敛到目标分布,由此可以得到目标分布的一系列样本.

Metropolis-Hastings采样法

对于目标分布p(x),首先选择一个容易采样的参考条件分布$q(x^* |x)$,并令

然后根据如下过程进行采样:
(1)随机选一个初始样本$x^{(0)}$
(2)For t=1,2,3,…:

  • 根据参考条件分布$q(x^* |x^{t-1})$抽取一个样本$x^* $;
  • 根据均匀分布U(0,1)产生随机数u;
  • 若$u<A(x^{(t-1)},x^* )$,则令$x^{(t)}=x^* $,否则令$x^{(t)}=x^{(t-1)}$

可以证明,上述过程得到的样本序列{….,x^{(t-1)},x^{(t)},…..}最终会收敛到目标分布p(x).

吉布斯采样法(Gibbs采样)

吉布斯采样法是MH算法的一个特例,其核心思想是每次只对样本的一个维度进行采样和更新.对于目标分布p(x),其中$x=(x_1,x_2,…,x_d)$是多维向量,按如下过程进行采样:
(1)随机选择初始状态$x^{(0)}=(x_1^{(0)},x_2^{(0)},…,x_d^{(0)})$
(2) For t=1,2,3,….

  • 对于前一步产生的样本$x^{(t-1)}=(x_1^{(t-1)},x_2^{(t-1)},….,x_d^{(t-1)})$,依次采样和更新每个维度的值,即依次抽取分量$x_1^{(t)}~p(x_1|x_2^{(t-1)},x_3^{(t-1)},…,x_d^{(t-1)}),x_2^{(t)}~p(x_2|x_1^{(t)},x_3^{(t-1)},…,x_d^{(t-1)}),…,x_d^{(t)}~p(x_d|x_1^{(t)},x_2^{(t)},…,x_{d-1}^{(t)})$
  • 形成新的样本$x^{(t)}=(x_1^{(t)},x_2^{(t)},….,x_d^{(t)})$

同样可以证明,上述过程得到的样本序列也是会收敛到目标分布p(x)

不均衡样本集的重采样

很多模型在训练数据不均衡时会出现问题.其本质原因是模型在训练时优化的目标函数和人们在测试时使用的评价标准不一致。这种”不一致”可能是由于训练数据的样本分布与测试时期望的样本分布不一致.
例如在训练时优化的是整个训练集(正负样本比例可能是1:99)的正确率,而测试时可能想要模型在正样本和负样本上的平均正确率尽可能大(实际上是期望正负样本比例为1:1);也可能是由于训练阶段不同类别的权重(重要性)与测试阶段不一致.

一般从两个角度来处理样本不均衡问题:1.基于数据的方法2.基于算法的方法(略)

基于数据的方法

对数据进行重采样,使原本不均衡的样本变得均衡,采样一般分为过采样和欠采样.过采样是从少数类样本集$S_{min}$中随机重复抽取样本(有放回)以得到更多的样本;欠采样则相反,从多数类样本集$S_{maj}$中随机选取较少的样本(有放回或无放回).

但这会带来一些问题,比如过采样对少数类样本进行了多次复制,扩大了数据规模,增加了模型训练的复杂度,同时也容易造成过拟合;欠采样会丢弃一些样本,可能会损失部分有用信息,造成模型只学到了整体模式的一部分.

为解决上述问题,通常在过采样时并不是简单地复制样本,而是采用一些方法生成新的样本。SMOTE算法

对于欠采样,可以采用Informed Undersampling来解决由于欠采样带来的数据丢失问题.
常见的Informed Undersampling 算法有:
(1)Easy Ensemble算法.每次从多数类$S_{maj}$中上随机抽取一个子集E(|E|≈|S_{min}|),然后用E+$S_{min}$训练一个分类器;重复上述过程若干次,得到多个分类器,最终的分类结果是这多个分类器结果的融合
(2)Balance Cascade算法.级联结构,在每一级中从多数类$S_{maj}$中随机抽取子集E,用E+$S_{min}$训练该级的分类器;然后将$S_{maj}$中能够被当前分类器正确判别的样本剔除,继续下一级的操作,重复若干次得到级联结构;最终的输出结果也是各级分类器结果的融合.
(3)其他诸如NearMiss(利用K近邻信息挑选具有代表性的样本)、One-sided Selection(采用数据清理技术)等算法.

经常用到的数据扩充方法也是一种过采样,对少数类样本进行一些噪声扰动或变换(如图像数据集中对图片进行裁剪、翻转、旋转、加光照等)以构造出新的样本;

-------------本文结束感谢您的阅读-------------

本文标题:机器学习(六)——采样

文章作者:Yif Du

发布时间:2019年01月23日 - 12:01

最后更新:2019年03月09日 - 17:03

原始链接:http://yifdu.github.io/2019/01/23/机器学习(六)——采样/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。