最近看斯坦福大学的机器学习课程,空下来总结一下参数估计相关的算法知识。

一、极大似然估计:

大学概率论课程都有讲到参数估计的两种基本方法:极大似然估计矩估计。两种方法都是利用样本信息尽量准确的去描述总体信息,或者说给定模型(参数全部或者部分未知)和数据集(样本),让我们去估计模型的未知参数。

其中,矩估计依赖于辛钦大数定律:简单随机样本的原点矩依概率收敛到相应的总体原点矩,这就启发我们利用样本矩替换总体矩(最简单的是用一阶样本原点矩估计总体期望,而用二阶样本中心矩估计总体方差),其一大优点就是使用时不用知道总体的分布形式。这个当然很好理解,下面主要总结学习下极大似然估计法:

极大似然估计,又名最大似然估计,其基本思想是:当我们从模型总体随机抽取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算法的更多相关文章

  1. 从最大似然函数 到 EM算法详解

    极大似然算法 本来打算把别人讲的好的博文放在上面的,但是感觉那个适合看着玩,我看过之后感觉懂了,然后实际应用就不会了.... MLP其实就是用来求模型参数的,核心就是“模型已知,求取参数”,模型的意思 ...

  2. 从似然函数到EM算法(附代码实现)

    1. 什么是EM算法 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型 ...

  3. 含隐变量模型求解——EM算法

    1 EM算法的引入1.1 EM算法1.2 EM算法的导出2 EM算法的收敛性3EM算法在高斯混合模型的应用3.1 高斯混合模型Gaussian misture model3.2 GMM中参数估计的EM ...

  4. EM算法及其应用(一)

    EM算法及其应用(一) EM算法及其应用(二): K-means 与 高斯混合模型 EM算法是期望最大化 (Expectation Maximization) 算法的简称,用于含有隐变量的情况下,概率 ...

  5. EM算法定义及推导

    EM算法是一种迭代算法,传说中的上帝算法,俗人可望不可及.用以含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计 EM算法定义 输入:观测变量数据X,隐变量数据Z,联合分布\(P(X,Z|\t ...

  6. EM算法——有隐含变量时,极大似然用梯度法搞不定只好来猜隐含变量期望值求max值了

    摘自:https://www.zhihu.com/question/27976634 简单说一下为什么要用EM算法 现在一个班里有50个男生,50个女生,且男生站左,女生站右.我们假定男生的身高服从正 ...

  7. 学习笔记——EM算法

    EM算法是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(expectation):M步,求 ...

  8. 极大似然估计、贝叶斯估计、EM算法

    参考文献:http://blog.csdn.net/zouxy09/article/details/8537620 极大似然估计 已知样本满足某种概率分布,但是其中具体的参数不清楚,极大似然估计估计就 ...

  9. 高斯混合模型参数估计的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 ...

随机推荐

  1. JavaScript正则表达式模式匹配(2)——分组模式匹配

    var pattern=/google{4,8}$/; // {4,8}$表示匹配结尾4-8次 var str='googleeeeeeeee'; // 表示e的4-8次 alert(pattern. ...

  2. vue+node.js+webpack开发微信公众号功能填坑——v -for循环

    页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...

  3. 使用RedisDesktopManager工具,解决连接失败问题

    今天在云服务器上搭建好了redis环境,想用RedisDesktopManager工具去连接一下,结果连接不上,显示如下图: 我确保了服务器防火墙关闭,又在redis配置文件中设置了requirepa ...

  4. Python实现爬取需要登录的网站完整示例

    from selenium import webdriver dirver = webdriver.Firefox() dirver.get('https://music.douban.com/') ...

  5. springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(二)

    上一篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(一)中我们已经介绍了参数解析相关的东西,并且也提到了HandlerMethodArgume ...

  6. Django 缓存模块 page_cache 源码阅读

    Django cache中比较常用的有 cache_page 这么个 decorators, 下面就根据请求流程,结合源码来说说它是怎么工作的? 版本是django1.8,不同版本可能函数等会变化,逻 ...

  7. android M Launcher之LauncherModel (二)

    上一篇我们通过LauncherModel的创建 ,实例化,以及与LauncherModel之间的沟通方式.初步了解了LauncherModel一些功能及用法,如果对LauncherModel一系列初始 ...

  8. 前端CSS技术全解(一)

    一.概述 1)用HTML完成样式工作 哪个标签有哪个属性难以记忆 需求变更影响较大(例如像修改成功法则以下的文字颜色需要修改4个地方) <h1 align="center"& ...

  9. logstash输出到elasticsearch多索引

    目标:将json格式的两类日志输出到elasticsearch两类索引 1. 安装logstash. 2. 编写logstash处理配置文件,创建一个test.conf文件,内容如下: input { ...

  10. Django 是如何实现用户登录和登出机制的(默认版本-数据库版本)

    Django session 字典,保存到数据库的时候是要先序列化的(session.encode方法), 读取的时候反序列化(session.decode),这样比较安全. 一 settings.p ...