统计学习方法9—EM算法
EM算法是一种迭代算法,是一种用于计算包含隐变量概率模型的最大似然估计方法,或极大后验概率。EM即expectation maximization,期望最大化算法。
1. 极大似然估计
在概率模型中,若已知事件服从的分布或者其他概率模型的参数,那么我们可以通过计算得到某事件发生的概率。而在估计中,这些变成了方向过程:已知一组数据发生的结果,相当于获得了经验概率,通过这组数据假设模型服从什么分布,再通过经验概率求解模型参数。
比如统计学校学生身高服从的概率分布,抽样1000人得到他们的身高数据,再假设身高服从正态分布,于是只需要求解\(u,\sigma\)即可。剩下的问题就是如何确定这两个参数,极大似然估计的思想就是求解在这两个参数下,得到的这组样本发生的概率最大的情况便是这两个参数最有可能的取值。而抽取每个样本都是独立的,于是可用每个段身高的样本数量/总样本数量作为单个发生的概率p,让每个p最大化就是让其乘积最大化,于是得到最大似然函数
\[L(\theta) = \prod _xp(x | \theta)\] 再求解其关于\(\theta\)的极大化问题便能得到一个对\(\theta\)的估计
\[\widehat \theta = argmaxL(\theta)\]
2.EM算法
上面是模型变量都是可观测的情况,这种情况可以直接根据观测到的样本数据,使用极大似然估计对模型参数进行估计。但若模型中含有隐变量的时候,就不能简单的使用极大似然估计进行计算。EM算法就是针对含有隐变量的概率模型参数的极大似然估计方法。
例子:
假设三枚硬币,记为A、B、C,它们正面向上的概率分别为n、p、q。实验如下:先抛A,根据A的结果选择B或者C再次抛,将这次正面向上的结果记为1,反面记为0,其中A正面向上则选择B,反面则选择C。经过n次实验后得到n个观测值,根据这n个观测值估计n、p、q的参数值。实验过程中只能观测到最后结果,并不能观察实验过程,也就是A的结果是未知的。该模型可以表示如下
\[P(y|\theta) = \sum_zP(y,z|\theta) = \sum_zP(z|\theta)P(y|z,\theta)\] 其中y表示随机变量Y的观测值,表示该次结果是1或0。z代表隐变量,表示模型中未能观测到的A的结果,\(\theta=(n,p,q)\)是模型参数。其中Y是不完全数据,Y+Z是完全数据。
若是没有隐变量Z,那么可直接使用对数极大似然函数估计
\[\widehat \theta=arg\underset \theta {max}L(\theta)=arg\underset \theta {max}\sum_y logP(y|\theta)
\] 加入隐变量后,对数极大似然函数变为
\[L(\theta,z)=\sum_ylog\sum_zP(y,z|\theta)
\] 求解
\[
\widehat \theta,z=arg\underset {\theta,z} {max}L(\theta,z)
\] 按照极大似然估计中的方法,似乎应该对\(\theta,z\)求导然后令其为0解方程组,然后注意此时的\(L(\theta,z)\)函数,log内含有求和运算,若是直接求导计算十分困难,因此退而求其次,既然要极大化\(L(\theta,z)\),就先找到一个它的下界,再想办法提高这个下界,同样能达到极大化L的效果。使用Jense不等式对似然函数进行放缩。
- Jense不等式(琴生不等式)
凸函数:是定义在实数域上的函数,如果对于任意的实数,都有:
\[f''\geqslant 0\]
则该函数是凸函数。
当函数是凸函数的时候,Jense不等式的含义是函数的期望大于等于期望的函数(凹函数相反)。图下图所示
二维情况下可用凸函数定义来解释,当一个函数是凸函数的时候,它满足
\[f(\frac {a+b} 2)\leqslant \frac {f(a)+f(b)} 2\] 左边其实相当于其变量x先求期望后带入函数,右边是先求函数值再计算函数值的期望,也就是
\[f(E(x))\leqslant E(f(x))
\] 再回到\(L(\theta,z)\)中来,目的是为了将对数函数中的和项去掉,便可利用jense不等式的性质,将期望的函数变为函数的期望。先进行放缩
\[
\begin{aligned}
L(\theta,z)&=\sum_ylog\sum_zP(y,z|\theta)\\
&=\sum_ylog\sum_zQ(z)\frac {P(y,z|\theta)} {Q(z)}\\
&\geqslant \sum_y \sum_zQ(z)log\frac {P(y,z|\theta)} {Q(z)}\\
\end{aligned}
\] 其中最后一步用到了Jense不等式,因为对数函数是凹函数,所以不等号反了过来,\(f(E(x))\geqslant E(f(x))\),此处\[f(x) = log(x), x=\frac {P(y,z|\theta)} {Q(x)} ,\] 并且所添加的\(Q(x)\)满足\[\sum_zQ(z) = 1\] 这是根据第三类Jense不等式的条件设定的,不同系数的加权求和期望只要满足系数之和为1就能使用Jense不等式。
所以得到结论,\(log\frac {P(y,z|\theta)} {Q(z)}\)的加权平均就是\(L(\theta,z)\)的一个下界。这便是EM算法中E(期望)的来由。
目前\(Q(z)\)还是未知的,需要根据一些条件来选择一个合适的函数,再次强调最终目的是极大化似然函数,现在我们得到了似然函数的一个下界,一个想法就是让这个下界去更好的逼近似然函数的真实值,下界是根据不等式放缩后得到的,那么当不等式取等号的时候便是最接近原函数的时候。回忆Jense不等式\(f(E(x)) \leqslant E(f(x))\),显然当\(x\)为常数的时候不等式成立。即
\[x =\frac {P(y,z|\theta)} {Q(z)}=c\] 既然要确定的是\(Q(z)\),不妨设\(\theta\)为常数,由上式得
\[
\begin{aligned}
P(y,z|\theta) &=cQ(z) \\
\sum_zP(y,z|\theta)&=\sum_zcQ(z) \\
\sum_zP(y,z|\theta)&=c
\end{aligned}
\]
将c带入x
\[
\begin{aligned}
Q(z) &= \frac {P(y,z|\theta)} {\sum_zP(y,z|\theta)} \\
&=\frac {P(y,z|\theta)} {P(y|\theta)} \\
&= P(z|y,\theta)
\end{aligned}
\]
第二步用到边缘概率,第三步条件概率。至此,我们得出了Q(z)的表达式,Q(z)是已知样本观测和模型参数下的隐变量的分布。那么已经完成了E步,对对数似然函数下界的期望的表示
\[L(\theta,z)=\sum_y \sum_zQ(z)log\frac {P(y,z|\theta)} {Q(z)}\] 接下来需要做的便是极大化这个似然函数,也就是M步。这一步中将\(Q(z)\)视为常数,对\(\theta\)进行极大化,去掉常数项后
\[L(\theta,z)=\sum_y \sum_zQ(z)logP(y,z|\theta)\]
统计学习方法9—EM算法的更多相关文章
- 统计学习方法笔记--EM算法--三硬币例子补充
本文,意在说明<统计学习方法>第九章EM算法的三硬币例子,公式(9.5-9.6如何而来) 下面是(公式9.5-9.8)的说明, 本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流 ...
- 统计学习方法:CART算法
作者:桂. 时间:2017-05-13 14:19:14 链接:http://www.cnblogs.com/xingshansi/p/6847334.html . 前言 内容主要是CART算法的学 ...
- 《统计学习方法》笔记九 EM算法及其推广
本系列笔记内容参考来源为李航<统计学习方法> EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计或极大后验概率估计.迭代由 (1)E步:求期望 (2)M步:求极大 组成,称 ...
- 高斯混合模型参数估计的EM算法
# coding:utf-8 import numpy as np def qq(y,alpha,mu,sigma,K,gama):#计算Q函数 gsum=[] n=len(y) for k in r ...
- EM 算法求解高斯混合模型python实现
注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...
- 统计学习方法九:EM算法
一.EM算法是什么? EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计. 作用:简单直白的说,估计参数 是一种生成模型 (1)用在概率模型中 (2)含有隐变量 (3)用极大似然估计方 ...
- 《统计学习方法》笔记(9):EM算法和隐马尔科夫模型
EM也称期望极大算法(Expectation Maximization),是一种用来对含有隐含变量的概率模型进行极大似然估计的迭代算法.该算法可应用于隐马尔科夫模型的参数估计. 1.含有隐含参数的概率 ...
- 统计学习方法c++实现之八 EM算法与高斯混合模型
EM算法与高斯混合模型 前言 EM算法是一种用于含有隐变量的概率模型参数的极大似然估计的迭代算法.如果给定的概率模型的变量都是可观测变量,那么给定观测数据后,就可以根据极大似然估计来求出模型的参数,比 ...
- 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法
前言 支持向量机(SVM)是一种很重要的机器学习分类算法,本身是一种线性分类算法,但是由于加入了核技巧,使得SVM也可以进行非线性数据的分类:SVM本来是一种二分类分类器,但是可以扩展到多分类,本篇不 ...
随机推荐
- abp框架(aspnetboilerplate)设置前端报错显示
abp在后端抛出异常 throw new UserFriendlyException($"抛出一个错误"); 在发布之前,需要设置是否把报错发送给前端 如果将此设置为true,则会 ...
- shell脚本自动化安装LAMP
#!/bin/bash#auto make install LAMP#by authors yehailun #arp和apr-util依赖APR_FILES=apr-1.6.2.tar.gz APR ...
- Html 空格与换行
空格 换行 <br/> 调行距 <div style="line-height:10px"></div>
- html 自制属性
HTML5 允许扩展的(自制的)属性,以 data- 开头 <label id="id0" data-value="0">0</label&g ...
- TinyMCE插件CodeSample前后端应用
后端使用插件CodeSample方法: <html> <textarea id="editor_id" name="content" plac ...
- Ionic2开发环境搭建-VS 2017
原文:Ionic2开发环境搭建-VS 2017 目前在VS 2017中创建Ionic2版本项目 注:在VS中开发Ionic项目,使用的Ionic(v2.x),Cordova(v6.3.1),Angul ...
- Android SharedPreferences中apply和commit的效率差距
Android SharedPreferences中apply和commit的效率差距 经常看到它俩的速度有差别,apply和commit.到底差距多少,下面做一个统计. apply commit ...
- layabox pc app web同步发布的工具
http://layabox.com/ 或者vs + unity3d开发游戏
- 了解 XML 数字签名
http://www.cnblogs.com/flyxing/articles/91734.html http://www.cnblogs.com/wuhong/archive/2010/12/20/ ...
- shell中select、case的使用
case和select结构在技术上说并不是循环, 因为它们并不对可执行代码块进行迭代. 但是和循环相似的是, 它们也依靠在代码块顶部或底部的条件判断来决定程序的分支. select select结 ...