EM算法有很多的应用:

最广泛的就是GMM混合高斯模型、聚类、HMM等等.

The EM Algorithm

高斯混合模型(Mixtures of Gaussians)和EM算法

EM算法

求最大似然函数估计值的一般步骤:

(1)写出似然函数;

(2)对似然函数取对数,并整理;

(3)求导数,令导数为0,得到似然方程;

(4)解似然方程,得到的参数即为所求.

期望最大化算法(EM算法):

优点:

1、 简单稳定;

2、 通过E步骤和M步骤使得期望最大化,是自收敛的分类算法,既不需要事先设定类别也不需要数据见的两两比较合并等操作.

缺点:

1、迭代速度慢,次数多;

2、对初始化敏感;

3、当所要优化的函数不是凸函数时,容易陷入局部最优;

4、EM可能收敛到参数空间的边界.

#####################R语言:给定一组数据设置参数########################

###EM算法在高斯混合模型GMM(Gaussian Mixture Model )中有很重要的用途.

###简单来讲GMM就是一些高斯分布的组合.如果我们已知观测到的数据的类别,

###则可以根据ML来估计出GMM的参数.反之,对于没有类别信息一堆数据,如果

###我们已知GMM的参数,可以很容易用贝叶斯公式将它们归入不同的类中;但尴尬

###的问题是我们即不知道GMM参数,也不知道观测数据的类别.以下面生成的一维数据为###例,

###我们希望找到这两个高斯分布的参数,同时为这些数据分类.

# 设置模拟参数

if(FALSE){

miu1 <- 3

miu2 <- -2

sigma1 <- 1

sigma2 <- 2

alpha1 <- 0.4

alpha2 <- 0.6

# 生成两种高斯分布的样本

n <- 5000

x <- rep(0,n)

n1 <- floor(n*alpha1)

n2 <- n - n1

x[1:n1] <- rnorm(n1)*sigma1 + miu1

x[(n1+1):n] <- rnorm(n2)*sigma2 + miu2

hist(x,freq=F)

lines(density(x),col='red')

###下面用EM算法来估计GMM的参数.

}

x <- c(-67,-48,6,8,14,16,23,24,28,29,41,49,56,60,75)

# 设置初始值

n <- 15

m <- 2

miu <- runif(m)

sigma <- runif(m)

alpha <- c(0.5,0.5)

prob <- matrix(rep(0,n*m),ncol=m)

for (step in 1:10){

# E步骤

for (j in 1:m){

prob[,j]<- sapply(x,dnorm,miu[j],sigma[j])

}

sumprob <- rowSums(prob)

prob<- prob/sumprob

####做NAN处理

for(i in 1:n)

for(j in 1:m){

{

if(is.nan(prob[i,j])){prob[i,j] <- 0}

}

}

oldmiu <- miu

oldsigma <- sigma

oldalpha <- alpha

# M步骤

for (j in 1:m){

p1 <- sum(prob[ ,j])

p2 <- sum(prob[ ,j]*x)

miu[j] <- p2/p1

alpha[j] <- p1/n

p3 <- sum(prob[ ,j]*(x-miu[j])^2)

sigma[j] <- sqrt(p3/p1)

}

# 变化

epsilo <- 1e-3

if(sum(abs(miu-oldmiu))<epsilo && sum(abs(sigma-oldsigma))<epsilo && sum(abs(alpha-oldalpha))<epsilo) break

cat('step',step,'miu',miu,'sigma',sigma,'alpha',alpha,'\n')

}

####得出结果

step 1 miu 6.822826 17.40323 sigma 0.9985392 5.880087 alpha 0.08455481 0.3154452

step 2 miu 6.972619 22.93183 sigma 0.9996251 38.57418 alpha 0.1252252 0.8747748

#####

###GMM 模型常用于基于模型的聚类分析,GMM中的每一个高斯分布都可以代表数据的一类,

###整个数据就是多个高斯分布的混合。在R中的mclust包中的Mclust函数可以用来进行基

###于GMM的聚类分析。下面即是以最常用的iris数据集为例,聚类结果生成的图形:

