先列明材料:

高斯混合模型的推导计算(英文版):

http://www.seanborman.com/publications/EM_algorithm.pdf

这位翻译写成中文版:

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html

高斯混合模型的流程:

http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006924.html

最大似然估计:

http://blog.csdn.net/yanqingan/article/details/6125812

GMM的EM算法实现

http://blog.csdn.net/abcjennifer/article/details/8198352

一个高斯混合模型(GMM) 包含多个一维的高斯分布(GM),按例子来说,如果班级上同学的性别是知道的,身高也是知道的,那么对班级同学构建的GMM 可以这样,GM 的个数取2,分别表示男生身高高斯分布和女生的身高高斯分布,首先通过男生女生来划分 单个 GM 的权重,即男生\女生占班的比重,然后 男生的身高数据 计算出高斯分布,女生的也是,这样 就构建好一个GMM 了。

当然上面的例子是理想化的计算,假如对一组样本 n-by-d 进行聚类,n 表示样本数,d 表示样本的维度。

对一个GMM 的训练通过EM 和最大似然估计计算,需要确定的是 GMM 中各GM 的权重w,和各GM 里面样本均值 u 和 协方差矩阵 ∑ (d-by-d matrix),即GM 分布的两个参数。同属一个GM 的样本就是同一个类,所以多少类变有多少个GM.

  通过最大似然估计作为GMM 训练的结束判断,最大似然估计根据 X 在GMM 分布中的期望作为判断(这句话不准确,看上面GMM推导).

对于一个样本点,其在GMM中的概率p(x)如下,其中K 为GM 的个数,样本x 在K 个GM 中的概率p(x|k) 的叠加,p(k)为 k-th GM 的权重:

然后利用最大似然估计,N 个样本点的p(x)之积最大的时候,则参数确定了,因为多项式之积难算,去了log 之后变成了之和,N() 是一维高斯分布,如下:

 下面是另外一种表达,参考上上式中第一个等号,下面的m 等同上面的N,zi 是类标号即上面的k,下面公式第二等号有两个p,后p 等同于GM 的权重,前者p 就是一个上面公式的N ()一维高斯分布,注意下式第二个累加的变量是类标号,不是样本标号:

为了使上面的L 取最大值,那么使两个p 都取最大便可以了,这需要用到em算法,固定A,更新B,然后换过来,固定B,更新A,迭代到L的变化低于阀值。

初始化:

因为我们有初始化的标号,所以可以初始化各GM 的权重w(π),样本均值u 和协方差∑。初始化完成后,便可以进入EM迭代过程。

e-step:

先进行 e-step,这一步是假设知道了个GM 3个参数,即假设这个GMM 模型已经训练好了,那么将N个训练样本当作新样本输入,便可以求各样本到各GM 的概率,一个 N-by-K matrix,然后就知道了各样本的类标号,一行中的概率最大值咯,下面就是这个矩阵的计算公式:

注意的是这里运算的x 是d-by-1 矩阵,即一个sample,与前面的x 矩阵有点不同。

好了,问题来了,这个γ 究竟对应于上面公式的哪一部分呢?答案是 都不对应!

既然这样,为什么计算呢?为了更新类标号!

注意到这个γ 是小数来的,如果不进行上面的一行中概率最大值修改为1,其他修改为0,则一个sample 的类标号将是权重0.xx了,不再是1、0,正常操作时这样,在迭代过程中一直保持权重类标号,到正真需要的时候,例如判断样本的归宿时候,则给出1、0类标号。

ps:

注意到 γ 的分子是不是跟L 很像? 这其实实际计算上面,N() 是一样的,但π 不一样阿!这需要看e-step 的假设了,GMM 模型已经知道,输入的样本标号不知道,那么这个π 是训练数据得出来的π,不是输入样本的π(虽然数值数值上一样但逻辑上不同)!所以需要求出γ 才能够知道样本的标号,然后计算出GM 的权重,才是L 中的π值,想省事的就先判断后进行m-step,毕竟m-step才是意义上计算π的地方。

e-step结束了,其实我们已经可以知道了L 的右边的p,将γ 每行叠加生成 1-by-k 矩阵,便是各GM 的标号叠加,除以样本数便是权重了,进入m-step.

m-step:

进入M-step,则是看作已经到了输入样本的类标号,这就跟初始化很类似了,已知标号然后求GM的参数,区别是 初始化时候的标号为1、0,现在可能成小数了,计算公式如下:

解释下,第一条就是k-th GM 的样本均值,γ则是e-step 计算得出的值。

第二条是协方差计算公式了。

权重的更新藏在第三行,计算可以看上面几行有写。

收敛判断:

当前的log-likehood  就是用e-step 中的N(),和m-step 中的π,计算下式,与上一步的做对比。

