1. EM算法-数学基础
2. EM算法-原理详解
3. EM算法-高斯混合模型GMM
4. EM算法-高斯混合模型GMM详细代码实现
5. EM算法-高斯混合模型GMM+Lasso
1. 前言
GMM(Gaussian mixture model) 混合高斯模型在机器学习、计算机视觉等领域有着广泛的应用。其典型的应用有概率密度估计、背景建模、聚类等。
2. GMM介绍
高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况。
3. GMM原理解析
根据我们之前EM算法-原理详解,我们已经学习了EM算法的一般形式:
\[
Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)},\theta^{j})\;\;\;\;(1)
\]
\[
\sum\limits_{z}Q_i(z^{(i)}) =1
\]
\[
L(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)},z^{(i)}|\theta)}
\]
现在我们用高斯分布来一步一步的完成EM算法。
设有随机变量\(\boldsymbol{X}\),则混合高斯模型可以用下式表示:
\[
p(\boldsymbol{x}|\boldsymbol{\pi},\boldsymbol{\mu},\boldsymbol{\Sigma})=\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)
\]
\[ \sum_{k=1}^K\pi_k=1 \]
\[ 0<\pi_k<1 \]
其中\(\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)\)称为混合模型中的第\(k\)个分量(component)。可以看到\(\pi_k\)相当于每个分量\(\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)\)的权重
3.1 引入隐变量
我们引入一个隐变量\(z_{ik}\),\(z_{ik}\)的含义是样本\(x_i\)来自第\(k\)个模型的数据分布。
\[
z_{ik}=
\left \{\begin{array}{cc}
1, & if\ data\ item\ i\ comes\ from\ component\ k\\
0, & otherwises
\end{array}\right.
\]
则有
\[
P(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k) = \prod_{k=1}^K\prod_{i=1}^N[\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)]^{z_{ik}}=\prod_{k=1}^K\pi_k^{n_k}\prod_{i=1}^N[\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)]^{z_{ik}}\;\;\;\;(2)
\]
其中\(n_k=\sum\limits_{i=1}^Nz_{ik}\),\(\sum\limits_{k=1}^Kn_k=N\)
再对(2)进一步化简得到:
\[
P(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)=\prod_{k=1}^K\pi_k^{n_k}\prod_{i=1}^N[\frac{1}{\sqrt{2\pi}\boldsymbol{\Sigma_k}}exp(-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k})]^{z_{ik}}
\]
取对数log后:
\[ logP(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)=\sum_{k=1}^Kn_klog\pi_k+\sum_{i=1}^Nz_{ik}[log(\frac{1}{\sqrt{2\pi}})-log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k}] \]
3.2 确定E步极大似然函数
计算最大似然估计\(L(\theta,\theta^{(j)})\),\(j\)是第\(j\)次EM的过程,下式子中的\(E_Q\)是(1)中\(Q\)函数的期望值
\[
L(\theta,\theta^{(j)})=E_Q[logP(x,z|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)]
\]
\[
L(\theta,\theta^{(j)})=E_Q[\sum_{k=1}^Kn_klog\pi_k+\sum_{i=1}^Nz_{ik}[\frac{D}{2}log(2\pi)-\frac{1}{2}log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k}]]
\]
\[
L(\theta,\theta^{(j)})=\sum_{k=1}^K[\sum_{i=1}^N(E_Q(z_{ik}))log\pi_k+\sum_{i=1}^NE_Q(z_{ik})[\frac{D}{2}log(2\pi)-\frac{1}{2}log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k}]]
\]
我们记\(\gamma_{ik}=E_Q(z_{ik})\),\(n_k=\sum\limits_{i=1}^N\gamma_{ik}\)可以算出
\[
L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k+(\frac{D}{2}log(2\pi)-\frac{1}{2}(log(\boldsymbol{\Sigma_k})-\frac{{(x_i-\boldsymbol{\mu}_k})^2}{2\boldsymbol{\Sigma}_k})]
\]
因为\(\frac{D}{2}log(2\pi)\)是常数,忽略不计
\[
L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})]
\]
\[
\gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}
\]
3.3 确定M步,更新参数
M步的过程是最化大\(L(\theta, \theta^{j})\),求出\(\theta^{(j+1)}\)
\[
\theta^{j+1} = arg \max \limits_{\theta}L(\theta, \theta^{j})
\]
因为有
\[
n_k=\sum_{i=1}^N\gamma_{ik}
\]
通过\(L(\theta, \theta^{j})\)对\(\mu_k\),\(\Sigma_k\)求偏倒等于0得到
\[
\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i
\]
\[
\Sigma_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2
\]
\[ \pi_k=\frac{n_k}{N} \]
4. GMM算法流程
输入:观测数据\(x_1,x_2,x_3,...,x_N\)
输出:GMM的参数
- 初始化参数
- E步:根据当前模型,计算模型\(k\)对\(x_i\)的影响
\[ \gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)} \] - M步:计算\(\mu_{k+1},\Sigma_{k+1}^2,\pi_{k+1}\)。
\[ n_k=\sum_{i=1}^N\gamma_{ik} \]
\[ \mu_{k+1}=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i \]
\[ \Sigma_{k+1}^2=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2 \]
\[ \pi_{k+1}=\frac{n_k}{N} \]
- 重复2,3两步直到收敛
来源:https://www.cnblogs.com/huangyc/p/10125117.html