EM算法(学习笔记)
本文是自己的学习笔记,很多内容与参考文献相同,如有侵权即刻删除
EM算法基本思想
首先根据己经给出的观测数据,估计出模型参数的值;然后再依据上一步估计出的参数值估计缺失数据的值,再根据估计出的缺失数据加上之前己经观测到的数据重新再对参数值进行估计,然后反复迭代,直至最后收敛,迭代结束。
EM算法问题描述
有100个男生和100个女生的身高,但是不知道这200个数据中哪个是男生的身高,哪个是女生的身高,即抽取得到的每个样本都不知道是从哪个分布中抽取的。这时候需要估计样本的分布和模型的参数。
EM算法流程
(1)初始化参数:先初始化男生身高的正态分布的参数
(2)计算每一个人更可能属于男生分布或者女生分布;
(3)通过分为男生的n个人来重新估计男生身高分布的参数(最大似然估计),女生分布也按照相同的方式估计出来,更新分布。
(4)这时候两个分布的概率也变了,然后重复步骤(1)至(3),直到参数不发生变化为止。
当样本分布已知时,求样本的模型参数θ, 极大化模型分布的对数似然函数如下:θ^=argmax∑i=1nlogp(xi;θ)\widehat{\theta}=argmax\sum_{i=1}^n{log{p(x_i;\theta)}}θ=argmaxi=1∑nlogp(xi;θ)其中x=(x1,x2,...xn)x=(x_1,x_2,...x_n)x=(x1,x2,...xn)为n个样本的观测数据
当样本分布未知时即可认为在原分布上存在一些未知分布的观测样本,此时目标函数变为:θ^=argmax∑i=1nlogp(xi;θ)=argmax∑i=1nlog∑zip(xi;zi;θ)\widehat{\theta}=argmax\sum_{i=1}^n{log{p(x_i;\theta)}}=argmax\sum_{i=1}^n{log{\sum_{z_i}}p(x_i;z_i;\theta)}θ=argmaxi=1∑nlogp(xi;θ)=argmaxi=1∑nlogzi∑p(xi;zi;θ)
其中z=(z1,z2,...zn)z=(z_1,z_2,...z_n)z=(z1,z2,...zn)为未观察到的隐含数据。
由于上式无法直接计算,因此使用Jensen不等式进行缩放:
先简述Jensen不等式的定义:
如果函数f是凸函数,X是随机变量,那么E[f(x)]≥f(E[x])E[f(x)]\geq f(E[x])E[f(x)]≥f(E[x])。当且仅当X是常量时,该式取等号。当函数f是凹函数时,E[f(x)]≤f(E[x])E[f(x)] \leq f(E[x])E[f(x)]≤f(E[x])。当且仅当X是常量时,该式取等号。
引入一个未知的新的分布Qi(zi)Q_i(z_i)Qi(zi)
∑i=1nlog∑zip(xi;zi;θ)=∑i=1nlog∑ziQi(zi)p(xi;zi;θ)Qi(zi)\sum_{i=1}^n{log{\sum_{z_i}}p(x_i;z_i;\theta)}=\sum_{i=1}^n{log{\sum_{z_i}}Q_i(z_i)\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}}i=1∑nlogzi∑p(xi;zi;θ)=i=1∑nlogzi∑Qi(zi)Qi(zi)p(xi;zi;θ)
由于p(xi;zi;θ)Qi(zi)\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}Qi(zi)p(xi;zi;θ)的期望为∑ziQi(zi)p(xi;zi;θ)Qi(zi)\sum_{z_i}Q_i(z_i)\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}∑ziQi(zi)Qi(zi)p(xi;zi;θ),则原式变为∑i=1nlog(E(p(xi;zi;θ)Qi(zi)))\sum_{i=1}^{n}{log(E(\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}))}∑i=1nlog(E(Qi(zi)p(xi;zi;θ))),由于log(.)log(.)log(.)的二阶导数小于0,为凹函数,则根据Jensen不等式可得:
∑i=1nlog(E(p(xi;zi;θ)Qi(zi)))≥∑i=1nE(log(p(xi;zi;θ)Qi(zi)))=∑i=1n∑ziQi(zi)log(p(xi;zi;θ)Qi(zi))\sum_{i=1}^{n}{log(E(\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}))} \geq \sum_{i=1}^{n}{E(log(\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}))}=\sum_{i=1}^{n}{\sum_{z_i}Q_i(z_i)log(\frac{p(x_i;z_i;\theta)}{Q_i(z_i)})}i=1∑nlog(E(Qi(zi)p(xi;zi;θ)))≥i=1∑nE(log(Qi(zi)p(xi;zi;θ)))=i=1∑nzi∑Qi(zi)log(Qi(zi)p(xi;zi;θ))
当Jensen不等式取等号时,有p(xi;zi;θ)Qi(zi)=c\frac{p(x_i;z_i;\theta)}{Q_i(z_i)}=cQi(zi)p(xi;zi;θ)=c,ccc为常数。又因为Qi(zi)Q_i(z_i)Qi(zi)是一个分布,所以∑ziQi(zi)=1\sum_{z_i}{Q_i(z_i)}=1∑ziQi(zi)=1可得
p(xi;zi;θ)=c×Qi(zi)p(x_i;z_i;\theta)=c \times Q_i(z_i)p(xi;zi;θ)=c×Qi(zi)
两边同时对变量z求和得
∑zip(xi;zi;θ)=c∑ziQi(zi)=c\sum_{z_i}{p(x_i;z_i;\theta)}=c\sum_{z_i}{Q_i(z_i)}=czi∑p(xi;zi;θ)=czi∑Qi(zi)=c Qi(zi)=p(xi;zi;θ)∑zip(xi;zi;θ)=p(xi;zi;θ)p(xi;θ)=p(zi∣xi;θ)Q_i(z_i)=\frac{p(x_i;z_i;\theta)}{\sum_{z_i}{p(x_i;z_i;\theta)}}=\frac{p(x_i;z_i;\theta)}{p(x_i;\theta)}=p(z_i|x_i;\theta)Qi(zi)=∑zip(xi;zi;θ)p(xi;zi;θ)=p(xi;θ)p(xi;zi;θ)=p(zi∣xi;θ)
要使Jensen不等式等号成立(使函数的下界最大)则有Qi(zi)=p(zi∣xi;θ)Q_i(z_i)=p(z_i|x_i;\theta)Qi(zi)=p(zi∣xi;θ)。当θ\thetaθ已知时,Qi(zi)Q_i(z_i)Qi(zi)就变成求一个后验概率。得出Qi(zi)Q_i(z_i)Qi(zi)后就可以重新计算其下界:∑i=1n∑ziQi(zi)log(p(xi;zi;θ)Qi(zi))\sum_{i=1}^{n}{\sum_{z_i}Q_i(z_i)log(\frac{p(x_i;z_i;\theta)}{Q_i(z_i)})}i=1∑nzi∑Qi(zi)log(Qi(zi)p(xi;zi;θ))
从而更新参数θ\thetaθ,如此迭代直到收敛。
最后插一个例子助于理解EM
-如何感性地理解EM算法
参考文献:
-EM算法详解
-EM算法原理总结
-EM算法学习(Expectation Maximization Algorithm)
EM算法(学习笔记)相关推荐
- EM算法学习笔记与三硬币模型推导
最近接触了pLSA模型,由于该模型中引入了主题作为隐变量,所以需要使用期望最大化(Expectation Maximization)算法求解. 本文简述了以下内容: 为什么需要EM算法 EM算法的推导 ...
- 大顶堆删除最大值_算法学习笔记(47): 二叉堆
堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...
- Manacher算法学习笔记 | LeetCode#5
Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...
- 数据结构与算法学习笔记之 从0编号的数组
数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...
- 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序
拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...
- 算法学习笔记:对指定金额计算最少钞票数
算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...
- matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记
关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...
- 机器学习篇01:在线学习的支持向量机算法学习笔记
在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...
最新文章
- 数据结构源码笔记(C语言):英文单词按字典序排序的基数排序
- zwpython_零起点Python大数据与量化交易
- Java官方相关资源文件的获取教程
- Java学习笔记——模块化
- Python中类与对象的关系
- 幼儿园故事导入语案例_幼儿园小班安全教案
- 无法启动SQL Server 2005中的SQL Server(MSSQLSERVER)服务--zt
- python中变量怎么使用_python中变量怎么使用
- 安装LoadRunner 11时弹窗提示Micosoft Visual C++ 2005 SP1 可再发行组件包(X86):'命令行选项语法错误。键入命令 / ? 可获得帮助信息'。
- __ieee80211_data_to_8023
- linux mono 安装
- Linux iio驱动学习
- IDEA使用database时,连接MySQL后schemas不显示数据库名的情况
- h5 和 微信小程序添加emoji表情处理
- 匿名内部类的定义格式
- [蓝桥杯python] 粘木棍:有N根木棍,需要将其粘贴成M个长木棍,使得最长的和最短的的差距最小。
- 纯前端技术裁切合并音频方式实现
- 怎么在oracle里执行sql语句,在Oracle中执行动态SQL的几种方法
- 红米k30 允许调用gpu调试层_记一次APP的so层算法逆向(六)
- ToB 产品拆解—Temu 商家管理后台