《统计学习方法》 第九章 EM算法(原理+代码)
EM算法
EM算法是含有隐变量的概率模型极大似然估计或极大后验概率估计的迭代算法
含有隐变量的概率模型的数据表示为 θ \theta θ
这里, Y Y Y是观测变量的数据, Z Z Z是隐变量的数据, θ \theta θ 是模型参数
EM算法通过迭代求解观测数据的对数似然函数
L ( θ ) = log P ( Y ∣ θ ) {L}(\theta)=\log {P}(\mathrm{Y} | \theta) L(θ)=logP(Y∣θ)的极大化,实现极大似然估计
每次迭代包括两步
E E E步,求期望
即求 l o g P ( Z ∣ Y , θ ) logP\left(Z | Y, \theta\right) logP(Z∣Y,θ) )关于 P ( Z ∣ Y , θ ( i ) ) P\left(Z | Y, \theta^{(i)}\right) P(Z∣Y,θ(i)))的期望:
Q ( θ , θ ( i ) ) = ∑ Z log P ( Y , Z ∣ θ ) P ( Z ∣ Y , θ ( i ) ) Q\left(\theta, \theta^{(i)}\right)=\sum_{Z} \log P(Y, Z | \theta) P\left(Z | Y, \theta^{(i)}\right) Q(θ,θ(i))=Z∑logP(Y,Z∣θ)P(Z∣Y,θ(i))
称为 Q Q Q函数
这里 θ ( i ) \theta^{(i)} θ(i)是参数的现估计值
M M M步,求极大
即极大化 Q Q Q函数得到参数的新估计值
θ ( i + 1 ) = arg max θ Q ( θ , θ ( i ) ) \theta^{(i+1)}=\arg \max _{\theta} Q\left(\theta, \theta^{(i)}\right) θ(i+1)=argθmaxQ(θ,θ(i))
在构建具体的EM算法时,重要的是定义 Q Q Q函数
每次迭代中,EM算法通过极大化 Q Q Q函数来增大对数似然函数 L ( θ ) {L}(\theta) L(θ)
E M EM EM算法在每次迭代后均提高观测数据的似然函数值,即
P ( Y ∣ θ ( i + 1 ) ) ⩾ P ( Y ∣ θ ( i ) ) P\left(Y | \theta^{(i+1)}\right) \geqslant P\left(Y | \theta^{(i)}\right) P(Y∣θ(i+1))⩾P(Y∣θ(i))
在一般条件下EM算法是收敛的,但不能保证收敛到全局最优。
E M EM EM算法应用极其广泛
主要应用于含有隐变量的概率模型的学习
高斯混合模型的参数估计是EM算法的一个重要应用
隐马尔可夫模型的非监督学习也是EM算法的一个重要应用
E M EM EM算法还可以解释为 F F F函数的极大-极大算法
E M EM EM算法有许多变形,如GEM算法
G E M GEM GEM算法的特点是每次迭代增加 F F F函数值(并不一定是极大化 F F F函数),从而增加似然函数值
P ( Y ∣ θ ) = ∏ [ π p y i ( 1 − p ) 1 − y i + ( 1 − π ) q y i ( 1 − q ) 1 − y i ] P(Y|\theta) = \prod[\pi p^{y_i}(1-p)^{1-y_i}+(1-\pi) q^{y_i}(1-q)^{1-y_i}] P(Y∣θ)=∏[πpyi(1−p)1−yi+(1−π)qyi(1−q)1−yi]
代码实现
E step:
μ i + 1 = π ( p i ) y i ( 1 − ( p i ) ) 1 − y i π ( p i ) y i ( 1 − ( p i ) ) 1 − y i + ( 1 − π ) ( q i ) y i ( 1 − ( q i ) ) 1 − y i \mu^{i+1}=\frac{\pi (p^i)^{y_i}(1-(p^i))^{1-y_i}}{\pi (p^i)^{y_i}(1-(p^i))^{1-y_i}+(1-\pi) (q^i)^{y_i}(1-(q^i))^{1-y_i}} μi+1=π(pi)yi(1−(pi))1−yi+(1−π)(qi)yi(1−(qi))1−yiπ(pi)yi(1−(pi))1−yi
def pmf(i, pro_A, pro_B, por_C):pro_1 = pro_A * math.pow(pro_B, data[i]) * math.pow((1 - pro_B), 1 - data[i])pro_2 = pro_A * math.pow(pro_C, data[i]) * math.pow((1 - pro_C), 1 - data[i])return pro_1 / (pro_1 + pro_2)
M step:
π i + 1 = 1 n ∑ j = 1 n μ j i + 1 \pi^{i+1}=\frac{1}{n}\sum_{j=1}^n\mu^{i+1}_j πi+1=n1j=1∑nμji+1
p i + 1 = ∑ j = 1 n μ j i + 1 y i ∑ j = 1 n μ j i + 1 p^{i+1}=\frac{\sum_{j=1}^n\mu^{i+1}_jy_i}{\sum_{j=1}^n\mu^{i+1}_j} pi+1=∑j=1nμji+1∑j=1nμji+1yi
q i + 1 = ∑ j = 1 n ( 1 − μ j i + 1 y i ) ∑ j = 1 n ( 1 − μ j i + 1 ) q^{i+1}=\frac{\sum_{j=1}^n(1-\mu^{i+1}_jy_i)}{\sum_{j=1}^n(1-\mu^{i+1}_j)} qi+1=∑j=1n(1−μji+1)∑j=1n(1−μji+1yi)
class EM:def __init__(self, prob):self.pro_A, self.pro_B, self.pro_C = prob# e_stepdef pmf(self, i):pro_1 = self.pro_A * math.pow(self.pro_B, data[i]) * math.pow((1 - self.pro_B), 1 - data[i])pro_2 = (1 - self.pro_A) * math.pow(self.pro_C, data[i]) * math.pow((1 - self.pro_C), 1 - data[i])return pro_1 / (pro_1 + pro_2)# m_stepdef fit(self, data):count = len(data)print('init prob:{}, {}, {}'.format(self.pro_A, self.pro_B,self.pro_C))for d in range(count):_ = yield_pmf = [self.pmf(k) for k in range(count)]pro_A = 1 / count * sum(_pmf)pro_B = sum([_pmf[k] * data[k] for k in range(count)]) / sum([_pmf[k] for k in range(count)])pro_C = sum([(1 - _pmf[k]) * data[k]for k in range(count)]) / sum([(1 - _pmf[k])for k in range(count)])print('{}/{} pro_a:{:.3f}, pro_b:{:.3f}, pro_c:{:.3f}'.format(d + 1, count, pro_A, pro_B, pro_C))self.pro_A = pro_Aself.pro_B = pro_Bself.pro_C = pro_C
《统计学习方法》 第九章 EM算法(原理+代码)相关推荐
- 李航/徐亦达 统计学习方法第九章EM算法及其推广总结和习题答案
强烈推荐徐亦达老师关于EM算法的讲解视频,本文根据徐老师和李航老师统计学习方法整理,由于公式推导太多,笔记为手写.其中包含混合高斯模型的理解,形象化解释,以及习题链接. 习题 习题9.1和9.3 习题 ...
- 机器学习理论《统计学习方法》学习笔记:第九章 EM算法及其推广
第九章 EM算法及其推广 概述 EM算法 EM算法的收敛性 EM算法实现 K-Means与高斯混合模型 K-Means 高斯混合模型 概述 EM算法是一种迭代算法,1977年由Dempster等人总结 ...
- em算法详细例子及推导_第九章-EM算法
从第九章开始,学习总结的东西有所不同了,第2-8章是分类问题,都属于监督学习,第9章EM算法是非监督学习.本文主要是总结EM算法的应用以及处理问题的过程和原理推导. EM算法 EM算法(期望极大算法 ...
- 统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现
三硬币EM算法 import numpy as np import mathclass Three_coin:def __init__(self,pai=0.0,p=0.0,q=0.0):self.p ...
- 统计学习方法 第九章笔记: EM 算法
文章目录 三硬币模型 EM推导背景 EM算法步骤 EM算法的导出 EM算法的收敛性 如果概率模型都是观测变量,那么给定数据就可以用极大似然估计法或者贝叶斯估计发去获得模型.但是,有时候概率模型既有观测 ...
- 李航《统计学习方法》之EM算法及其推广
EM算法是一种迭代方法,可以看作用坐标下降法来最大化对数似然估计下界的过程. 一.引入 (一)算法介绍 1.例题 有三枚硬币,ABC他们出现正面的概率分别是Π,p和q.进行如下投掷实验:先投掷A,再根 ...
- 复现经典:《统计学习方法》第 9 章 EM 算法及其推广
本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...
- 【机器学习】总结了九种机器学习集成分类算法(原理+代码)
大家好,我是云朵君! 导读: 本文是分类分析(基于Python实现五大常用分类算法(原理+代码))第二部分,继续沿用第一部分的数据.会总结性介绍集成分类算法原理及应用,模型调参数将不在本次讨论范围内. ...
- 总结了九种机器学习集成分类算法(原理+代码)
公众号后台回复"图书",了解更多号主新书内容作者:云朵君来源: 数据STUDIO 导读: 本文是分类分析(基于Python实现五大常用分类算法(原理+代码))第二部分,继续沿用第一 ...
最新文章
- UIView的几个枚举定义
- iOS Sharing #02 | 2019-03-30
- 牛客题霸 NC30 数组中未出现的最小正整数
- CMS 站点可能发生稳定性和性能问题
- 推荐系统学习(三)SVD奇异值分解做推荐与python代码
- 为 Analysis Services 数据库使用扩展字段属性(SQL Server 2005 联机丛书(2008 年 11 月))...
- spyder 怎么看函数定义_看漫画学C++035:自定义函数(1)
- 全民编程时代,程序员该如何保住饭碗?
- 拿 1% 月收入买比特币,比养老金更靠谱! —— CSDN 蒋涛答王峰十问
- Setting下的自定义控件LinearColorBar
- 游戏筑基开发之printf及利用一维数组输出杨辉三角
- ArrayList与普通数组的区别
- ASCII码值对照全表
- 解读Android日志
- mysql中表结构是什么_查询MySQL数据库中表结构
- vmbox挂载共享目录
- linux战争雷霆无法运行,《战争雷霆》Mac版下载及运行问题汇总
- 变态级JAVA程序员面试32问(转)
- 简单对象访问协议(SOAP)初级指南
- Redis Cluster 集群管理维护
热门文章
- 【数据结构】第十三站:排序(下)归并排序
- 你见过最牛逼的软件测试工程师是怎样的?
- 清风数学建模笔记——Excel画图保姆级教学
- 《天天数学》连载55:二月二十四日
- 教育类小程序APP开发
- 2021-CVPR-图像修复论文导读《TransFill: Reference-guided Image Inpainting by Merging Multiple Color and ~~~》
- mysql安装问题:由于找不到MSVCR120.dIl,无法继续执行代码。
- app开发对于企业及商家来说为什么越来越重要?
- 终于搞定Paypal了
- 8个免费的PNG素材网站推荐