EM算法是一种迭代算法,用于含有隐变量的概率模型的极大似然估计,或极大后验概率估计。EM算法有两步,E步和M步,E步求期望,M步求最大化。合称EM算法,本文主要以the element of statistic learning 第八章关于EM算法的介绍过程为主线撰写,对难以理解的地方尽量加以解释。

先来看个例子。有一堆数据,如下表。

在R中,我们直接把它写到list中。代码:y=c(-0.39, 0.12,0.94 ,1.67, 1.76, 2.44 ,3.72, 4.28, 4.92 ,5.53,0.06 ,0.48, 1.01, 1.68, 1.80 ,3.25, 4.12, 4.60, 5.28 ,6.22 )

hist(y,breaks=15,col="red")#画出书上图8.5所示的直方图。

从这个图中可以看出,这堆数据有两个峰值,用单个正态分布难以描述,所以可以用两个正态分布的混合来建模。令

其中 Δ 属于(0,1)。这个生成过程解释如下:

先以概率π生成一个参数Δ∈(0,1),然后把这个Δ代入Y中,则Y不是等于Y1 就是等于Y2。现在我们想用Y分布函数来建模上面这组数据。其中要确定的数据为

基于N个训练数据的似然函数是

直接求这个似然函数比较难,因为其中log函数里面有一个加号。这里有一个简单的策略可以避开在log里面求和。因为Δ不是取0就是取1.当Δ取0时,样本来自Y1,反之,当Δ取1时,样本来自Y2.假定我们对于每个样本,已经知道Δ的值了。于是对数似然函数可以写成

其中的π,mu和sigma都可以根据各自的样本类分别估算出。π可根据Δ为1的比例得出。但现在的问题是我们并不知道Δ的值。因此,我们采用迭代的方法,每次采用估算出来的Δ的期望值。

这个期望值是根据theta和已知样本计算出来的,theta一开始赋予一个初值,后面在迭代中持续更新。具体的赋值方法见下面的算法流程。注意对于每一个样本n,我们都要计算一个γ,对于k类问题,每一类都要计算一个γ。所以有NK个γ。这里因为是两类问题,所以只要计算一个,因为另一个只要1-γ即可。伽马可以看做是Δ的期望值。

在EM算法中,我们已有的输入是:不完全数据Y,隐变量Z,隐变量和Y的联合分布-这里是混合高斯分布。隐变量自身的分布,这里是伯努利分布(取0,1)。

EM算法就是希望能够根据隐变量的后验分布(根据给定初值和样本计算)来计算完全数据(包括样本和隐变量)的期望值。并且使这个期望最大。

下面贴出该算法的R代码:以及相应的计算结果。

mu1 <-y[sample(1:20,1)];mu2 <- y[sample(1:20,1)];pi <- 0.5
sigma1 <- sd(y);sigma2 <-sd(y);
loglikelihood <- c()

for (i in 1:50)
    {
        gama <- c()#E-step
        for(j in 1:length(y))
            {
              fhtheta1 <- dnorm(y[j],mean=mu1,sd=sigma1)
              fhtheta2 <- dnorm(y[j],mean=mu2,sd=sigma2)
              gamaTemp <- pi*fhtheta2/((1-pi)*fhtheta1+pi*fhtheta2)
              gama <- c(gama,gamaTemp)
            }
        gamasum <- sum(gama) #M-step
        gamasumY <- sum(gama*y)
        gamasuminverse <- sum(1-gama)
        gamasuminverseY <- sum((1-gama)*y)
        mu1 <- gamasuminverseY/gamasuminverse
        mu2 <- gamasumY/gamasum
        sigma1temp <- sum((1-gama)*(y-mu1)^2)
        sigma1 <- sqrt(sigma1temp/gamasuminverse)
        sigma2temp <- sum(gama*(y-mu2)^2)
        sigma2 <- sqrt(sigma2temp/gamasum)
          pi <- gamasum/length(y)
        loglikelihoodTemp <- sum(log((1-pi)*dnorm(y,mean=mu1,sd=sigma1)+pi*dnorm(y,mean=mu2,sd=sigma2)))
        loglikelihood <- c(loglikelihood,loglikelihoodTemp)

}

输出结果为
pi;mu1;mu2;sigma1;sigma2

0.5545902
[1] 4.655913
[1] 1.083162
[1] 0.9048721
[1] 0.9007611

和书上的结果略有不同,可能是由于初始值的原因。不过大致能够说明情况。下一篇博客介绍一般性的EM算法。

plot(loglikelihood[1:50],col="green")#画出书上的图8.6

大致趋势是一样的。

