先列明材料:

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

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. 十七、MySQL UNION 操作符

    MySQL UNION 操作符 本教程为大家介绍 MySQL UNION 操作符的语法和实例. 描述 MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中.多 ...

  2. 【工具】Sublime Text 自动保存功能

    经常需要所以要频繁用到"ctrl+s"保存还是挺麻烦的,所以有的人需要用到失去焦点自动保存功能,这里简单记录下 1.点击"Preferences"里的设置-用户 ...

  3. day 71 Django基础六之ORM中的锁和事务

    Django基础六之ORM中的锁和事务   本节目录 一 锁 二 事务 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 锁 行级锁 select_for_update(no ...

  4. python简单试题4

    ( ps : 题目中用到的一些random函数在最后末尾处有介绍)  1,在屏幕上显示跑马灯文字 import os # 调用os模块 import time # 调用时间模块 def main(): ...

  5. Watchmen CodeForces - 650A

    Watchmen CodeForces - 650A Watchmen are in a danger and Doctor Manhattan together with his friend Da ...

  6. [NOIP2012]疫情控制(二分答案+倍增+贪心)

    Description H国有n个城市,这n个城市用n-1条双向道路相互连通构成一棵树,1号城市是首都,也是树中的根节点. H国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到边境 ...

  7. Java模拟音乐播放器 暂停与重新播放——线程如何控制另外一个线程的状态

    package com.example.Thread; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEve ...

  8. bash shell命令与监测的那点事(二)

    bash shell命令与监测的那点事之top 上次我们说到了ps命令,ps命令虽然在收集运行在系统上的进程信息很有用,但是也有不足之处,ps命令只能显示某个特定时间点的信息,如果你想观察频繁换进换出 ...

  9. Python+Selenium练习篇之7-利用name定位元素

    本文介绍如何通过节点中name的值来定位这个web元素.还是来看百度首页搜索输入框,通过name的值来定位. 相关脚本代码: # coding=utf-8 from selenium import w ...

  10. python 学习分享-常用模块篇

    模块 就是前人给你造的轮子,你开车就好!!! 常用模块有: time模块 random模块 os模块 sys模块 shutil模块 json  &  picle模块 shelve模块 xml处 ...