今天是2020年3月5日星期四。预计开学时间不会早于四月初,真是好消息,可以有大把的时间整理知识点(实际上发文章的时间都6月6号了,希望9月份能开学啊,不耽误找工作~)。每次导师找,整个人会变的特别烦躁,烦躁加不安,其它事情一点都做不下去,焦虑。改小论文这几天耽误了一些时间,查了些EM算法的例子,怎样理解这个算法呢?通过这周的学习,觉得数学公式有点唬人,但却是理解该算法最好的形式。

  刚开始对这个算法一无所知,通过知乎、CSDN看资料,看白板视频,看讲解例子。越看例子越觉得负担重,因为要先把例子理解了,再去理解这个知识点。例子不能彻底理解,知识点也走不下去,倒不如一遍一遍的看数学公式。看完了公式,再去看例子,朦朦胧胧的就懂了。之后再去看白板视频,绝对是不一样的体验。

  先看别人的视频,然后自己去推导公式,你会觉得困难摸不到头脑;先自己去推导公式,再去看别人视频,你会觉得心旷神怡一目了然。第一种做法,往往看视频的时候就是懵懵哒,抓不住别人讲述的重点;第二种做法,类似于先学会了九阳神功,再去和别人切磋武艺。初心是将《统计学习方法》这本书做详细的心得笔记,现在有点松动,希望能坚持下去。


GitHub:https://github.com/wangzycloud/statistical-learning-method


EM算法

引入

  EM算法应该作为一种通用的求解方法,用于含有隐变量的概率模型参数的极大似然估计。拆开来看,这句话是应用在概率模型上的;用来估计概率模型的参数;类似于极大似然估计;求解的是含有隐变量的概率模型。那么问题来了,什么是该有隐变量的概率模型?概率模型是什么样子?极大似然估计?该方法是怎么进行计算的呢?

  通常来讲,EM算法是一种迭代算法,每次迭代由两步组成:E步,求期望;M步:求极大,所以该算法被称为期望极大算法。说该算法可以作为一种通用的求解方法,原因在于:该算法不是NBM、LR、SVM这类解决相应场景的模型,而是可以用于求解含有隐变量概率模型的参数估计。

  提到模型,脑子里第一印象有判别模型、生成模型。这里的概率模型自然和判别模型、生成模型不在同一个层次。在我的理解里,概率模型是类似于朴素贝叶斯算法这种,用概率来表示最后的分类标准;而不是感知机、SVM这种利用确信度来表达分类结果的模型。再考虑一下朴素贝叶斯算法,特征向量里的随机变量X,以及表示类别的随机变量Y,都是可以被观测到变量。在所有随机变量都可以观测到的情况下,我们可以利用极大似然估计来求解模型的参数。对于含有隐变量的概率模型,要如何求解呢?含有隐变量意味着不能观测到数据的全部状况,也就没有办法直接利用极大似然估计来求解。

  现在看到的EM算法,就是一种求解含有隐变量的概率模型参数的极大似然估计方法。

EM算法

  书本上三硬币模型,挺好的~代码已整理到github中,实际上就是把书本公式用代码实现出来...难度不大。

  文中提到,该问题没有解析解,只有通过迭代的方法进行求解。仔细观察一下公式(9.4),log(x)作用在公式(9.3)上,很明显log连乘可以变成连加,但连加式子中的每个项仍然是连加式。好像是因为这个原因,就无法得到解析解了。个人对数学不感冒,只能硬性的记住“不容易求解析解”这点,至于原因,实在是搞不懂啊。虽然无法得到解析解,但我们可以通过EM算法求解,大致步骤如下:

  一般的,用Y表示观测随机变量的数据,Z表示隐随机变量的数据,Y和Z连在一起称为完全数据,观测数据Y又称为不完全数据。假设给定观测数据Y,其概率分布是P(Y|θ),其中θ是需要估计的模型参数,那么不完全数据Y的似然函数是P(Y|θ),对数似然函数L(θ)=logP(Y|θ),假设Y和Z的联合概率分布是P(Y,Z|θ),那么完全数据的对数似然函数是logP(Y,Z|θ)。

  EM算法通过迭代求解L(θ)=logP(Y|θ)的极大似然估计,每次迭代由两个步骤:E步,M步组成。

  文中对Q函数做了具体解释:

  关于EM算法的几点说明,应该挺好理解的吧。步骤(1),迭代求解的方式需要一步步接近极值,是在某个解的基础上,进一步求解。在最开始的时候,初值是任意选择的,并且正是因为初值任意选择,容易陷入局部极值,也就是对初值的选择非常敏感(对比一下梯度下降的过程)。步骤(2),我们要清楚,求解的对象是变元参数θ。步骤(3),极大化的过程,详见下图~(θ,L(θ))图像。步骤(4),迭代停止条件。

  EM算法的导出、收敛性,以及推广详见下图吧~搞了四五天,弄了个流程...

