多元高斯分布

一维高斯分布

一维高斯分布的高斯分布相信大家都见过,公式是这样的:

P(x) = {1 \over \sigma\sqrt{2\pi} }\,e^{- {{(x-\mu )^2 \over 2\sigma^2}}}

image

峰值处是的坐标为 \mu ,是数据的均值. \sigma^2 是数据的方差,方差越小,分布越集中,方差越大,分布越分散.

多维高斯分布

一维高斯分布只反映了一个变量的分布情况,多维高斯分布可以反映多个变量的分布情况.维基百科给出的多元高斯分布定义是这样的:

f_{\mathbf {x} }(x_{1},\ldots ,x_{n})={\frac {1}{\sqrt {(2\pi )^{n}|{\boldsymbol {\Sigma }}|}}}\exp \left(-{\frac {1}{2}}({\mathbf {x} }-{\boldsymbol {\mu }})^{\mathrm {T} }{\boldsymbol {\Sigma }}^{-1}({\mathbf {x} }-{\boldsymbol {\mu }})\right)

我们可以变一下形:
P(X)={\frac {1}{\sqrt {(2\pi )^{n}|{\boldsymbol {\Sigma }}|}}}\exp \left(-{\dfrac {({\mathbf {x} }-{\boldsymbol {\mu }})^{\mathrm {T} }({\mathbf {x} }-{\boldsymbol {\mu }})}{2{\boldsymbol {\Sigma }}}}\right)

我们来把多维高斯分布的公式与一维高斯分布对比一下发现,在有两点不同:

第一点不同,多维高斯分布把 (x-\mu )^2 替换为 ({\mathbf {x} }-{\boldsymbol {\mu }})^{\mathrm {T} }({\mathbf {x} }-{\boldsymbol {\mu }}) .其实 ({\mathbf {x} }-{\boldsymbol {\mu }})^{\mathrm {T} }({\mathbf {x} }-{\boldsymbol {\mu }}) 可以写成 (x_1-\mu_1 )^2 + (x_1-\mu_1 )^2 + ... + (x_n-\mu_n )^2 ,如果数据只有一维的话,那就只剩 (x_1-\mu_1 )^2 这一项,也就与一维高斯分布对应起来了.

第二点不同,多维高斯分布把把方差 \sigma^2 换为 \boldsymbol {\Sigma } ,到了高维之后,不仅有各维自己的方差,还有两两之间的协方差,协方差反应两个变量的相关程度,这些方差和协方差放到一个矩阵中就是协方差矩阵 \boldsymbol {\Sigma } .

我们拿二维高斯分布举个例子,二维协方差矩阵是这个样子的:

\Sigma = \begin{bmatrix} \sigma_1^2 & \sigma_1 \sigma_2 \\ \sigma_2\sigma_1 & \sigma_2^2 \end{bmatrix}

image

从上图可以看出方差反应各纬度数据的分布情况,而协方差协方差反应两个变量的相关程度.我们还可以列举几个不同协方差的二维二维高斯分布:

image

协方差矩阵

一个维度,我们根据数据计算均值与方差:

均值: \mu = \frac{1}{n}\sum_{i=1}^n x_i

方差: \sigma^2 = \frac{1}{n}\sum_{i=1}^n (x_i-\mu)^2

两个维度,我们可以计算两个维度的相关程度,即协方差:
协方差: \mathrm {cov} (x,y) = E((x-\mu_x)(y-\mu_y))=\frac{1}{n}\sum_{i=1}^n (x_i-\mu_x)(y_i-\mu_y)

n个维度 X_1,X_2,...,X_n ,协方差矩阵会是一个 n \times n 的正定矩阵:

\Sigma = \begin{bmatrix} \mathrm{E}[(X_1 - \mu_1)(X_1 - \mu_1)] & \mathrm{E}[(X_1 - \mu_1)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_1 - \mu_1)(X_n - \mu_n)] \\ \\ \mathrm{E}[(X_2 - \mu_2)(X_1 - \mu_1)] & \mathrm{E}[(X_2 - \mu_2)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_2 - \mu_2)(X_n - \mu_n)] \\ \\ \vdots & \vdots & \ddots & \vdots \\ \\ \mathrm{E}[(X_n - \mu_n)(X_1 - \mu_1)] & \mathrm{E}[(X_n - \mu_n)(X_2 - \mu_2)] & \cdots & \mathrm{E}[(X_n - \mu_n)(X_n - \mu_n)] \end{bmatrix}

这里的X_1等表示某一维度的所有数据.

我们发现协方差矩阵是对称的,另外协方差矩阵是半正定矩阵.

协方差矩阵的计算

我们处理数据集的时候通常拿到的是一个包含m个数据的数据集合:

{\displaystyle \mathbf {X} ={\begin{bmatrix}x^{(1)}\\ x^{(2)}\\\vdots \\x^{(m)}\end{bmatrix}}}

其中每一个数据都有n个特征:

x = [x_1,x_2,...,x_n]

这时我们该如何计算协方差矩阵呢?

X可以写成由很多维的数据组成的:
X = [X_1,X_2,...,X_n]

这样的话协方差矩阵为:
\Sigma = \frac{1}{m}(X-\mu)^T(X-\mu)

这里的 \mu 为各维度均值组成的向量.

数学推导

首先一维标准正态分布你懂吧?
p(x) = \frac{1}{\sqrt{2\pi}} \exp \left( -\frac{x^2}{2} \right)

二维标准正态分布,就是两个独立的一维标准正态分布随机变量的联合分布:
p(x,y) = p(x)p(y) = \frac{1}{2\pi} \exp \left( -\frac{x^2+y^2}{2} \right)

把两个随机变量组合成一个随机向量: \mathbf{v} = [x\,\,\,y]^T
则有 p(\mathbf{v}) = \frac{1}{2\pi} \exp \left( -\frac{1}{2}\mathbf{v}^T\mathbf{v} \right)

然后从标准正态分布推广到一般正态分布,办法是通过一个线性变换: \mathbf{v} = A(\mathbf{x}-\mu)
p(\mathbf{x}) = \frac{|A|}{2\pi} \exp \left[ -\frac{1}{2} (\mathbf{x} - \mu) ^T A^TA (\mathbf{x} - \mu) \right]
注意前面的系数多了一个 |A| (A的行列式)。

可以证明这个分布的均值为 \mu ,协方差为 (A^TA)^{-1} 。记 \Sigma = (A^TA)^{-1} ,那就有
p(\mathbf{x}) = \frac{1}{2\pi|\Sigma|^{1/2}} \exp \left[ -\frac{1}{2} (\mathbf{x} - \mu) ^T \Sigma^{-1} (\mathbf{x} - \mu) \right]

高维情形同理。


参考:
https://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE
https://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5
https://www.coursera.org/learn/machine-learning
https://www.zhihu.com/question/36339816

posted @ 2018-08-19 17:55:56
评论加载中...
发表评论