将非高斯分布数据转换为高斯分布数据

高斯分布是一个很神奇的分布,很多人在考虑问题的时候,总是很喜欢假设数据是满足高斯分布的。其原因可能就是,正态分布的各项统计学特征都可以很好地表示出来,我们只需要知道两个参数——均值和方差,即可,就可以得到概率密度分布、累计密度分布等等,同时可以利用多种现有的方法解决不同的问题。

但是现实场景中,很多数据并不是如我们想象地那样:满足高斯性。那么我们可以采用逆变换采样(inverse transform sampling)的方法将这些非高斯数据先转换成服从高斯分布的数据,然后利用现有的方法解决问题。

什么是逆变换采样

逆变换采样,又称为逆采样(inversion sampling)、逆概率积分变换(inverse probability integral transform),是伪随机数采样的一种基本方法。也就是说,在已知任意概率分布的累计分布函数下,可用于从该分布中生成随机样本。
逆变换采样采用一个在0到1之间的 u u u的均匀样本,然后从分布 P ( X ) P(X) P(X)的领域中返回最大的数字 x x x,使得 P ( − ∞ &lt; X &lt; x ) ≤ u P(-\infty &lt;X&lt;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) FX1(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} xR,我们将得到
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(Xx)=P(T(U)x)=P(UT1(x))=T1(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), u\in [0,1]。 T(u)=FX1(u),u[0,1]
所以,我们就可以从 F X − 1 ( u ) F^{-1}_{X}(u) FX1(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(Xx)=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);

参考资料:

  1. Inverse transform sampling
  2. Transforming uniform variables to normal variables
  3. The nonparanormal: Semiparametric estimation of high dimensional undirected graphs
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值