从极大似然函数到EM算法
最近看斯坦福大学的机器学习课程,空下来总结一下参数估计相关的算法知识。
一、极大似然估计:
大学概率论课程都有讲到参数估计的两种基本方法:极大似然估计、矩估计。两种方法都是利用样本信息尽量准确的去描述总体信息,或者说给定模型(参数全部或者部分未知)和数据集(样本),让我们去估计模型的未知参数。
其中,矩估计依赖于辛钦大数定律:简单随机样本的原点矩依概率收敛到相应的总体原点矩,这就启发我们利用样本矩替换总体矩(最简单的是用一阶样本原点矩估计总体期望,而用二阶样本中心矩估计总体方差),其一大优点就是使用时不用知道总体的分布形式。这个当然很好理解,下面主要总结学习下极大似然估计法:
极大似然估计,又名最大似然估计,其基本思想是:当我们从模型总体随机抽取n组样本观测值后,最合理的参数估计量应该是使得从模型中抽取的该n组样本观测值的概率最大(直观上也很容易理解,概率大的事件总是比概率小的事件更容易发生,反过来,既然事件A已经发生,我们就应当认为事件A发生的概率应该是最大的,否则它又有什么理由PK掉概率最大的事件B呢,个人理解咯)。
依然举个栗子:假设你学校有1000名帅哥并且其身高服从高斯分布N(u,∂),你想知道自己的身高在学校处于什么样的水平、身高分布的特点等信息,这样子你可能需要知道参数(u,∂)的具体值,但你没那么多时间去统计全体帅哥的身高信息,于是你随机抽取了100名帅哥并得到了他们的身高,这样子你就有了一个样本集X={x1,x2,…,xN},由于每个样本都独立的从p(x|θ)中抽取的,那么抽到这100个帅哥的概率是p(x1|θ)*
p(x1|θ)...* p(x100|θ)。表达成数学上通用的形式就是:
这个函数反应了在不同的参数θ取值下,取得当前这个样本集的可能性,因此称为参数θ相对于样本集X的似然函数(likehood
function),记为L(θ)。
PS:既然样本集X={x1,x2,…,xN}已经得到(发生),那么就让它发生的概率最大化的吧(这样子说好像有点逻辑错误);
由于L(θ)中各项是连乘形式的,通常为了便于处理/计算,我们进行取对数操作:
如何求取H(θ)的最大值,当然是对函数求导数了,多个参数时就是求函数的偏导数,然后让(偏)导数为0
,这样就得到了似然方程,然后解似然方程就可以计算得到参数θ的估计值啦。同样的方法,你也可以得到学校美女的身高分布信息,等等。
极大似然估计的基本过程总结下来:
1、抽取得到样本集;
2、假设模型(是服从高斯分布还是二项分布等等;
3、列出似然函数并求导得到似然方程;
4、求解似然方程得到参数θ的估计值
高大上的极大似然估计法经过层层分解就简单许多了。
二、EM算法
继续依赖上面帅哥美女的身高来总结该算法,在极大似然估计中,我们预先知道了某个身高是隶属于帅哥还是美女(因为你抽样的时候已经做了区分了)。但是,现在社会这么复杂,区分人的性别可不是一件容易的事情,这样你抽样得到了200个样本,其中一部分隶属于帅哥,剩下的隶属于美女,只是不知道具体哪个样本隶属于帅哥,在这么艰苦的条件下需要去估计帅哥的(身高)分布参数(u1,∂1)、美女的(身高)分布参数(u2,∂2),又该怎么做呢?
主要需要解决两个基本问题:1、样本类别(是帅哥还是美女)
,算法中描述的隐含变量z(i) 2、每个类别的分布参数是多少。
要解决问题1就需要先解决问题2,要解决问题2也需要先解决问题1,在两个问题的解都未知的情况下,不妨先假设一个解好了。由于样本往往比较多,对其类别做假设还是有点嫌麻烦,那不如假设分布参数值好了(即对u1,∂1、u2,∂2)设定一个初值)。现在好办多了,既然已经知道了分布参数值,那么对于一个样本比如身高170cm,那么将其代入分布1:N(u1,∂1)得到一个概率值:p1(x|θ1),同理,代入分布1:N(u1,∂1)得到一个概率值:p2(x|θ2),这样如果p1>p2,那我们就可以认为这个样本属于类别1(既帅哥了)。
如此,对所有的样本都进行这样的计算、比较,那每个样本的类别信息就有了,这样就解决了第一个问题,那接下来就可以运用极大似然法重新估计分布参数了...如此迭代,直到收敛(比如分布参数的变化值已经低于某个限度了)。
EM算法(Expectation-maximization)算法的流程:
首先初始化分布参数θ;
迭代直到收敛:
E步骤:根据参数初始值或上一次迭代的模型参数来计算出隐性变量的后验概率,其实就是隐性变量的期望。作为隐含变量的现估计值:
M步骤:将似然函数最大化以获得新的参数值:
将M步骤的公式还是有点高大上,分开写就更直观一点了:
收敛后就是我们需要的最有参数估计了。
边学边写的难免有不少错误,也引用了不少同行的公式:EM算法,在此表示感谢
从极大似然函数到EM算法的更多相关文章
- 从最大似然函数 到 EM算法详解
极大似然算法 本来打算把别人讲的好的博文放在上面的,但是感觉那个适合看着玩,我看过之后感觉懂了,然后实际应用就不会了.... MLP其实就是用来求模型参数的,核心就是“模型已知,求取参数”,模型的意思 ...
- 从似然函数到EM算法(附代码实现)
1. 什么是EM算法 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型 ...
- 含隐变量模型求解——EM算法
1 EM算法的引入1.1 EM算法1.2 EM算法的导出2 EM算法的收敛性3EM算法在高斯混合模型的应用3.1 高斯混合模型Gaussian misture model3.2 GMM中参数估计的EM ...
- EM算法及其应用(一)
EM算法及其应用(一) EM算法及其应用(二): K-means 与 高斯混合模型 EM算法是期望最大化 (Expectation Maximization) 算法的简称,用于含有隐变量的情况下,概率 ...
- EM算法定义及推导
EM算法是一种迭代算法,传说中的上帝算法,俗人可望不可及.用以含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计 EM算法定义 输入:观测变量数据X,隐变量数据Z,联合分布\(P(X,Z|\t ...
- EM算法——有隐含变量时,极大似然用梯度法搞不定只好来猜隐含变量期望值求max值了
摘自:https://www.zhihu.com/question/27976634 简单说一下为什么要用EM算法 现在一个班里有50个男生,50个女生,且男生站左,女生站右.我们假定男生的身高服从正 ...
- 学习笔记——EM算法
EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(expectation):M步,求 ...
- 极大似然估计、贝叶斯估计、EM算法
参考文献:http://blog.csdn.net/zouxy09/article/details/8537620 极大似然估计 已知样本满足某种概率分布,但是其中具体的参数不清楚,极大似然估计估计就 ...
- 高斯混合模型参数估计的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 ...
随机推荐
- c++ Struct和Class的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...
- 容器化现有ASP.NET MVC 5应用
.NET Core的出现使得ASP.NET应用在Linux环境下使用变得更加普及.而配合上Docker容器,令ASP.NET应用的布署与管理也变得更加方便.在新的项目中运用ASP.NET Core无可 ...
- 【Unity Shader】新书封面 — Low Polygon风格的渲染
写在前面 最近又开心又担心,因为我的书马上就要上市了,开心当然是因为等了这么久终于可以如愿了,担心是因为不少人对它的期待都很大,我第一次写书,能力也有限,不知道能不能让大家满意,让大家也都喜欢上它.不 ...
- Java程序员必须掌握的线程知识-Callable和Future
Callable和Future出现的原因 创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需 ...
- [apache2.4]configure: error: APR not found. Please read the documentation.
apache2.4 安装出现如下错误 ``` [lzz@localhost httpd-2.4.10]$ ./configure checking for chosen layout... Apac ...
- Java进阶(四十七)Socket通信
Java进阶(四十七)Socket通信 今天讲解一个 Hello Word 级别的 Java Socket 通信的例子.具体通讯过程如下: 先启动Server端,进入一个死循环以便一直监听某端口是 ...
- Unity3D核心技术详解
在这里将多年游戏研发经验的积累写成一本书奉献给读者,目前已经开始预售,网址: http://www.broadview.com.cn/article/70 该书主要是将游戏中经常使用的技术给大家做了一 ...
- Java提升篇之反射的原理(二)
Java提升篇之通过反射越过泛型检查 /* *问题:在一个ArrayList<Integer>对象中,在这个集合中添加一个字符串. */ 在我们还没有学反射前,遇到这个问题都是无法实现的, ...
- Java基本语法-----java标识符
1什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Demo,就是我们定义的类名.类名就属于标识符的一种. 标识符除了应用在类名上 ...
- 【java多线程系列】java内存模型与指令重排序
在多线程编程中,需要处理两个最核心的问题,线程之间如何通信及线程之间如何同步,线程之间通信指的是线程之间通过何种机制交换信息,同步指的是如何控制不同线程之间操作发生的相对顺序.很多读者可能会说这还不简 ...