极大似然算法


本来打算把别人讲的好的博文放在上面的,但是感觉那个适合看着玩,我看过之后感觉懂了,然后实际应用就不会了。。。。

    MLP其实就是用来求模型参数的,核心就是“模型已知,求取参数”,模型的意思就是数据符合什么函数,比如我们硬币的正反就是二项分布模型,再比如我们平时随机生成的一类数据符合高斯模型。。。

    直接上公式:

     L(Θ) :联合概率分布函数,就是每个样本出现的概率乘积。

     x1,x2,x3....xn  : 样本

     Θ : 模型的参数(比如高斯模型的两个参数:μ、σ)

     p(xi ; Θ) : 第i个样本的概率模型

     xi :第i个样本

  平时使用的时候取对数,完全为了求解方便。(从后面可以看出求导方便):

    而称为平均对数似然。而我们平时所称的最大似然为最大的对数平均似然,即:

  举例一: 

举一个抛硬币的简单例子。 现在有一个正反面不是很匀称的硬币,如果正面朝上记为H,方面朝上记为T,抛10次的结果如下:

求这个硬币正面朝上的概率有多大?

很显然这个概率是0.2。现在我们用MLE的思想去求解它。我们知道每次抛硬币都是一次二项分布,设正面朝上的概率是,那么似然函数为:

x=1表示正面朝上,x=0表示方面朝上。那么有:

求导:

令导数为0,很容易得到:

也就是0.2 。

举例二:

假如我们有一组连续变量的采样值(x1,x2,…,xn),我们知道这组数据服从正态分布,标准差已知。请问这个正态分布的期望值为多少时,产生这个已有数据的概率最大?

    P(Data | M) = ?

根据公式:

   

可得:

  对μ求导可得:

则最大似然估计的结果为μ=(x1+x2+…+xn)/n

  举例三:

        

  假设我们要统计全国人民的年均收入,首先假设这个收入服从服从正态分布,但是该分布的均值与方差未知。我们没有人力与物力去统计全国每个人的收入。我们国家有10几亿人口呢?那么岂不是没有办法了?

不不不,有了极大似然估计之后,我们可以采用嘛!我们比如选取一个城市,或者一个乡镇的人口收入,作为我们的观察样本结果。然后通过最大似然估计来获取上述假设中的正态分布的参数。

有了参数的结果后,我们就可以知道该正态分布的期望和方差了。也就是我们通过了一个小样本的采样,反过来知道了全国人民年收入的一系列重要的数学指标量!

那么我们就知道了极大似然估计的核心关键就是对于一些情况,样本太多,无法得出分布的参数值,可以采样小样本后,利用极大似然估计获取假设中分布的参数值。

    注:最大似然函数真的很简单,刚开始我也一头雾水。其实我们用的很多函数都可以说是一个最大似然函数,比如符合y = x2、y = kx。。。。都可以当做一个模型去求解一个极大似然函数,只不过我们得到的数据不符合这些模型而已。

    大家有没有发现只要是求概率的问题,都会写出一个函数,这个函数其实就是最大似然函数,可以说是目标函数,也可以说是似然函数,把每个数据出现的概率相乘就是似然函数,再求对数,再求均值,再求最值,这就是极大似然了,就是一个名字而已!

EM算法概述


    EM算法核心:猜(E-step),反思(M-step),重复;

  先说说我自己对EM算法的理解:

    问题一:

  现在一个班里有50个男生,50个女生,且男生站左,女生站右。我们假定男生的身高服从正态分布 ,女生的身高则服从另一个正态分布: 。这时候我们可以用极大似然法(MLE),分别通过这50个男生和50个女生的样本来估计这两个正态分布的参数。

  问题二:

  但现在我们让情况复杂一点,就是这50个男生和50个女生混在一起了。我们拥有100个人的身高数据,却不知道这100个人每一个是男生还是女生。这时候情况就有点尴尬,因为通常来说,我们只有知道了精确的男女身高的正态分布参数我们才能知道每一个人更有可能是男生还是女生。但从另一方面去考量,我们只有知道了每个人是男生还是女生才能尽可能准确地估计男女各自身高的正态分布的参数。

  问题二需要求解两个问题:

    假设a=(第k个样本是男生还是女生)

    假设b=(高斯模型的参数)

  如果知道a,那用问题一的方法就可以求解b,如果知道b那也就可以分类a了,但是前提是两个都不知道。。。。比如y=x+1,现在让你求解x和y的值,怎么办?

      解决:

     

    总结:其实EM算法就是先通过假设的参数(不能太无厘头了)把数据进行分类,然后通过分类的数据计算参数,接着对比计算的参数和假设的参数是否满足精度,不满足就返回去,满足就结束。

        EM算法使用简单,但是证明很麻烦,我感觉没必要去证明,会使用就好了,反正EM是一种思想,而不是像K-means等是一种算法。

