#采样
采样在机器学习中有着非常重要的应用:它可以将复杂分布简化为离散的样本点;可以用重采样对样本集进行调整以更好地适应后期的密模型学习;可以用于随机模拟以进行复杂模型的进行求解或推理。
采样的作用
采样时从特定的概率分布中抽取对应的样本点。
举例说明采样在机器学习中的应用
速记:通过采样,可以模拟随机事件;采样得到训练集和测试集;利用重采样来处理分类模型的训练样本不均衡问题;利用采样方法进行随机模拟,从而对这些复杂模型进行近似求解或推理。
详细:采样本质上时对随机现象的模拟,根据给定的概率分布,来模拟产生一个对应的随机事件。
均匀分布的随机数
###如何编程实现均匀分布随机数生成器?
速记:线性同余法。
详细:计算机程序只能产生伪随机数。一般可以采用线性同余法来生成离散均匀分布伪随机数,计算公式为:
x
t
+
1
=
a
⋅
x
t
+
c
(
m
o
d
m
)
x_{t+1}=a \cdot x_t + c(mod \quad m)
xt+1=a⋅xt+c(modm)
也就是根据当前生成的随机数
x
t
x_t
xt来进行适当变换,进而残生下一次的随机数
x
t
+
1
x_{t+1}
xt+1。初始值
x
0
x_0
x0称为随机种子。上式得到的式区间
[
0
,
m
−
1
]
[0,m-1]
[0,m−1]上的随机整数,如果想要得到区间
[
0
,
1
]
[0,1]
[0,1]上的连续均匀分布随机数,用
x
t
x_t
xt除以m即可。
常见的采样方法
###抛开那些针对特定分布而精心涉及的采样方法,说一些你所知道的通用采样方法或采样策略,简单描述它们的主要思想以及具体操作步骤。
速记:函数变换法;逆变换采样法。拒绝采样;重要性采样。
详细;几乎所有的采样方法都是以均匀分布随机数作为基本操作。均匀分布随机数一般用线性同余法来产生。
很多分布不好直接进行采样,可以考虑函数变换法。一般地,如果随机变量
x
x
x和
u
u
u存在变换关系
u
=
φ
(
x
)
u=\varphi(x)
u=φ(x),则它们的概率密度函数有如下关系:
p
(
u
)
∣
φ
′
(
x
)
=
p
(
x
)
p(u)|{\varphi}'(x)=p(x)
p(u)∣φ′(x)=p(x)
如果x不好采样,可以构造一个变化
u
=
φ
(
x
)
u=\varphi(x)
u=φ(x)这样就可以通过先对u进行采样,再通过反函数
x
=
φ
−
1
(
u
)
x=\varphi ^{-1}(u)
x=φ−1(u)来间接得到x。
还有拒绝采样以及重要性采样,较简单,看书。
高斯分布的采样
如何对高斯分布进行采样?
速记:Box-Muller算法;Marsaglia polar method(Box-Muller的改良版,避开了三角函数的计算,因而更快);拒绝采样。
详细:看书。
马尔可夫蒙特卡洛采样法(MCMC)
速记:针对带采样的目标分布,构造一个马尔可夫链,使得马尔可夫链的平稳分布就是目标分布;然后,从任何一个初始状态出发,沿着马尔可夫链进行状态转移,最终的稻草的状态转移序列会收敛到目标分布,由此可以得到目标分布的一系列样本。
详细:蒙特卡洛法是指居于采样的数值型近似求解方法,而马尔可夫链则用于进行采样。在实际操作中,核心点是如何构造合适的马尔可夫链。
简单介绍几种常见的MCMC采样法。
速记:MCMC采样法的核心点是构造合适的马尔可夫链,不同的马尔可夫链对应着不同的MCMC采样法,常见的有Metropolis-Hastings采样法和吉布斯采样法。
详细:
Metropolis-Hastings采样法
对于目标分布
p
(
x
)
p(x)
p(x),首先选择一个容易采样的参考条件分布
q
(
x
∗
∣
x
)
q(x^*|x)
q(x∗∣x),并令
A
(
x
,
x
∗
)
=
m
i
n
1
,
p
(
x
∗
)
q
(
x
∣
x
∗
)
p
(
x
)
q
(
x
∗
∣
x
)
A(x,x^*)=min{1,\frac{p(x^*)q(x|x^*)}{p(x^)q(x^*|x)}}
A(x,x∗)=min1,p(x)q(x∗∣x)p(x∗)q(x∣x∗)
然后根据如下过程进行采样:
(1)随机选一个初始样本 x ( 0 ) x^{(0)} x(0)。
(2)For t = 1,2,3,…:
- 根据参考条件分布 q ( x ∗ ∣ x t − 1 ) q(x^*|x^{t-1}) q(x∗∣xt−1)抽取一个样本 x ∗ x^* x∗;
- 根据均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)产生随机数 u u u;
- 若 u < A ( x t − 1 , x ∗ ) u<A(x^{t-1},x^*) u<A(xt−1,x∗),则令 x ( t ) = x ∗ x^{(t)}=x^* x(t)=x∗,否则 x ( t ) = x ( t − 1 ) x^{(t)}=x^{(t-1)} x(t)=x(t−1)
可以证明,上述过程得到的样本序列 { . . . , x ( t − 1 ) , x ( t ) } \{...,x^{(t-1)},x^{(t)}\} {...,x(t−1),x(t)}最总会收敛到目标分布p(x)。
吉布斯采样
吉布斯采样时Metropolis—Hastings算法的一个特例,其核心思想时每次只对样本的一个维度进行采样和更新。对于目标分布 p ( x ) p(x) p(x),其中 x = ( x 1 , . . . , x d x=(x_1,...,x_d x=(x1,...,xd是多维向量,按如下过程进行采样:
(1) 随机选择初始状态 x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , . . . , x d ( 0 ) ) x^{(0)}=(x_1^{(0)},x_2^{(0)},...,x_d^{(0)}) x(0)=(x1(0),x2(0),...,xd(0))。
(2) For t = 1,2,3,…:
- 对于前一步产生的样本 x ( t − 1 ) = ( x 1 ( t − 1 ) , x 2 ( t − 1 ) , . . . , x d ( t − 1 ) ) x^{(t-1)}=(x_1^{(t-1)},x_2^{(t-1)},...,x_d^{(t-1)}) x(t−1)=(x1(t−1),x2(t−1),...,xd(t−1)),依次采样和更新每个维度的值,即依次抽取分量 x 1 ( t ) ∼ p ( x 1 ∣ x 2 ( t − 1 ) , x 3 ( t − 1 ) , . . . , x d ( t − 1 ) ) x_1^{(t)}\sim p(x_1|x_2^{(t-1)},x_3^{(t-1)},...,x_d^{(t-1)}) x1(t)∼p(x1∣x2(t−1),x3(t−1),...,xd(t−1)) , x 2 ( t ) ∼ p ( x 2 ∣ x 1 ( t − 1 ) , x 3 ( t − 1 ) , . . . , x d ( t − 1 ) ) x_2^{(t)}\sim p(x_2|x_1^{(t-1)},x_3^{(t-1)},...,x_d^{(t-1)}) x2(t)∼p(x2∣x1(t−1),x3(t−1),...,xd(t−1)),…, x d ( t ) ∼ p ( x 1 ∣ x 2 ( t − 1 ) , x 3 ( t − 1 ) , . . . , x d − 1 ( t − 1 ) ) x_d^{(t)}\sim p(x_1|x_2^{(t-1)},x_3^{(t-1)},...,x_{d-1}^{(t-1)}) xd(t)∼p(x1∣x2(t−1),x3(t−1),...,xd−1(t−1))
- 形成新的样本 x ( t ) = ( x 1 ( t ) , x 2 ( t ) , . . . , x d ( t ) ) x^{(t)}=(x_1^{(t)},x_2^{(t)},...,x_d^{(t)}) x(t)=(x1(t),x2(t),...,xd(t))
同样可以证明,上述过程得到的样本序列 { . . . , x ( t − 1 ) , x ( t ) } \{...,x^{(t-1)},x^{(t)}\} {...,x(t−1),x(t)}最总会收敛到目标分布p(x)。另外,步骤2中对样本每个维度的抽样和更新操作,不是必须按下标顺序进行的,可以是随机顺序。
MCMC采样法如何得到相互独立的样本?
速记:同时运行多条马尔可夫链,不同链上的样本是独立的;或者在同一条马尔可夫链上每隔若干个样本才选取一个。
贝叶斯网络的采样
较好理解,看书即可
不均匀样本集的重采样
对于二分类问题,当训练集中正负样本非常不均衡时,如何处理数据以更好地训练分类模型?
速记:重采样(拿了又拿),改目标函数(加权重)
详细:基于数据的方法:
对数据进行重采样,对少数类样本集进行有放回抽取,多抽点。对多数类样本有放回或无放回抽取较少的样本。
这样虽然可以使样本集变得均衡,但存在一些问题,如容易造成过拟合;因为欠采样的缘故,可能导致部分有用信息丢失。
为解决上述问题,通常在过采样时并不是简单地复制样本,而是采用一些方法生成新的样本。如SMOTE算法。从它 在Smin中的K近邻中随机选一个样本y,然后在x,y连线上随机选取一点作为新合成的样本(根据需要的过采样倍率重复上述过程若干次)。这种合成新样本的过采样方法可以降低过拟合的风险。
对于欠采样,可以用Informed Undersampling来解决由于随机欠采样带来的数据丢失问题。
基于算法的方法:
在样本不均衡时,也可以通过改变模型训练时的目标函数(如代价敏感学习中不同类别有不同的权重)来矫正这种不平衡性;当样本数极其不平衡时,也可以将问题转化为单类学习、异常检测。