zoukankan      html  css  js  c++  java
  • 多维高斯分布

    高中的时候我们便学过一维正态(高斯)分布的公式:

    [N(x|u,sigma^2)=frac{1}{sqrt{2pi sigma^2}}exp[-frac{1}{2sigma^2}(x-u)^2] ]

    拓展到高维时,就变成:

    [N(overline x | overline u, Sigma)=frac{1}{(2pi)^{D/2}}frac{1}{|Sigma|^{1/2}}exp[-frac{1}{2}(overline x-overline u)^TSigma^{-1}(overline x-overline u)] ]

    其中,(overline x) 表示维度为 D 的向量,(overline u) 则是这些向量的平均值,(Sigma) 表示所有向量 (overline x) 的协方差矩阵。

    本文只是想简单探讨一下,上面这个高维的公式是怎么来的。

    二维的情况

    为了简单起见,本文假设所有变量都是相互独立的。即对于概率分布函数 (f(x_0,x_1,…,x_n)) 而言,有 (f(x_0,x_1,…,x_n)=f(x_0)f(x_1)f(x_n)) 成立。

    现在,我们用一个二维的例子推出上面的公式。

    假设有很多变量 (overline x=egin{bmatrix} x_1 \ x_2 end{bmatrix}),它们的均值为 (overline u=egin{bmatrix} u_1 \ u_2 end{bmatrix}),方差为 (overline sigma=egin{bmatrix} sigma_1 \ sigma_2 end{bmatrix})

    由于 (x_1)(x_2) 是相互独立的,所以,(overline x) 的高斯分布函数可以表示为:

    [egin{eqnarray} f(overline x) &=& f(x_1,x_2) \ &=& f(x_1)f(x_2) \ &=& frac{1}{sqrt{2pi sigma_1^2}}exp(-frac{1}{2}(frac{x_1-u_1}{sigma_1})^2) imes frac{1}{sqrt{2pi sigma_2^2}}exp(-frac{1}{2}(frac{x_2-u_2}{sigma_2})^2) \ &=&frac{1}{(2pi)^{2/2}(sigma_1^2 sigma_2^2)^{1/2}}exp(-frac{1}{2}[(frac{x_1-u_1}{sigma_1})^2+(frac{x_2-u_2}{sigma_2})^2]) end{eqnarray} ]

    接下来,为了推出文章开篇的高维公式,我们要想办法得到协方差矩阵 (Sigma)

    对于二维的向量 (overline x) 而言,其协方差矩阵为:

    [egin{eqnarray} Sigma&=&egin{bmatrix} sigma_{11} & sigma_{12} \ sigma_{12} & sigma_{22} end{bmatrix} \ &=&egin{bmatrix} sigma_1^2 & sigma_{12} \ sigma_{21} & sigma_{2}^2 end{bmatrix} \ end{eqnarray} ]

    (不熟悉协方差矩阵的请查找其他资料或翻看我之前的文章)

    由于 (x_1)(x_2) 是相互独立的,所以 (sigma_{12}=sigma_{21}=0)。这样,(Sigma) 退化成 (egin{bmatrix} sigma_1^2 & 0 \ 0 & sigma_{2}^2 end{bmatrix})

    (Sigma) 的行列式 (|Sigma|=sigma_1^2 sigma_2^2),代入公式 (4) 就可以得到:

    [f(overline x)=frac{1}{(2pi)^{2/2}|Sigma|^{1/2}}exp(-frac{1}{2}[(frac{x_1-u_1}{sigma_1})^2+(frac{x_2-u_2}{sigma_2})^2]) ]

    这样一来,我们已经推出了公式的左半部分,下面,开始处理右面的 (exp) 函数。

    原始的高维高斯函数的 (exp) 函数为:(exp[-frac{1}{2}(overline x-overline u)^TSigma^{-1}(overline x-overline u)]),根据前面算出来的 (Sigma),我们可以求出它的逆:(Sigma^{-1}=frac{1}{sigma_1^2 sigma_2^2} egin{bmatrix} sigma_2^2 & 0 \ 0 & sigma_1^2 end{bmatrix})

    接下来根据这个二维的例子,将原始的 (exp()) 展开:

    [egin{eqnarray} exp[-frac{1}{2}(overline x-overline u)^TSigma^{-1}(overline x-overline u)] &=& exp[-frac{1}{2} egin{bmatrix} x_1-u_1 x_2-u_2 end{bmatrix} frac{1}{sigma_1^2 sigma_2^2} egin{bmatrix} sigma_2^2 & 0 \ 0 & sigma_1^2 end{bmatrix} egin{bmatrix} x_1-u_1 \ x_2-u_2 end{bmatrix}] \ &=&exp[-frac{1}{2} egin{bmatrix} x_1-u_1 x_2-u_2 end{bmatrix} frac{1}{sigma_1^2 sigma_2^2} egin{bmatrix} sigma_2^2(x_1-u_1) \ sigma_1^2(x_2-u_2) end{bmatrix}] \ &=&exp[-frac{1}{2sigma_1^2 sigma_2^2}[sigma_2^2(x_1-u_1)^2+sigma_1^2(x_2-u_2)^2]] \ &=&exp[-frac{1}{2}[frac{(x_1-u_1)^2}{sigma_1^2}+frac{(x_2-u_2)^2}{sigma_2^2}]] end{eqnarray} ]

    展开到最后,发现推出了公式 (4)。说明原公式 (N(overline x | overline u, Sigma)=frac{1}{(2pi)^{D/2}}frac{1}{|Sigma|^{1/2}}exp[-frac{1}{2}(overline x-overline u)^TSigma^{-1}(overline x-overline u)]) 是成立的。你也可以将上面展开的过程逆着推回去,一样可以从例子中的公式 (4) 推出多维高斯公式。

    函数图像

    知道多维的公式后,下面再简单比较一下一维和二维的图像区别。

    上图展示的是 4 个一维高斯函数的图像。高斯函数是一个对称的山峰状,山峰的中心是均值 (u),山峰的「胖瘦」由标准差 (sigma) 决定,如果 (sigma) 越大,证明数据分布越广,那么山峰越「矮胖」,反之,则数据分布比较集中,因此很大比例的数据集中在均值附近,山峰越「瘦高」。在偏离均值 (u) 三个 (sigma) 的范围外,数据出现的概率几乎接近 0,因此这一部分的函数图像几乎与 x 轴重合。

    下面看二维的例子:

    有了一维图像的例子,二维图像就可以类比出来了。如果说,一维只是山峰的一个横截面,那么二维则是一个完整的有立体感的山峰。山峰的「中心」和「胖瘦」和一维的情况是一致的,而且,对于偏离中心较远的位置,数据出现的概率几乎为 0,因此,函数图像在这些地方就逐渐退化成「平原」了。

    参数估计

    另外,如果给定了很多数据点,并且知道它们服从某个高斯分布,我们要如何求出高斯分布的参数((mu)(Sigma))呢?

    当然,估计模型参数的方法有很多,最常用的就是极大似然估计。

    简单起见,拿一维的高斯模型举例。假设我们有很多数据点:((x_1, x_2, x_3, dots, x_m)),它们的均值是( ilde u)。一维高斯函数是:(p(x|mu, sigma^2)=frac{1}{sqrt{2pi}sigma}exp(-frac{(x-mu)^2}{2sigma^2}))

    首先,我们先写出似然函数:

    [egin{eqnarray} f(x_1, x_2, dots, x_m)&=&prod_{i=1}^{m}frac{1}{sqrt{2pi}sigma}exp(-frac{(x_i- ilde mu)^2}{2sigma^2}) \ &=&(2pi sigma^2)^{-frac{m}{2}}exp(-frac{sum_{i=1}^n{(x_i- ilde mu)^2}}{2sigma^2}) end{eqnarray} ]

    然后取对数:

    [ln{f(x_1, x_2, dots, x_m)}=-frac{m}{2}ln{(2pi sigma^2)}-frac{1}{2sigma^2}sum_{i=1}^n{(x_i- ilde mu)^2} ]

    求出导数,令导数为 0 得到似然方程:

    [frac{partial ln f}{partial overline mu}=frac{1}{sigma^2}sum_{i=1}^{n}{(x_i- ilde mu)}=0 ]

    [frac{partial ln{f}}{partial sigma}=-frac{m}{sigma}+frac{1}{sigma^3}sum_{i=1}^n{(x_i- ilde mu)}=0 ]

    我们可以求出:(mu=frac{1}{m}sum_{i=1}^m{(x_i- ilde mu)})(sigma=sqrt{frac{1}{m}sum_{i=1}^m{(x_i- ilde mu)^2}}),可以看到,这其实就是高斯函数中平均值和标准差的定义。

    对于高维的情况,平均值和协方差矩阵也可以用类似的方法计算出来。

    总结

    本文只是从一个简单的二维例子出发,来说明多维高斯公式的来源。在 PRML 的书中,推导的过程更加全面,也复杂了许多,想深入学习多维高斯模型的还是参考教材为准。

    重新对比一维和多维的公式:

    [N(x|u,sigma^2)=frac{1}{sqrt{2pi sigma^2}}exp[-frac{1}{2sigma^2}(x-u)^2] ]

    [N(overline x | overline u, Sigma)=frac{1}{(2pi)^{D/2}}frac{1}{|Sigma|^{1/2}}exp[-frac{1}{2}(overline x-overline u)^TSigma^{-1}(overline x-overline u)] ]

    其实二者是等价的。一维中,我们针对的是一个数,多维时,则是针对一个个向量求分布。如果向量退化成一维,则多维公式中的 (D=1)(Sigma=sigma^2)(Sigma^{-1}=frac{1}{sigma^2}),这时多维公式就退化成一维的公式。所以,在多维的公式中,我们可以把 (Sigma) 当作是样本向量的标准差。

    参考

    PS: 之后的文章更多的会发布在公众号上,欢迎有兴趣的读者关注我的个人公众号:AI小男孩,扫描下方的二维码即可关注

    作为曾经在 AI 路上苦苦挣扎的过来人,想帮助小白们更好地思考各种 AI 技术的来龙去脉。
  • 相关阅读:
    时间,关机重启及网络常识
    bash xshell 特性
    Http介绍
    rsync 守护进程模式小记
    定时任务+邮件发送 小记
    4.iptables的匹配条件(一)
    3.iptables规则管理
    2.iptables规则查询
    1.iptables概念
    4.LVS实验构建
  • 原文地址:https://www.cnblogs.com/jermmyhsu/p/8251013.html
Copyright © 2011-2022 走看看