1. EM算法-数学基础

2. EM算法-原理详解

3. EM算法-高斯混合模型GMM

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

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

1. 前言

概率模型有时既含有观测变量(observable variable),又含有隐变量或潜在变量(latent variable),如果仅有观测变量,那么给定数据就能用极大似然估计或贝叶斯估计来估计model参数;但是当模型含有隐变量时,需要一种含有隐变量的概率模型参数估计的极大似然方法估计——EM算法

2. EM算法原理

EM算法称为期望极大值算法(expectation maximizition algorithm,EM),是一种启发式的迭代算法。

EM算法的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。

可以通过K-Means算法来简单理解EM算法的过程。

E步:

在初始化K个中心点后,我们对所有的样本归到K个类别。

M步:

在所有的样本归类后,重新求K个类别的中心点,相当于更新了均值。

3. EM算法公式

对于\(m\)个样本观察数据\(x=(x^{(1)},x^{(2)},...x^{(m)})\)中,找出样本的模型参数\(\theta\),极大化模型分布的对数似然函数如下,假设数据中有隐含变量\(z=(z^{(1)},z^{(2)},...z^{(m)})\)

\[
L(\theta) = \sum\limits_{i=1}^m logP(x^{(i)}|\theta)
\]
加入隐含变量公式变为如下,注意到下式中\(Q_i(z(i))\)是一个分布,因此\(\sum Q_i(z(i))logP(x(i),z(i)|θ)\)可以理解为\(logP(x(i),z(i)|θ)\)基于条件概率分布\(Q_i(z(i))\)的期望。

\[
Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)},\theta)
\]

\[
L(\theta) = \sum\limits_{i=1}^m log\sum\limits_{z^{(i)}}Q_i(z^{(i)})P(x^{(i)},z^{(i)}|\theta)\;\;\;s.t.\sum\limits_{z}Q_i(z^{(i)}) =1\;\;\;\;\;(1)
\]

根据Jensen不等式,(1)式变为(2)
\[
E [f \left ( g(X) \right ) ] \ge f \left (E[g(X)] \right )
\]
\[
L(\theta) = \sum\limits_{i=1}^m log\sum\limits_{z^{(i)}}Q_i(z^{(i)})P(x^{(i)},z^{(i)}|\theta)\ge\sum\limits_{i=1}^m \sum\limits_{z^{(i)}}Q_i(z^{(i)})logP(x^{(i)},z^{(i)}|\theta)\;\;\;s.t.\sum\limits_{z}Q_i(z^{(i)}) =1\;\;\;\;\;(2)
\]

4. EM算法流程

输入:观察数据\(x=(x^{(1)},x^{(2)},...x^{(m)})\),联合分布\(p(x,z|\theta)\), 条件分布\(p(z|x,\theta)\), EM算法退出的阈值\(\gamma\)。

  1. 随机初始化模型参数\(\theta\)的初值\(\theta^0\)。
  2. E步:计算联合分布的条件概率期望
    \[
    Q_i(z^{(i)}) = P( z^{(i)}|x^{(i)},\theta^{j})
    \]
    \[
    L(\theta, \theta^{j}) = \sum\limits_{i=1}^m\sum\limits_{z^{(i)}}Q_i(z^{(i)})log{P(x^{(i)},z^{(i)}|\theta)}
    \]
  3. M步:极大化\(L(\theta,\theta^j)\),得到\(θ^{j+1}\):
    \[
    \theta^{j+1} = arg \max \limits_{\theta}L(\theta, \theta^{j})
    \]
  4. 重复2,3两步,直到极大似然估计\(L(\theta,\theta^j)\)的变化小于\(\gamma\)

5. 总结

如果我们从算法思想的角度来思考EM算法,我们可以发现我们的算法里已知的是观察数据,未知的是隐含数据和模型参数,在E步,我们所做的事情是固定模型参数的值,优化隐含数据的分布,而在M步,我们所做的事情是固定隐含数据分布,优化模型参数的值。

本节介绍的EM算法是通用的EM算法框架,其实EM算法有很多实现方式,其中比较流行的一种实现方式是高斯混合模型(Gaussian Mixed Model)。

