EM算法在GMM中的应用与python实现

本文详细介绍了EM算法在高斯混合模型(GMM)中的应用,从混合高斯分布的概要、边缘概率和隐变量、后验概率、完整与不完整数据集的概念,到最大似然估计。接着,通过推导得出μ、Σ和π的最优解,并解释了EM算法在GMM参数估计中的步骤。最后,提到了Python代码实现的概述。
摘要由CSDN通过智能技术生成


一、混合高斯分布

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=1Kπ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)=zp(x,z)dz=zp(xz)p(z)dz   ...(1)
下面我们重点讨论一下这里的 p ( z ) p(z) p(z) p ( x ∣ z ) p(x|z) p(xz).

首先我们引入变量 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πk1以及 ∑ 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=1Kπ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(xzk=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(xz)=k=1KN(xμk,Σk)zk
将这里的 p ( z ) p(z) p(z) p ( x ∣ z ) p(x|z) p(xz)带入到(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)=zp(xz)p(z)dz=k=1KπkN(xμk,Σk)
可以发现这个式子和混合高斯分布是一样的。

1-3 隐变量后验概率

我们可以通过 p ( z ) p(z) p(z) p ( x ∣ z ) p(x|z) p(xz),结合贝叶斯公式算出 z z z的后验概率 p ( z ∣ x ) p(z|x) p(zx),即可以通过观测数据 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=1x)=p(x)p(x,zk=1)=j=1Kp(zj=1)p(xzj=1)p(zk=1)p(xzk=1)=j=1KπjN(xμj,Σj)πkN(xμk,Σ

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值