概述
高斯分布是一个很神奇的分布,很多人在考虑问题的时候,总是很喜欢假设数据是满足高斯分布的。其原因可能就是,正态分布的各项统计学特征都可以很好地表示出来,我们只需要知道两个参数——均值和方差,即可,就可以得到概率密度分布、累计密度分布等等,同时可以利用多种现有的方法解决不同的问题。
但是现实场景中,很多数据并不是如我们想象地那样:满足高斯性。那么我们可以采用逆变换采样(inverse transform sampling)的方法将这些非高斯数据先转换成服从高斯分布的数据,然后利用现有的方法解决问题。
什么是逆变换采样
逆变换采样,又称为逆采样(inversion sampling)、逆概率积分变换(inverse probability integral transform),是伪随机数采样的一种基本方法。也就是说,在已知任意概率分布的累计分布函数下,可用于从该分布中生成随机样本。
逆变换采样采用一个在0到1之间的
u
u
u的均匀样本,然后从分布
P
(
X
)
P(X)
P(X)的领域中返回最大的数字
x
x
x,使得
P
(
−
∞
<
X
<
x
)
≤
u
P(-infty <X<x)leq u
P(−∞<X<x)≤u。
定义
根据概率积分变换,假设 X X X是一个连续的随机变量,那么它的累积分布函数为 F X F_{X} FX。此时,对于不同的 X X X,随机变量 Y = F X ( X ) Y=F_{X}(X) Y=FX(X) 服从区间在 [ 0 , 1 ] [0,1] [0,1]上的均匀分布。那么逆变换采样就是将这个过程反过来,如果 Y Y Y服从0到1之间的均匀分布,且 X X X有一个累积分布 F X F_{X} FX,那么随机变量 F X − 1 ( Y ) F_{X}^{-1}(Y) FX−1(Y)跟 X X X有相同的分布。所以,我们可以通过分布 F X F_{X} FX的逆变换来生成随机样本。
思想来源
现在我们要从区间为[0,1]的均匀分布中用累积分布函数
F
X
(
X
)
F_{X}(X)
FX(X)中生成随机变量
X
X
X的样本。假设
F
X
(
X
)
F_{X}(X)
FX(X)是严格递增的函数,那么我们要尝试找到一些严格单调的变换
T
:
[
0
,
1
]
↦
R
T: [0,1] mapsto mathcal{R}
T:[0,1]↦R,使得
T
(
U
)
=
d
X
T(U) overset{d}{=} X
T(U)=dX。(但是,这里的严格单调的条件可能在一般情况下是不正确的。)
对于
x
∈
R
x in mathcal{R}
x∈R,我们将得到
F
X
(
x
)
=
P
(
X
≤
x
)
=
P
(
T
(
U
)
≤
x
)
=
P
(
U
≤
T
−
1
(
x
)
)
=
T
−
1
(
x
)
。
F_{X}(x) = P(X leq x) = P(T(U)leq x) = P(U leq T^{-1}(x)) = T^{-1}(x)。
FX(x)=P(X≤x)=P(T(U)≤x)=P(U≤T−1(x))=T−1(x)。
因此,我们可以知道
F
X
(
x
)
F_{X}(x)
FX(x)为
T
T
T的逆函数,也就是说,
T
(
u
)
=
F
X
−
1
(
u
)
,
u
∈
[
0
,
1
]
。
T(u) = F^{-1}_{X}(u), uin [0,1]。
T(u)=FX−1(u),u∈[0,1]。
所以,我们就可以从
F
X
−
1
(
u
)
F^{-1}_{X}(u)
FX−1(u)中生成变量
X
X
X的样本了。
方法
那么,我们怎么从不同的分布中产生服从高斯分布的样本呢?
假设
F
X
(
x
)
F_{X}(x)
FX(x)是随机变量
X
X
X的累积分布函数,·存在一个变换
T
(
U
)
T(U)
T(U)使得
Y
=
T
(
U
)
∼
N
(
μ
,
σ
2
)
Y=T(U)sim N(mu, sigma^2)
Y=T(U)∼N(μ,σ2),其中,
μ
mu
μ表示均值,
σ
2
sigma^2
σ2表示方差。那么,这个变换为
T
(
u
)
=
μ
+
σ
2
⋅
Φ
−
1
(
F
X
(
u
)
)
T(u) = mu + sigma^2 cdot Phi^{-1}(F_{X}(u))
T(u)=μ+σ2⋅Φ−1(FX(u))。
(简单说明:
因为从上面的思想我们知道,
F
X
(
x
)
=
P
(
X
≤
x
)
=
P
(
T
(
U
)
≤
x
)
=
Φ
(
T
(
U
)
−
μ
σ
)
F_{X}(x)= P(X leq x) = P(T(U)leq x) = Phi(frac{T(U)-mu}{sigma})
FX(x)=P(X≤x)=P(T(U)≤x)=Φ(σT(U)−μ)。)
matlab实现
将服从均匀分布的变量 X X X转换成服从均值为0,方差为1的正态分布的变量 Y Y Y:
>> X = rand(2000,1);
>> mu = 0;
>> sigma = 1;
>> Y = mu + sqrt(2)*sigma*erfinv(2*X-1);
参考资料:
- Inverse transform sampling
- Transforming uniform variables to normal variables
- The nonparanormal: Semiparametric estimation of high dimensional undirected graphs
最后
以上就是灵巧小蘑菇为你收集整理的将非高斯分布数据转换为高斯分布数据什么是逆变换采样定义思想来源方法matlab实现的全部内容,希望文章能够帮你解决将非高斯分布数据转换为高斯分布数据什么是逆变换采样定义思想来源方法matlab实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复