2. EM算法-原理详解的更多相关文章

  1. EM算法原理详解

    1.引言 以前我们讨论的概率模型都是只含观测变量(observable variable), 即这些变量都是可以观测出来的,那么给定数据,可以直接使用极大似然估计的方法或者贝叶斯估计的方法:但是当模型 ...

  2. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  3. [置顶] Isolation Forest算法原理详解

    本文只介绍原论文中的 Isolation Forest 孤立点检测算法的原理,实际的代码实现详解请参照我的另一篇博客:Isolation Forest算法实现详解. 或者读者可以到我的GitHub上去 ...

  4. DQN算法原理详解

    一. 概述 强化学习算法可以分为三大类:value based, policy based 和 actor critic. 常见的是以DQN为代表的value based算法,这种算法中只有一个值函数 ...

  5. AAC解码算法原理详解

  6. 网络最大流问题之Ford-Fulkerson算法原理详解

    前言 最大流问题是网络优化中典型的问题,用形象的语言来描述就是在满足容量约束的前提下将尽可能多的流从源节点(始点)到汇节点(终点).解决此问题的经典方法很多,本文介绍广为人熟知的Ford-Fulker ...

  7. hash算法原理详解

    转载出处http://blog.csdn.net/tanggao1314/article/details/51457585 一.概念 哈希表就是一种以 键-值(key-indexed) 存储数据的结构 ...

  8. [置顶] Isolation Forest算法实现详解

    本文算法完整实现源码已开源至本人的GitHub(如果对你有帮助,请给一个 star ),参看其中的 iforest 包下的 IForest 和 ITree 两个类: https://github.co ...

  9. Isolation Forest算法实现详解

    本文介绍的 Isolation Forest 算法原理请参看我的博客:Isolation Forest异常检测算法原理详解,本文中我们只介绍详细的代码实现过程. 1.ITree的设计与实现 首先,我们 ...

随机推荐

  1. git学习笔记(二)—— 创建版本库&&版本管理

    一.创建版本库 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: mkdir gitHub_CXWcd gitHub_CXW git init Initialized empty G ...

  2. openstack neutron 二/三层网络实现

    引用声明:https://zhangchenchen.github.io/2017/02/12/neutron-layer2-3-realization-discovry/ 一.概述 Neutron是 ...

  3. 【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL

    目录结构: contents structure [-] SprinigMVC是什么 SpringMVC工作原理 @Controller和@RequestMapping注解 @Controller注解 ...

  4. 巧用linux服务器的/dev/shm/

    巧用linux服务器的/dev/shm/,如果合理使用,可以避开磁盘IO不给力,提高网站访问速度. 首先让我们认识一下,什么是tmpfs和/dev/shm/? tmpfs是Linux/Unix系统上的 ...

  5. MVC摘记

    2013年9月23日18:04:06 直接cshtml页面的js中使用     var customerId = @(ViewBag.Oppotunity as OppotunityDto==null ...

  6. SQLServer2008 全文检索摘记

    最近在做全文搜索的内容,google了一下全文检索,发现了一些问题,现在总结如下: 全文索引和查询概念(摘自SQL 联机帮助)SQL Server 2008 为应用程序和用户提供了对 SQL Serv ...

  7. Java Nashorn--Part 5

    Nashorn 的高级应用 Nashorn 是一个复杂的编程环境,它被设计为一个强大的平台,用于部署应用程序,并与Java具有极大的互操作性. 让我们来看一些更高级的用于 JavaScript 到 J ...

  8. Fiddler高级用法-设置断点

    我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改 ...

  9. 【转载】centos 安装及配置 mysql5.5.3 - rpm安装server和client

    安装 https://blog.csdn.net/cxy1238/article/details/2518480 1. 设置root用户的密码 方法一: # mysqladmin -u root -p ...

  10. 史上最简单的 GitHub 教程

    史上最简单的 GitHub 教程 温馨提示:本系列博文已经同步到 GitHub,如有需要的话,欢迎大家到「github-tutorial」进行Star和Fork操作! 1 简介 GitHub 是一个面 ...