GMM高斯混合模型

  书中公式一大堆,不太友好,手写代码的过程,就是把书本公式复现了一遍。难度不大,我认为需要先了解GMM模型是啥,再通过例子,熟悉一下计算过程,就可以掌握了。

  还是从生成数据的角度看,由GMM模型生成一个数据,是要根据一个普通的多项式分布αk,来选择第k个高斯分布,分两步生成数据。但是,这里获得的数据,并不知道来自第几个αk,这就是隐变量了。

  对于高斯混合模型的参数估计,可以通过EM算法求解。

  1.明确隐变量,写出完全数据的对数似然函数。

  2.EM算法的E步:确定Q函数。

  3.确定EM算法的M步。

  具体公式(9.26)-公式(9.32)就不一一摘录了,github已复现。算法描述如下:

  本节整理的内容有些水...

09_EM算法的更多相关文章

  1. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  2. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  3. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. 红黑树——算法导论(15)

    1. 什么是红黑树 (1) 简介     上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...

  5. 散列表(hash table)——算法导论(13)

    1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...

  6. 虚拟dom与diff算法 分析

    好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM

  7. 简单有效的kmp算法

    以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...

  8. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  9. 46张PPT讲述JVM体系结构、GC算法和调优

    本PPT从JVM体系结构概述.GC算法.Hotspot内存管理.Hotspot垃圾回收器.调优和监控工具六大方面进行讲述.(内嵌iframe,建议使用电脑浏览) 好东西当然要分享,PPT已上传可供下载 ...

随机推荐

  1. 前端面试题-WebSocket的实现和应用

    (1)什么是WebSocket? WebSocket是HTML5中的协议,支持持久连续,http协议不支持持久性连接.Http1.0和HTTP1.1都不支持持久性的链接,HTTP1.1中的keep-a ...

  2. vue-cli 2.x 搭建项目

    一.vue-cli优势 1.成熟的vue项目架构设计 2.本地测试服务器 3.集成打包上线方案 二.系统要求 1.node.js 2. Git 3.node命令行终端 三.安装 1.安装vue-cli ...

  3. python函数总结,你值得拥有

    目录 函数总结 函数定义与结构 函数名的使用 函数的参数 名称空间与作用域 名称空间 作用域 函数嵌套 内置函数(globals( ),locals( )) global+nonlocal 可迭代对象 ...

  4. F. Dominant Indices

    题意:求每个点的子树中哪一层节点数最多,如果有节点数最多不唯一,取层数最小的. 题解:dus on tree 基本想法是对每一个节点都构建一个deep数组,然后从底向上更新过来,但是这样空间复杂度和时 ...

  5. HTML5移动端最新兼容问题解决方案

    1.安卓浏览器看背景图片,有些设备会模糊.用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网 ...

  6. 如何利用BeautifulSoup选择器抓取京东网商品信息

    昨天小编利用Python正则表达式爬取了京东网商品信息,看过代码的小伙伴们基本上都坐不住了,辣么多的规则和辣么长的代码,悲伤辣么大,实在是受不鸟了.不过小伙伴们不用担心,今天小编利用美丽的汤来为大家演 ...

  7. Lambda表达式用法大比较: Scala和Java 8

    最近几年Lambda表达式风靡于编程界. 很多现代编程语言都把它作为函数式编程的基本组成部分. 基于JVM的编程语言如Scala,Groovy还有Clojure把它们作为关键部分集成在语言中.现在Ja ...

  8. sku算法介绍及实现

    前言 做过电商项目前端售卖的应该都遇见过不同规格产品库存的计算问题,业界名词叫做sku(stock Keeping Unit),库存量单元对应我们售卖的具体规格,比如一部手机具体型号规格,其中ipho ...

  9. 微信小程序支付(企业支付给用户零钱)

    内容摘要:本案例客户端支付方式为微信小程序支付(JSAPI).商户运营一段时间后,在微信商户平台开通企业支付服务后,即可调用微信支付提供的企业付款接口将佣金等金额通过微信零钱返现给C端用户零钱. 服务 ...

  10. Jpa使用详解

    目录 ORM思想 1.ORM概述 2.为什么要使用ORM 3.常见的ORM框架 JPA简介 1.JPA概述 2.JPA的优势 3.JPA与hibernate的关系 JPA入门案例 1.搭建开发环境 常 ...