library(mclust)

mc <-  Mclust(iris[,1:4], 3)

plot(mc, data=iris[,1:4], what="classification",dimens=c(3,4))

table(iris$Species, mc$classification)

EM算法原理以及高斯混合模型实践的更多相关文章

  1. 又看了一次EM 算法,还有高斯混合模型,最大似然估计

    先列明材料: 高斯混合模型的推导计算(英文版): http://www.seanborman.com/publications/EM_algorithm.pdf 这位翻译写成中文版: http://w ...

  2. 2. EM算法-原理详解

    1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 前言 概率 ...

  3. 记录:EM 算法估计混合高斯模型参数

    当概率模型依赖于无法观测的隐性变量时,使用普通的极大似然估计法无法估计出概率模型中参数.此时需要利用优化的极大似然估计:EM算法. 在这里我只是想要使用这个EM算法估计混合高斯模型中的参数.由于直观原 ...

  4. EM算法原理详解

    1.引言 以前我们讨论的概率模型都是只含观测变量(observable variable), 即这些变量都是可以观测出来的,那么给定数据,可以直接使用极大似然估计的方法或者贝叶斯估计的方法:但是当模型 ...

  5. EM算法原理简析——图解

    一. 扯淡 转眼间毕业快一年了,这期间混了两份工作,从游戏开发到算法.感觉自己还是喜欢算法,可能是大学混了几年算法吧!所以不想浪费基础... 我是个懒得写博客的人,混了几年coding,写的博客不超过 ...

  6. EM算法原理总结

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...

  7. EM算法与混合高斯模型

    非常早就想看看EM算法,这个算法在HMM(隐马尔科夫模型)得到非常好的应用.这个算法公式太多就手写了这部分主体部分. 好的參考博客:最大似然预计到EM,讲了详细样例通熟易懂. JerryLead博客非 ...

  8. EM算法--原理

    EM算法即期望最大化(Expection Maximization)算法,是一种最优化算法,在机器学习领域用来求解含有隐变量的模型的最大似然问题.最大似然是一种求解模型参数的方法,顾名思义,在给定一组 ...

  9. 【转】EM算法原理

    EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...

随机推荐

  1. BZOJ 3546 Life of the Party (二分图匹配-最大流)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3546 题意:给定一个二分图.(AB两个集合的点为n,m),边有K个.问去掉哪些点后 ...

  2. 【原文】前端程序员必须知道的高性能Javascript知识

    原文:前端程序员必须知道的高性能Javascript知识 想必大家都知道,JavaScrip是全栈开发语言,浏览器,手机,服务器端都可以看到JS的身影. 本文会分享一些高效的JavaScript的最佳 ...

  3. python中的is、==和cmp()比较字符串

    python 中的is.==和cmp(),比较字符串 经常写 shell 脚本知道,字符串判断可以用 =,!= 数字的判断是 -eq,-ne 等,但是 Python 确不是这样子地.所以作为慢慢要转换 ...

  4. Jquery基本、层次选择器

    基本选择器: $("#none").css("background","#bbffaa"); 改变id为none的所有元素的背景色 $(&q ...

  5. ubuntu linux 使用常见问题

    Q:gedit不支持windows下的中文显示 A:http://wiki.ubuntu.org.cn/Gedit%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81 Q:bash ...

  6. JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解

    javaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...

  7. java里有没有专门判断List里有重复的数据

    public static void main(String[] args)     {         List<String> list = new ArrayList<Stri ...

  8. maven的仓库、生命周期与插件

    一.仓库 统一存储所有Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(另一种特殊的远程仓库,为节省宽带和时 ...

  9. 免费在线客服QQ_网页接入及使用说明

    首先,注册一个QQ (haha,我觉得也是废话) 到QQ推广的网站设置,生成代码 链接:http://shang.qq.com/v3/widget.html 选择“免费开通”,然后就会看到下图,一般只 ...

  10. 使用ICMP协议Ping网络主机

    #coding:utf-8 #!/usr/bin/env python import os import argparse import socket import struct import sel ...