文章目录
一、混合高斯分布
1-1 GMM概要
在k-means中,每个数据样本属于某一个cluster,比如对于第1个数据,可以通过 r 1 = ( 0 , 1 , 0 ) r_1=(0,1,0) r1=(0,1,0)中的指示变量0,1来明确指出该数据属于哪个cluster。关于k-means可以参考我的另一篇博客。
在混合高斯分布(Gaussian Mixture Mode:GMM)中,每个数据样本也是属于某一个cluster,但它的指示变量不再是2元的01,而是用概率来表示,或者说用隐变量来表示。举个例子,数据 x 1 x_1 x1对应的隐变量为 z 1 z_1 z1,他的期望值可以表示为 E [ z 1 ] = ( 0.7 , 0.2 , 0.1 ) E[z_1]=(0.7, 0.2, 0.1) E[z1]=(0.7,0.2,0.1),即 0 < = z 1 k < = 1 0<=z_{1k}<=1 0<=z1k<=1。
下面的推导中会用到以下数学符号:
- x x x: D D D 维度的随机变量
- z z z: k k k维度的随机变量,也是模型的隐变量
- X = { x 1 , x 2 , . . . , x N } X = \{x_1, x_2, ..., x_N\} X={ x1,x2,...,xN}: N N N个数据观测数据
- K K K: cluster(聚类)的个数,已知
首先是GMM的概率密度函数:
p ( x ∣ π , μ , Σ ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(x|\pi,\mu,\Sigma) = \sum_{k=1}^K\pi_kN(x|\mu_k, \Sigma_k) p(x∣π,μ,Σ)=k=1∑KπkN(x∣μk,Σk)
可以明显看到,这是 K K K个高斯分布按比例加权求和的结果。下面用以3个1维高斯分布为例来说明:
import numpy as np
import matplotlib.pyplot as plt
K = 3
n = 301
mu = [-2, 0 ,2]
sigma = [0.5, 0.7, 1.5]
pi = [0.2, 0.3, 0.5]
intervals = np.linspace(-4, 7, n)
pdfs = np.zeros(shape = [n, K])
mix_pdf = np.zeros(shape = [n])
for k in range(K):
pdfs[:, k] = pi[k] * 1/(np.math.sqrt(2*np.math.pi)*sigma[k]) * np.exp(-(intervals-mu[k])**2 / (2*sigma[k]**2))
mix_pdf += pdfs[:, k]
plt.figure()
for k in range(K):
plt.plot(np.linspace(-4,7,n), pdfs[:, k])
plt.show()
plt.figure()
plt.plot(intervals, mix_pdf, c = "r")
plt.show()
下图表示3个1维单高斯分布的概率密度函数(还没有混合),其每个高斯分量的分配比例为 π = ( 0.2 , 0.3 , 0.5 ) \pi=(0.2, 0.3, 0.5) π=(0.2,0.3,0.5), 该比例同时也是每个高斯分量的积分结果,也就是其包围的面积。
混合之后得到的混合高斯分布概率密度函数如下图所示,积分结果为1。
1-2 由边缘概率引出的隐变量
如果用 p ( x ) p(x) p(x)表示某一数据的分布,我们可以通过边缘概率的计算和乘法公式导出该 p ( x ) p(x) p(x)
p ( x ) = ∑ z p ( x , z ) d z = ∑ z p ( x ∣ z ) p ( z ) d z . . . ( 1 ) p(x) = \sum^{}_{z}p(x,z)dz=\sum_{z}p(x|z)p(z)dz \space\space\space...(1) p(x)=z∑p(x,z)dz=z∑p(x∣z)p(z)dz ...(1)
下面我们重点讨论一下这里的 p ( z ) p(z) p(z)和 p ( x ∣ z ) p(x|z) p(x∣z).
首先我们引入变量 z k z_k zk,这里的 z k z_k zk可以参考k-means中的 r n k r_{nk} rnk,如果第 n n n个数据样本属于 k k k类,则 r n k = 1 r_{nk}=1 rnk=1,而这里的 z k z_k zk用随机变量 { 0 , 1 } \{0,1\} {
0,1}表示, z k ∈ { 0 , 1 } z_k\in\{0,1\} zk∈{
0,1} 并且 ∑ k z k = 1 \sum_kz_k=1 ∑kzk=1
我们考虑隐变量集合 z = { z 1 , z 2 , . . . z k , . . . , z K } z=\{z_1,z_2, ... z_k,...,z_K\} z={
z1,z2,...zk,...,zK}中的 z k z_k zk, z k z_k zk为1 的概率由混合系数 π k \pi_k πk来决定:
p ( z k = 1 ) = π k p(z_k=1)=\pi_k p(zk=1)=πk
很明显, π k \pi_k πk满足 0 ≤ π k ≤ 1 0\leq\pi_k\leq1 0≤πk≤1以及 ∑ k = 1 K π k = 1 \sum_{k=1}^{K}\pi_k=1 ∑k=1Kπk=1, 那么 p ( z ) p(z) p(z)就可以表示为:
p ( z ) = ∏ k = 1 K π k z k p(z)=\prod_{k=1}^{K}\pi_k^{z_k} p(z)=k=1∏Kπkzk
同时,在给定 z z z的条件下我们可以求得数据 x x x的条件概率分布,具体来讲,就是在给定条件 z k = 1 z_k=1 zk=1的条件下, x x x服从第 k k k个(高维或者1维)高斯分布:
p ( x ∣ z k = 1 ) = N ( x ∣ μ k , Σ k ) p(x|z_k=1)=N(x|\mu_k,\Sigma_k) p(x∣zk=1)=N(x∣μk,Σk)
结合上面的 p ( z ) = ∏ k = 1 K π k z k p(z)=\prod_{k=1}^{K}\pi_k^{z_k} p(z)=∏k=1Kπkzk,我们可以得到:
p ( x ∣ z ) = ∏ k = 1 K N ( x ∣ μ k , Σ k ) z k p(x|z)=\prod_{k=1}^{K}N(x|\mu_k, \Sigma_k)^{z_k} p(x∣z)=k=1∏KN(x∣μk,Σk)zk
将这里的 p ( z ) p(z) p(z), p ( x ∣ z ) p(x|z) p(x∣z)带入到(1)中,我们可以得到:
p ( x ) = ∑ z p ( x ∣ z ) p ( z ) d z = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(x)=\sum_zp(x|z)p(z)dz=\sum_{k=1}^{K}\pi_kN(x|\mu_k, \Sigma_k) p(x)=z∑p(x∣z)p(z)dz=k=1∑KπkN(x∣μk,Σk)
可以发现这个式子和混合高斯分布是一样的。
1-3 隐变量后验概率
我们可以通过 p ( z ) p(z) p(z)和 p ( x ∣ z ) p(x|z) p(x∣z),结合贝叶斯公式算出 z z z的后验概率 p ( z ∣ x ) p(z|x) p(z∣x),即可以通过观测数据 x x x得到 z z z的分布:
p ( z k = 1 ∣ x ) = p ( x , z k = 1 ) p ( x ) = p ( z k = 1 ) p ( x ∣ z k = 1 ) ∑ j = 1 K p ( z j = 1 ) p ( x ∣ z j = 1 ) = π k N ( x ∣ μ k , Σ k ) ∑ j = 1 K π j N ( x ∣ μ j , Σ j ) p(z_k=1|x)=\frac{p(x, z_k=1)}{p(x)}=\frac{p(z_k=1)p(x|z_k=1)}{\sum_{j=1}^{K}p(z_j=1)p(x|z_j=1)}\\ =\frac{\pi_kN(x|\mu_k, \Sigma_k)}{\sum_{j=1}^K\pi_jN(x|\mu_j,\Sigma_j)} p(zk=1∣x)=p(x)p(x,zk=1)=∑j=1Kp(zj=1)p(x∣zj=1)p(zk=1)p(x∣zk=1)=∑j=1KπjN(x∣μj,Σj)πkN(x∣μk,Σ