多元高斯分布
一元高斯与多元高斯
在第一课的一元高斯分布中,处理的是一组样本
X
=
(
x
1
,
x
2
,
.
.
.
,
x
N
)
X=(x_{1},x_{2},...,x_{N})
X=(x1,x2,...,xN),每个样本都是一个随机变量,可以粗略地认为就是随机的"数值";对于多元高斯分布,同样也有一组样本
X
X
X,但每个样本不是单值的随机变量,而是多维的随机向量,假设每个样本有
p
p
p维:
x
=
[
x
1
,
x
2
,
.
.
.
,
x
p
]
T
x=[x_{1},x_{2},...,x_{p}]^{T}
x=[x1,x2,...,xp]T
假设有
N
N
N个样本,则这组样本表示为:
一元高斯分布的样本可以看作多元高斯分布样本在
p
=
1
p=1
p=1下的情况;
多元高斯分布的参数
和一元高斯分布类似,多元高斯分布的参数包含两个部分:均值,方差;但注意,描述分布均值的
μ
\mu
μ不再是一个数值,而是一个
p
p
p维向量:
μ
=
[
μ
1
,
μ
2
,
.
.
.
,
μ
p
]
T
\mu=[\mu_{1},\mu_{2},...,\mu_{p}]^{T}
μ=[μ1,μ2,...,μp]T
向量
μ
\mu
μ的每一维
μ
i
\mu_{i}
μi反映了样本
X
X
X中第
i
i
i个特征的均值;
反映方差的参数同样不再是一个数值,而是协方差矩阵
Σ
\Sigma
Σ,这是一个
p
×
p
p\times p
p×p的矩阵:
在协方差矩阵中,方阵对角线的值
σ
i
i
\sigma_{ii}
σii表示的是分布中第
i
i
i个特征的方差,非对角线上的值
σ
i
j
\sigma_{ij}
σij表示分布中第
i
i
i个特征和第
j
j
j个特征的协方差,反映两个特征之间的相关性;
特别的,当协方差矩阵是一个对角阵,即非对角线上值为0时,代表该分布中,不同特征之间不存在相关性(这也是PCA白化的目标,回顾:算法栈-PCA主成分分析);
二元高斯分布
以二元高斯分布为例,设置不同的参数,直观感受参数对样本分布的影响:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
mean_1 = np.array([0, 0])
conv_1 = np.array([[1, 0],
[0, 1]])
mean_2 = np.array([0, -7])
conv_2 = np.array([[4, 0],
[0, 0.25]])
mean_3 = np.array([4, 4])
conv_3 = np.array([[4, -3],
[-3, 0.25]])
# np.random.normal(loc=0.0:"均值", scale=1.0:"标准差", size=None)用于生成一元高斯分布并采样
# np.random.multivariate_normal根据指定的均值和协方差生成多元高斯分布并采样,size为样本数量
# 本例np.random.multivariate_normal(mean=mean_1, cov=conv_1, size=2000)形状为(2000,2),经过转置用于x_1,y_1解包unpack
x_1, y_1 = np.random.multivariate_normal(mean=mean_1, cov=conv_1, size=2000).T
x_2, y_2 = np.random.multivariate_normal(mean=mean_2, cov=conv_2, size=2000).T
x_3, y_3 = np.random.multivariate_normal(mean=mean_3, cov=conv_3, size=2000).T
plt.plot(x_1, y_1, 'ro', alpha=0.05)
plt.plot(x_2, y_2, 'bo', alpha=0.05)
plt.plot(x_3, y_3, 'go', alpha=0.05)
# gca()获取当前坐标轴,axes.set_xlim()移动坐标轴到指定范围
plt.gca().axes.set_xlim(-10, 10)
plt.gca().axes.set_ylim(-10, 10)
plt.grid()
plt.show()
以上演示中,分别设置了三组不同的参数:
- 红色分布:均值均为0,方差均为1,协方差均为0,因此,整个分布的中心点为 ( 0 , 0 ) (0,0) (0,0),两特征彼此不相关,形态为一个标准的正圆;
- 蓝色分布:第二个特征均值为-7,整个分布的中心点位于 ( 0 , − 7 ) (0,-7) (0,−7),协方差矩阵为对角阵,两特征彼此不相关,即椭圆的长轴和短轴在方向上与 x x x轴 y y y轴一致,没有倾斜,但第一维特征的方差大于第二维特征的方差,所以分布沿着 x x x轴看起来更加分散;
- 绿色分布:协方差矩阵不再是对角阵,两个特征的协方差为-3,呈现负相关,即椭圆表现为向左倾斜(类比直线 y = − x y=-x y=−x);
多元高斯分布的几何特征
几何特征
基于二元高斯分布的可视化,直观感受到整体呈现椭圆形状,假设
x
x
x是一个
p
p
p维随机向量,服从某个
p
p
p维高斯分布
θ
=
(
μ
∈
R
p
,
Σ
∈
R
p
×
p
)
\theta=(\mu\in\mathbb{R}^{p},\Sigma\in\mathbb{R}^{p\times p})
θ=(μ∈Rp,Σ∈Rp×p),则有概率密度函数:
p
(
x
∣
θ
)
=
1
(
2
π
)
p
2
∣
Σ
∣
1
2
e
x
p
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
p(x|\theta)=\frac{1}{(2\pi)^{\frac{p}{2}}|\Sigma|^{\frac{1}{2}}}exp(-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu))
p(x∣θ)=(2π)2p∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
协方差矩阵可以分解为
Σ
=
Q
Λ
Q
T
\Sigma=Q\Lambda Q^{T}
Σ=QΛQT,其中,
Q
Q
T
=
I
QQ^{T}=I
QQT=I,
Q
=
[
q
1
,
.
.
.
,
q
p
]
Q=[q_{1},...,q_{p}]
Q=[q1,...,qp],其中
Q
Q
Q为
(
p
×
p
)
(p\times p)
(p×p),而
Λ
\Lambda
Λ为:
因此有:
其中,对角阵
Λ
−
1
\Lambda^{-1}
Λ−1为:
因此,
Σ
−
1
=
∑
i
=
1
p
q
i
1
λ
i
q
i
T
\Sigma^{-1}=\sum_{i=1}^{p}q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}
Σ−1=∑i=1pqiλi1qiT,代入
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
(x-\mu)^{T}\Sigma^{-1}(x-\mu)
(x−μ)TΣ−1(x−μ)得到:
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
=
(
x
−
μ
)
T
[
∑
i
=
1
p
q
i
1
λ
i
q
i
T
]
(
x
−
μ
)
=
∑
i
=
1
p
(
x
−
μ
)
T
[
q
i
1
λ
i
q
i
T
]
(
x
−
μ
)
(x-\mu)^{T}\Sigma^{-1}(x-\mu)=(x-\mu)^{T}[\sum_{i=1}^{p}q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu)=\sum_{i=1}^{p}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu)
(x−μ)TΣ−1(x−μ)=(x−μ)T[i=1∑pqiλi1qiT](x−μ)=i=1∑p(x−μ)T[qiλi1qiT](x−μ)
进行替换,令
y
i
=
(
x
−
μ
)
T
q
i
y_{i}=(x-\mu)^{T}q_{i}
yi=(x−μ)Tqi,相当于先平移后投影:
- 让样本 x x x整体按照 μ \mu μ平移;
- 再向单位向量 q i q_{i} qi投影,可以得到, y 1 y_{1} y1是样本 x x x平移后在 q 1 q_{1} q1方向上的投影长度, y 2 y_{2} y2是样本 x x x平移后在 q 2 q_{2} q2方向上的投影长度;注意 q 1 q_{1} q1和 q 2 q_{2} q2是彼此正交的单位向量;
以
p
=
2
p=2
p=2为例,可以得到:
∑
i
=
1
2
(
x
−
μ
)
T
[
q
i
1
λ
i
q
i
T
]
(
x
−
μ
)
=
y
1
1
λ
1
y
1
T
+
y
2
1
λ
2
y
2
T
=
y
1
2
λ
1
+
y
2
2
λ
2
\sum_{i=1}^{2}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu)=y_{1}\frac{1}{\lambda_{1}}y_{1}^{T}+y_{2}\frac{1}{\lambda_{2}}y_{2}^{T}=\frac{y_{1}^{2}}{\lambda_{1}}+\frac{y_{2}^{2}}{\lambda_{2}}
i=1∑2(x−μ)T[qiλi1qiT](x−μ)=y1λ11y1T+y2λ21y2T=λ1y12+λ2y22
当
∑
i
=
1
2
(
x
−
μ
)
T
[
q
i
1
λ
i
q
i
T
]
(
x
−
μ
)
\sum_{i=1}^{2}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu)
∑i=12(x−μ)T[qiλi1qiT](x−μ)固定后,样本对应的二元高斯概率密度就可以得到具体值
p
(
x
∣
θ
)
=
v
a
l
u
e
p(x|\theta)=value
p(x∣θ)=value,即:对于满足
∑
i
=
1
2
(
x
−
μ
)
T
[
q
i
1
λ
i
q
i
T
]
(
x
−
μ
)
=
c
\sum_{i=1}^{2}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu)=c
∑i=12(x−μ)T[qiλi1qiT](x−μ)=c的所有样本,它们出现的概率都一样大;
进一步思考,即对于满足 y 1 2 λ 1 + y 2 2 λ 2 = c \frac{y_{1}^{2}}{\lambda_{1}}+\frac{y_{2}^{2}}{\lambda_{2}}=c λ1y12+λ2y22=c时的所有样本,样本出现的概率一样大;注意到 y 1 2 λ 1 + y 2 2 λ 2 = c \frac{y_{1}^{2}}{\lambda_{1}}+\frac{y_{2}^{2}}{\lambda_{2}}=c λ1y12+λ2y22=c正好是椭圆的方程;
椭圆方程的长轴短轴不再是经典的 x x x轴和 y y y轴,变成了向量 q 1 q_{1} q1和 q 2 q_{2} q2,椭圆在两个轴上的长度分别为 c λ 1 \sqrt{c\lambda_{1}} cλ1和 c λ 2 \sqrt{c\lambda_{2}} cλ2, y 1 y_{1} y1和 y 2 y_{2} y2则是 x o y xoy xoy空间下的样本 x x x在 q 1 q_{1} q1和 q 2 q_{2} q2上的投影长度,即样本 x x x以 q 1 q_{1} q1和 q 2 q_{2} q2为坐标系的坐标值;
对于 ∑ i = 1 2 ( x − μ ) T [ q i 1 λ i q i T ] ( x − μ ) \sum_{i=1}^{2}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu) ∑i=12(x−μ)T[qiλi1qiT](x−μ),每次固定常数 c c c后,相当于以 q 1 q_{1} q1和 q 2 q_{2} q2为轴, c λ 1 \sqrt{c\lambda_{1}} cλ1和 c λ 2 \sqrt{c\lambda_{2}} cλ2为轴长,画一个椭圆,这个椭圆上所有点出现的概率都相等;
设想一下,伴随 c c c的改变, ∑ i = 1 2 ( x − μ ) T [ q i 1 λ i q i T ] ( x − μ ) \sum_{i=1}^{2}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu) ∑i=12(x−μ)T[qiλi1qiT](x−μ)取值也在改变,于是椭圆在缩放,无数椭圆堆叠形成一个实心的"椭圆",而且注意, ∑ i = 1 2 ( x − μ ) T [ q i 1 λ i q i T ] ( x − μ ) \sum_{i=1}^{2}(x-\mu)^{T}[q_{i}\frac{1}{\lambda_{i}}q_{i}^{T}](x-\mu) ∑i=12(x−μ)T[qiλi1qiT](x−μ)越大,即椭圆越大,但 p ( x ∣ θ ) p(x|\theta) p(x∣θ)的取值反而减小,所以越大的椭圆上,点的出现概率越小;
实例演示
以二元高斯为例,设置以下参数进行演示:
import numpy as np
import matplotlib.pyplot as plt
from scipy import linalg
mean_1 = np.array([0, 0])
mean_2 = np.array([20, -20])
conv = np.array([[34, 12],
[12, 41]])
x_1, y_1 = np.random.multivariate_normal(mean=mean_1, cov=conv, size=4000).T
x_2, y_2 = np.random.multivariate_normal(mean=mean_2, cov=conv, size=4000).T
plt.plot(x_1, y_1, 'ro', alpha=0.05)
plt.plot(x_2, y_2, 'bo', alpha=0.05)
plt.gca().axes.set_xlim(-20, 40)
plt.gca().axes.set_ylim(-40, 20)
evalue, evector = linalg.eig(conv)
print(evalue)
print(evector)
plt.grid()
plt.show()
结果为:
[25.+0.j 50.+0.j]
[[-0.8 -0.6]
[ 0.6 -0.8]]
蓝色分布为原始的高斯分布,减去均值向量后,整体平移到 x o y xoy xoy坐标原点,即红色分布;
对协方差矩阵 Σ \Sigma Σ进行特征值分解得到特征向量 q 1 = [ − 0.8 , 0.6 ] T q_{1}=[-0.8,0.6]^{T} q1=[−0.8,0.6]T和 q 2 = [ − 0.6 , − 0.8 ] T q_{2}=[-0.6,-0.8]^{T} q2=[−0.6,−0.8]T,对应特征值为 λ 1 = 25 \lambda_{1}=25 λ1=25和 λ 2 = 50 \lambda_{2}=50 λ2=50;即在平移得到的红色分布上,有无数个以 [ 0 , 0 ] T [0,0]^{T} [0,0]T为中心, q 1 q_{1} q1和 q 2 q_{2} q2为轴的同心椭圆,椭圆的长短轴之比为 50 / 25 \sqrt{50}/\sqrt{25} 50/25,对于某个椭圆,其上的点出现概率都相等,而随着椭圆变大,样本出现的概率逐渐降低,即颜色从深变浅。