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 技术的来龙去脉。
  • 相关阅读:
    Asp.net弹出浏览器客户端确认对话框代码 Carlwave
    VS 2005 与SQL Server 2005整合优势在哪里?(from csdn.net) Carlwave
    如何让搜索引擎收录我的站点 Carlwave
    超强扩展性的DNNDotNetNuke模块功能分类列表(from 中国DNN) Carlwave
    DotNetNuke命名空间概述 Carlwave
    Most Popular Questions and Answers on ASP.NET Whidbey(from asp.net forums,write by ASP.NET Team) Carlwave
    火箭官方宣告麦蒂缺阵五周 季后赛前景蒙上阴影 Carlwave
    asp.net有效使用缓存(转) Carlwave
    《Business Rules Engine Overview》《业务规则引擎概述》write by Mark Kamoski Carlwave
    中国详细省市县自治区名称列表(含access数据库和sql2000备份数据库) Carlwave
  • 原文地址:https://www.cnblogs.com/jermmyhsu/p/8251013.html
Copyright © 2011-2022 走看看