先列明材料:

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

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. 配置管理-SpringCloudConfig

    1.搭建配置管理服务 添加依赖 <dependencies> <dependency> <groupId>org.springframework.cloud< ...

  2. 【JAVA】mac配置java环境变量

    如果用bash,修改~/.bash_profile 或 ~/.profile: 如果用zsh,修改-/.zshrc 修改这些文件之后,重修打开terminal,配置不会丢 首先确保已经安装了jdk: ...

  3. Leetcode 515. 在每个树行中找最大值

    题目链接 https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/description/ 题目描述 您需要在二叉树的 ...

  4. Linux 内核源码外编译 linux模块--编译驱动模块的基本方法

    1.先编写一个简单的hello模块,hello.c 源码如下: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # defin ...

  5. 二叉树遍历(Java实现)

    二叉树遍历(Java实现)   主要是二叉树的遍历,包括递归遍历和非递归遍历 import java.util.ArrayDeque; import java.util.ArrayList; impo ...

  6. IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想

    首先声明,本文纯粹只是做为本人个人新手的理解.文中的想法我知道肯定有很多地方是错的. 但是这就是我作为一个新人的使用方法,对于大牛非常欢迎指导,对于喷子请绕道而行. 由于这是早上跟我学长讨论数据处理时 ...

  7. Ubuntu18.04安装docker、docker-compose、

    Ubuntu18.04下Docker CE安装 Docker版本分为两个:Docker Community Edition (CE)和 Docker Enterprise Edition (EE).D ...

  8. Pycharm注册码最新版本2019激活码activation code + 最实用的激活方法(亲测有效)

    同时适用于jetbrains全系列可用例:IDEA.WebStorm.phpstor 由于想趁着这个寒假多学习下python,所以这些实用小技巧分享给大家,拿走不谢~ 这里为大家提供了两种最实用的激活 ...

  9. PAT乙级 1001(C)+1054(Java)

    准备一天两道题,就这样吧,先从水题开始. 1001.点击查看 分析:看懂题就应该写出来了,注意边界与0情况的处理. #include<stdio.h> #include<math.h ...

  10. 爬虫:Scrapy1

    Python 2.7 npm install scrapy 步骤: 创建一个 Scrapy 项目 定义提取的 Item 编写爬取网站的 Spider 并提取 Item 编写 Item Pipeline ...