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的参数

  1. 初始化参数
  2. 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)}
    \]
  3. 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}
\]

  1. 重复2,3两步直到收敛

3. EM算法-高斯混合模型GMM的更多相关文章

  1. 6. EM算法-高斯混合模型GMM+Lasso详细代码实现

    1. 前言 我们之前有介绍过4. EM算法-高斯混合模型GMM详细代码实现,在那片博文里面把GMM说涉及到的过程,可能会遇到的问题,基本讲了.今天我们升级下,主要一起解析下EM算法中GMM(搞事混合模 ...

  2. 5. EM算法-高斯混合模型GMM+Lasso

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-GMM代码实现 5. EM算法-高斯混合模型+Lasso 1. 前言 前面几篇博文对EM算法和G ...

  3. 4. EM算法-高斯混合模型GMM详细代码实现

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 EM ...

  4. EM算法和高斯混合模型GMM介绍

    EM算法 EM算法主要用于求概率密度函数参数的最大似然估计,将问题$\arg \max _{\theta_{1}} \sum_{i=1}^{n} \ln p\left(x_{i} | \theta_{ ...

  5. 高斯混合模型GMM与EM算法的Python实现

    GMM与EM算法的Python实现 高斯混合模型(GMM)是一种常用的聚类模型,通常我们利用最大期望算法(EM)对高斯混合模型中的参数进行估计. 1. 高斯混合模型(Gaussian Mixture ...

  6. 贝叶斯来理解高斯混合模型GMM

    最近学习基础算法<统计学习方法>,看到利用EM算法估计高斯混合模型(GMM)的时候,发现利用贝叶斯的来理解高斯混合模型的应用其实非常合适. 首先,假设对于贝叶斯比较熟悉,对高斯分布也熟悉. ...

  7. 高斯混合模型 GMM

    本文将涉及到用 EM 算法来求解 GMM 模型,文中会涉及几个统计学的概念,这里先罗列出来: 方差:用来描述数据的离散或波动程度. \[var(X) =  \frac{\sum_{i=1}^N( X_ ...

  8. Spark2.0机器学习系列之10: 聚类(高斯混合模型 GMM)

    在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法:      (1)K-means      (2)Latent Dirichlet allocation (LDA)  ...

  9. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

随机推荐

  1. ROS学习(十二)—— 编写简单的消息发布器和订阅器(C++)

    一.创建发布器节点 1 节点功能: 不断的在ROS网络中广播消息 2 创建节点 (1)打开工作空间目录 cd ~/catkin_ws/src/beginner_tutorials 创建一个发布器节点( ...

  2. SpringBoot配置属性之Migration

    SpringBoot配置属性系列 SpringBoot配置属性之MVC SpringBoot配置属性之Server SpringBoot配置属性之DataSource SpringBoot配置属性之N ...

  3. openstack nova 深入

    一.概述: 由nova --debug list查看到: #nova --debug list DEBUG (session:195) REQ: curl -g -i -X GET http://19 ...

  4. 创建在“system.net/defaultProxy”配置节中指定的Web代理时出错解决办法。

    出现这种问题会有很多原因,大致解决方法 方法1:在CMD下输入netsh winsock reset命令 简单来说netsh winsock reset命令含义是重置 Winsock 目录.如果一台机 ...

  5. 转 linux进程内存到底怎么看 剖析top命令显示的VIRT RES SHR值

    引 言: top命令作为Linux下最常用的性能分析工具之一,可以监控.收集进程的CPU.IO.内存使用情况.比如我们可以通过top命令获得一个进程使用了多少虚拟内存(VIRT).物理内存(RES). ...

  6. Android Studio多Module开发需要注意的问题

    多module开发,其中的一个为入口module,其他module为独立的“应用”(library) 1.在原有的项目导入另外个项目的module为主项目的次module,即在A项目中添加一个启动B项 ...

  7. 使用swift和rails来实现ios账号系统

    前不久看到这样一篇教程User Accounts on iOS with Ruby on Rails and Swift,里面描述了如何使用swift和rails来前后台配合来实现一个简单的类似twi ...

  8. Groovy 学习手册(3)

    五. Groovy 的设计模式 设计模式是一种非常好的方式,可以使你的代码变得实用,可读又具有扩展性.跟 Java 相比,在 Groovy 里使用设计模式使代码更加简洁和容易. 1. 策略模式 设想一 ...

  9. java-Spring 管理bean例子

    Spring 通过2种方式管理bean 首先要导入Spring的包,(Spring.jar和commonslogging.jar) 或加载分开的... 在src目录下建立applicationCont ...

  10. CSS加DIV布局

    第一种: <div> <div class="right"> <p></p> <p></p> <p&g ...