参考:

    1.http://blog.csdn.net/zouxy09/article/details/8537620(本博文的核心都来自这里,说的通俗易懂!)

    2.http://www.cnblogs.com/sylvanas2012/p/5058065.html(最大似然的举例1)

    3.http://blog.csdn.net/qq_18343569/article/details/49981507(最大似然的举例2)

     4.https://www.zhihu.com/question/27976634/answer/154998358(EM算法的问题来源知乎,但是作者没有解决)

    5.http://www.jianshu.com/p/1121509ac1dc(还没来得及看的EM例子,排版很好,不知道内容)

从最大似然函数 到 EM算法详解的更多相关文章

  1. EM算法详解

    EM算法详解 1 极大似然估计 假设有如图1的X所示的抽取的n个学生某门课程的成绩,又知学生的成绩符合高斯分布f(x|μ,σ2),求学生的成绩最符合哪种高斯分布,即μ和σ2最优值是什么? 图1 学生成 ...

  2. Weka中EM算法详解

    private void EM_Init (Instances inst) throws Exception { int i, j, k; // 由于EM算法对初始值较敏感,故选择run k mean ...

  3. 从最大似然到EM算法浅解

    从最大似然到EM算法浅解 zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习十大算法之中的一个:EM算法.能评得上十大之中的一个,让人听起来认为挺NB的. ...

  4. BM算法  Boyer-Moore高质量实现代码详解与算法详解

    Boyer-Moore高质量实现代码详解与算法详解 鉴于我见到对算法本身分析非常透彻的文章以及实现的非常精巧的文章,所以就转载了,本文的贡献在于将两者结合起来,方便大家了解代码实现! 算法详解转自:h ...

  5. kmp算法详解

    转自:http://blog.csdn.net/ddupd/article/details/19899263 KMP算法详解 KMP算法简介: KMP算法是一种高效的字符串匹配算法,关于字符串匹配最简 ...

  6. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  7. [转] KMP算法详解

    转载自:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段.    我们这里说的K ...

  8. 【转】AC算法详解

    原文转自:http://blog.csdn.net/joylnwang/article/details/6793192 AC算法是Alfred V.Aho(<编译原理>(龙书)的作者),和 ...

  9. KMP算法详解(转自中学生OI写的。。ORZ!)

    KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法.KMP算法是拿来处理字符串匹配的.换句 ...

随机推荐

  1. Ubuntu install TensorFlow

    /******************************************************************************** * Ubuntu install T ...

  2. stm32 DAC配置

    VDDA 和 VSSA 为 DAC 模块模拟部分的供电,而 Vref+则是 DAC 模块的参考电压.DAC_OUTx 就是 DAC 的 输出通道了 (对应 PA4 或者 PA5 引脚). 由第一张图可 ...

  3. (1)变量、常量、程序交互、数据类型、bool、基本运算符

    什么是变量 变量由变量名和变量值组成 name = 'Alex Li'  这个算式就是将一个值赋予给变量,也就是声明变量的意思 name 就是一个变量,也是一个变量的名字 'Alex Li' 就是一个 ...

  4. ajax完整请求

    @RequestMapping(value = "/quotaPage") // , method = RequestMethod.GET名额分配@ResponseBody //注 ...

  5. 【vue】Vue调试神器vue-devtools安装

    转载:https://segmentfault.com/a/1190000009682735 前言 vue-devtools是一款基于chrome游览器的插件,用于调试vue应用,这可以极大地提高我们 ...

  6. HBase scan shell操作详解

    创建表 create 'test1', 'lf', 'sf' lf: column family of LONG values (binary value) -- sf: column family ...

  7. flynn 开源paas 平台安装试用

    flynn 是一个不错的开源paas 平台,基于git 以及容器技术,开发模型与 heroku 基本一样,同时构建方式就是基于heroku 的buildpacks 安装 官方文档提示说明是ubuntu ...

  8. c++标准库的所有类型

    标准库的组成:    前言就到此为止.从最宏观的层面上看,C++标准库由十个部分组成:语言支持.诊断.通用工具.字符串.本地化.容器.迭代器.通用算法.数值算法和I/O. 头文件组成:    C++ ...

  9. POJ1191棋盘分割

    题目:http://poj.org/problem?id=1191 1.分析式子!!! 发现xba是定值,σ的大小仅和∑ xi^2 有关.故dp条件是平方和最小. 2.分出一块就像割掉一条,只需枚举从 ...

  10. shell脚本 如何调用Mysql的存储过程 解决方案

    今天遇到一个在shell脚本里面要调用MySQL的存储过程,查阅了很多资料,发现有的都不好用,自己调试出了如下一种,拿来共享: 用mysql -e “ ”: 例如:   mysql -uroot -p ...