又看了一次EM 算法,还有高斯混合模型,最大似然估计的更多相关文章

  1. 统计学习方法c++实现之八 EM算法与高斯混合模型

    EM算法与高斯混合模型 前言 EM算法是一种用于含有隐变量的概率模型参数的极大似然估计的迭代算法.如果给定的概率模型的变量都是可观测变量,那么给定观测数据后,就可以根据极大似然估计来求出模型的参数,比 ...

  2. EM 算法求解高斯混合模型python实现

    注:本文是对<统计学习方法>EM算法的一个简单总结. 1. 什么是EM算法? 引用书上的话: 概率模型有时既含有观测变量,又含有隐变量或者潜在变量.如果概率模型的变量都是观测变量,可以直接 ...

  3. 斯坦福大学机器学习,EM算法求解高斯混合模型

    斯坦福大学机器学习,EM算法求解高斯混合模型.一种高斯混合模型算法的改进方法---将聚类算法与传统高斯混合模型结合起来的建模方法, 并同时提出的运用距离加权的矢量量化方法获取初始值,并采用衡量相似度的 ...

  4. 机器学习第三课(EM算法和高斯混合模型)

    极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一.说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值. ...

  5. 机器学习算法总结(六)——EM算法与高斯混合模型

    极大似然估计是利用已知的样本结果,去反推最有可能(最大概率)导致这样结果的参数值,也就是在给定的观测变量下去估计参数值.然而现实中可能存在这样的问题,除了观测变量之外,还存在着未知的隐变量,因为变量未 ...

  6. EM算法求高斯混合模型參数预计——Python实现

    EM算法一般表述:       当有部分数据缺失或者无法观察到时,EM算法提供了一个高效的迭代程序用来计算这些数据的最大似然预计.在每一步迭代分为两个步骤:期望(Expectation)步骤和最大化( ...

  7. EM算法和高斯混合模型GMM介绍

    EM算法 EM算法主要用于求概率密度函数参数的最大似然估计,将问题$\arg \max _{\theta_{1}} \sum_{i=1}^{n} \ln p\left(x_{i} | \theta_{ ...

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

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

  9. EM算法(Expectation Maximization Algorithm)初探

    1. 通过一个简单的例子直观上理解EM的核心思想 0x1: 问题背景 假设现在有两枚硬币Coin_a和Coin_b,随机抛掷后正面朝上/反面朝上的概率分别是 Coin_a:P1:-P1 Coin_b: ...

随机推荐

  1. centos7中使用LVM管理磁盘和挂载磁盘

    centos7使用LVM管理一块新的磁盘 注意!文中凡是带#的都是命令标志. 一些重要概念: LV(Logical Volume)- 逻辑卷, VG(Volumne Group)- 卷组, PV(Ph ...

  2. 02.VUE学习二之数据绑定

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. 怎么选取训练神经网络时的Batch size?

    怎么选取训练神经网络时的Batch size? - 知乎 https://www.zhihu.com/question/61607442 深度学习中的batch的大小对学习效果有何影响? - 知乎 h ...

  4. 如何将emoji表情存放到mysql数据库中

    昨晚在爬取猫眼电影评论时在将评论信息插入到数据库中时出现问题,总是在插入一条数据时就会报错: 看着应该时字符编码的问题,比如新建的数据库新建的表,默认字符编码是:Latin1, 这种编码是无法插入中文 ...

  5. HDU 4919 Exclusive or 数学

    题意: 定义 \[f(n)=\sum\limits_{i=1}^{n-1}(i\oplus (n-i))\] 求\(f(n),n \leq 10^{500}\) 分析: 这个数列对应OEIS的A006 ...

  6. Go语言之反射(二)

    反射的值对象 反射不仅可以获取值的类型信息,还可以动态地获取或者设置变量的值.Go语言中使用reflect.Value获取和设置变量的值. 使用反射值对象包装任意值 Go语言中,使用reflect.V ...

  7. 设计模式之第2章-抽象工厂模式(Java实现)

    设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...

  8. 项目中遇到的ts问题汇总

    报错关键词句 报错截图 解决 Declaration of public static field not allowed after declaration of public instance m ...

  9. C#知识点<3>

    1. C# 结构(Struct) 在 C# 中,结构是值类型数据结构.它使得一个单一变量可以存储各种数据类型的相关数据.struct 关键字用于创建结构. 结构是用来代表一个记录.假设您想跟踪图书馆中 ...

  10. IIS是怎么处理同时到来的多个请求的?

        假设有一台服务器,它的IIS上部署有一个Web应用程序-S,可以通过浏览器或其他方式进行访问.     假设有A.B.C三台电脑同时访问网站S,IIS接收到3个HTTP请求,然后分别为三个请求 ...