ESL-chapter8-EM算法介绍1-混合高斯的例子相关推荐

  1. 最好的EM算法介绍-由例子介绍原理

    版权声明: 本文系转载,由zouxy09所有,发布于http://blog.csdn.net/zouxy09.如果转载,请尊重作者的版权所有,注明出处.如果有问题,请联系作者 zouxy09@qq.c ...

  2. 统计学习方法第九章作业:三硬币EM算法、GMM高维高斯混合模型 代码实现

    三硬币EM算法 import numpy as np import mathclass Three_coin:def __init__(self,pai=0.0,p=0.0,q=0.0):self.p ...

  3. EM算法推导以及在高斯混合模型中的应用(详细)

    文章目录 EM算法的导出 EM算法的收敛性 EM算法在高斯混合模型中的应用 高斯混合模型 高斯混合模型参数估计的EM算法 算法步骤 算法推导 以一维情形为例p=1 参考教材:<统计学习方法> ...

  4. EM算法介绍和参数初始化研究

    转载自Emma_Zhang:https://www.cnblogs.com/Gabby/p/5344658.html 我讲EM算法的大概流程主要三部分:需要的预备知识.EM算法详解和对EM算法的改进. ...

  5. 概率语言模型及其变形系列-PLSA及EM算法

    转载自:http://blog.csdn.net/yangliuy/article/details/8330640 本系列博文介绍常见概率语言模型及其变形模型,主要总结PLSA.LDA及LDA的变形模 ...

  6. 实战EM算法与图像分割

    EM 算法是求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行估计,是一种非常简单实用的学习算法.这种方法可以广泛地应用于处理缺损数据.截尾数据以及带有噪声等所谓的不完全数据,可以具体来说 ...

  7. 详解EM算法与混合高斯模型(Gaussian mixture model, GMM)

    最近在看晓川老(shi)师(shu)的博士论文,接触了混合高斯模型(Gaussian mixture model, GMM)和EM(Expectation Maximization)算法,不禁被论文中 ...

  8. EM算法--应用到三个模型: 高斯混合模型 ,混合朴素贝叶斯模型,因子分析模型...

    主要是对Ng教授的machinelearning视频学习和参考jerryLead讲义整理(特别鸣谢~): 由"判别模型.生成模型与朴素贝叶斯方法 "一节得知: 判别模型求的是条件概 ...

  9. 机器学习-聚类(混合高斯算法)

    一,介绍 学习混合高斯,先要了解几个概念: 1,协方差: 协方差是对两个随机变量联合分布线性相关程度的一种度量.两个随机变量越线性相关,协方差越大,完全线性无关,协方差为零. 根据数学期望的性质: 推 ...

  10. EM算法在高斯混合模型学习中的应用

    本篇文章是之前期望极大算法(EM算法)文章的后续,有需要可以先看看那篇文章关于EM算法的推导. 高斯混合模型 高斯混合模型是研究算法的人避不开的一个东西,其在非深度学习的远古时代经常被用到,比如图像处 ...

最新文章

  1. 惊艳亮相!马斯克发布自研超算 Dojo 芯片、特斯拉人形机器人
  2. 最近面试 Java 后端开发的感受!
  3. bootstrap java_查看tomcat启动文件都干点啥---Bootstrap.java
  4. jQuery 之 serialize() serializeArray()
  5. 12个高矮不同的人排成两排
  6. Java黑皮书课后题第8章:**8.11(游戏:九个硬币的正反面)一个3*3的矩阵中放置了9个硬币,这些硬币有些面朝上有朝下。1表示正面0表示反面,每个状态使用一个二进制数表示。使用十进制数表示状态
  7. C# 制作Com组件:java调用.net DLL的方法
  8. 从XaaS到Java EE – 2012年哪一种该死的云最适合我?
  9. 使用smo算法编写svm对CIFAR-10数据分类
  10. redis zset怎么排序_redis(set、zset)类型使用和使用场景
  11. MacOS Ventura 13.0 Beta1 (22A5266r) 带 OC 0.8.1 / Cl 5146 / PE 三分区原版黑苹果镜像
  12. matlab如何拟合方程,如何用MATLAB拟合曲线来求参数?
  13. c++求100以内素数
  14. 一个20岁工作了4年男网管真情自白书
  15. MQTT 基础--遗嘱信息(Last will)和遗嘱标示(Testament):第 9 部分
  16. 【EagleEye】2020-ECCV-EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning-论文详解
  17. 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解
  18. keras.metrics有五种accuracy
  19. Simulink仿真示波器波形出现小圆圈
  20. PHP 7系列版本(7.0、7.1、7.2、7.3、7.4)新特性

热门文章

  1. 纵横职场20条黄金法则,知人善用的五个标准,李嘉诚14句经典财富格言
  2. R/ggplot2保存图片中文字体至PDF——showtext包一文清除所有障碍
  3. DataSource 详解
  4. [Unity]Mesh Baker3.1.0使用教程
  5. Ubuntu 使用firefox插件下载百度云文件
  6. paranoid用法
  7. 考研英语近义词与反义词·三
  8. 关于CSS小三角的实现,小三角边框的实现,IE6下CSS小三角非透明的情况
  9. 颜色匹配 opencv版
  10. Maven学习记录之依赖问题 Missing artifact org.aspectj:aspectjweaver:jar:1.8.0.M1