简单易学的机器学习算法——EM算法

一、机器学习中的参数估计问题

在前面的博文中,如“简单易学的机器学习算法——Logistic回归”中,采用了极大似然函数对其模型中的参数进行估计,简单来讲即对于一系列样本,Logistic回归问题属于监督型学习问题,样本中含有训练的特征以及标签,在Logistic回归的参数求解中,通过构造样本属于类别和类别的概率:

这样便能得到Logistic回归的属于不同类别的概率函数:

此时,使用极大似然估计便能够估计出模型中的参数。但是,如果此时的标签是未知的,称为隐变量,如无监督的学习问题,典型的如K-Means聚类算法,此时不能直接通过极大似然估计估计出模型中的参数。

二、EM算法简介

在上述存在隐变量的问题中,不能直接通过极大似然估计求出模型中的参数,EM算法是一种解决存在隐含变量优化问题的有效方法。EM算法是期望极大(Expectation Maximization)算法的简称,EM算法是一种迭代型的算法,在每一次的迭代过程中,主要分为两步:即求期望(Expectation)步骤和最大化(Maximization)步骤。

三、EM算法推导的准备

1、凸函数

是定义在实数域上的函数,如果对于任意的实数,都有

那么是凸函数。若不是单个实数,而是由实数组成的向量,此时,如果函数的Hesse矩阵是半正定的,即

那么是凸函数。特别地,如果或者,那么称为严格凸函数。

2、Jensen不等式

如果函数是凸函数,是随机变量,那么

特别地,如果函数是严格凸函数,那么当且仅当

即随机变量是常量。

(图片来自参考文章1)

注:若函数是凹函数,上述的符号相反。

3、数学期望

3.1随机变量的期望

设离散型随机变量的概率分布为:

其中,,如果绝对收敛,则称的数学期望,记为,即:

若连续型随机变量的概率密度函数为,则数学期望为:

3.2随机变量函数的数学期望

是随机变量的函数,即,若是离散型随机变量,概率分布为:

则:

是连续型随机变量,概率密度函数为,则

四、EM算法的求解过程

    假设表示观测变量,表示潜变量,则此时即为完全数据,的似然函数为,其中,为需要估计的参数,那么对于完全数据,的似然函数为
    构建好似然函数,对于给定的观测数据,为了估计参数,我们可以使用极大似然估计的方法对其进行估计。因为变量是未知的,我们只能对的似然函数为进行极大似然估计,即需要极大化:
上述式子中无法直接对求极大值,因为在函数中存在隐变量,即未知变量。若此时,我们能够确定隐变量的值,便能够求出的极大值,可以用过不断的修改隐变量的值,得到新的的极大值。这便是EM算法的思路。通过迭代的方式求出参数
    首先我们需要对参数赋初值,进行迭代运算,假设第次迭代后参数的值为,此时的log似然函数为,即:
在上式中,第二行到第三行使用到了Jensen不等式,由于log函数是凹函数,由Jensen不等式得到:
 
 
表示的是的期望,其中,表示的是隐变量满足的某种分布。这样,上式的值取决于的概率。在迭代的过程中,调整这两个概率,使得下界不断的上升,这样就能求得的极大值。注意,当等式成立时,说明此时已经等价于。由Jensen不等式可知,等式成立的条件是随机变量是常数,即:
已知:
所以:
则:
至此,我们得出了隐变量满足的分布的形式。这就是EM算法中的E步。在确定了后,调整参数使得取得极大,这便是M步。EM算法的步骤为:
  1. 初始化参数,开始迭代;
  2. E步:假设为第次迭代参数的估计值,则在第次迭代中,计算
  3. M步:求使极大化的,确定第次的参数的估计值

五、EM算法的收敛性保证

迭代的过程能否保证最后找到的就是最大的似然函数值呢?即需要证明在整个迭代的过程中,极大似然估计是单调增加的。假定是EM算法的第次和第次迭代后的结果,选定,进行迭代:
  1. E步:
  2. M步:

固定,将看成变量:

上式中,第一个大于等于是因为:

六、利用EM算法参数求解实例

假设有有一批数据分别是由两个正态分布:

产生,其中,未知,。但是不知道具体的是第产生,即可以使用表示。这是一个典型的涉及到隐藏变量的例子,隐藏变量为。可以使用EM算法对参数进行估计。

  1. 首先是初始化
  2. E步:,即求数据是由第个分布产生的概率:
  3. M步:,即计算最大的期望值。然而我们要求的参数是均值,可以通过如下的方式估计:

Python代码

  1. #coding:UTF-8
  2. '''''
  3. Created on 2015年6月7日
  4. @author: zhaozhiyong
  5. '''
  6. from __future__ import division
  7. from numpy import *
  8. import math as mt
  9. #首先生成一些用于测试的样本
  10. #指定两个高斯分布的参数,这两个高斯分布的方差相同
  11. sigma = 6
  12. miu_1 = 40
  13. miu_2 = 20
  14. #随机均匀选择两个高斯分布,用于生成样本值
  15. N = 1000
  16. X = zeros((1, N))
  17. for i in xrange(N):
  18. if random.random() > 0.5:#使用的是numpy模块中的random
  19. X[0, i] = random.randn() * sigma + miu_1
  20. else:
  21. X[0, i] = random.randn() * sigma + miu_2
  22. #上述步骤已经生成样本
  23. #对生成的样本,使用EM算法计算其均值miu
  24. #取miu的初始值
  25. k = 2
  26. miu = random.random((1, k))
  27. #miu = mat([40.0, 20.0])
  28. Expectations = zeros((N, k))
  29. for step in xrange(1000):#设置迭代次数
  30. #步骤1,计算期望
  31. for i in xrange(N):
  32. #计算分母
  33. denominator = 0
  34. for j in xrange(k):
  35. denominator = denominator + mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
  36. #计算分子
  37. for j in xrange(k):
  38. numerator = mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
  39. Expectations[i, j] = numerator / denominator
  40. #步骤2,求期望的最大
  41. #oldMiu = miu
  42. oldMiu = zeros((1, k))
  43. for j in xrange(k):
  44. oldMiu[0, j] = miu[0, j]
  45. numerator = 0
  46. denominator = 0
  47. for i in xrange(N):
  48. numerator = numerator + Expectations[i, j] * X[0, i]
  49. denominator = denominator + Expectations[i, j]
  50. miu[0, j] = numerator / denominator
  51. #判断是否满足要求
  52. epsilon = 0.0001
  53. if sum(abs(miu - oldMiu)) < epsilon:
  54. break
  55. print step
  56. print miu
  57. print miu

最终结果

[[ 40.49487592  19.96497512]]

参考文章:

1、(EM算法)The EM Algorithm (http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html)

2、数学期望(http://wenku.baidu.com/view/915a9c1ec5da50e2524d7f08.html?re=view)

简单易学的机器学习算法——EM算法的更多相关文章

  1. 简单易学的机器学习算法—SVD奇异值分解

    简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义     假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇 ...

  2. 简单易学的机器学习算法—基于密度的聚类算法DBSCAN

    简单易学的机器学习算法-基于密度的聚类算法DBSCAN 一.基于密度的聚类算法的概述 我想了解下基于密度的聚类算法,熟悉下基于密度的聚类算法与基于距离的聚类算法,如K-Means算法之间的区别.    ...

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

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

  4. 机器学习五 EM 算法

    目录 引言 经典示例 EM算法 GMM 推导 参考文献: 引言 Expectation maximization (EM) 算法是一种非常神奇而强大的算法. EM算法于 1977年 由Dempster ...

  5. 关于机器学习-EM算法新解

    我希望自己能通俗地把它理解或者说明白,但是,EM这个问题感觉真的不太好用通俗的语言去说明白,因为它很简单,又很复杂.简单在于它的思想,简单在于其仅包含了两个步骤就能完成强大的功能,复杂在于它的数学推理 ...

  6. 机器学习之EM算法(五)

    摘要 EM算法全称为Expectation Maximization Algorithm,既最大期望算法.它是一种迭代的算法,用于含有隐变量的概率参数模型的最大似然估计和极大后验概率估计.EM算法经常 ...

  7. 【机器学习】EM算法详细推导和讲解

    今天不太想学习,炒个冷饭,讲讲机器学习十大算法里有名的EM算法,文章里面有些个人理解,如有错漏,还请读者不吝赐教. 众所周知,极大似然估计是一种应用很广泛的参数估计方法.例如我手头有一些东北人的身高的 ...

  8. 详解十大经典机器学习算法——EM算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第14篇文章,我们来聊聊大名鼎鼎的EM算法. EM算法的英文全称是Expectation-maximization al ...

  9. 【机器学习】--EM算法从初识到应用

    一.前述 Em算法是解决数学公式的一个算法,是一种无监督的学习. EM算法是一种解决存在隐含变量优化问题的有效方法.EM算法是期望极大(Expectation Maximization)算法的简称,E ...

随机推荐

  1. Oracle 数据库用户管理

    Oracle 数据库用户管理 Oracle 权限设置      一.权限分类: 系统权限:系统规定用户使用数据库的权限.(系统权限是对用户而言). 实体权限:某种权限用户对其它用户的表或视图的存取权限 ...

  2. [TypeScript] Using Lodash in TypeScript with Typings and SystemJS

    One of the most confusing parts of getting started with TypeScript is figuring out how to use all th ...

  3. mybatis02 架构

    SqlMapConfig.xml(mybatis全局配置文件加载mybatis环境(数据源,事物,mapper.xml(配置sql语句),),类似于hibernate的全局配置文件,用于加载hiber ...

  4. redis持久化和常见故障

    https://segmentfault.com/a/1190000004135982 redis 主从复制 Redis主从复制的原理 当建立主从关系时,slave配置slaveof <mast ...

  5. mysql日期时间函数2

    win7可以设定每周从哪一天开始,win2003等不能方便的修改.有的是周日开始,有的是周一开始.而工作中有的时候每周是从周六开始算的,有些数据需要按周统计,那么那种方式比较好呢?   通过下面的研究 ...

  6. careercup-栈与队列 3.5

    3.5 实现一个MyQueue类,该类用两个栈来实现一个队列. 解答 队列是先进先出的数据结构(FIFO),栈是先进后出的数据结构(FILO), 用两个栈来实现队列的最简单方式是:进入队列则往第一个栈 ...

  7. 卸载AMH 5.0面板的具体办法

    安装AMH 5.0面板只有YES.NO和EXIT,和AMH 4.X的安装.卸载.退出有点不同,那么如何卸载AMH 5.0面板呢? 1.root登录ssh 2.输入如下命令: killall php-f ...

  8. [Excel] C#GridViewExport帮助类,美化导出 (转载)

    主要功能如下1.将整GridView的数据导出到Excel中关增加一个效果线做美化最新的GridViewExport操作类看下面代码吧 /// <summary> /// 类说明:Grid ...

  9. Eclipse闪退/打不开/无法启动/一闪而过

    转自:http://my.oschina.net/psuyun/blog/421058 很长时间了,写java.写android都是用的Eclipse.可是突然有一天,当我像往常一样试图打开Eclip ...

  10. Javascript基础学习(1)_类型、值和变量

    1.null和undefined ①概念上区别: null是一个特殊的对象,是“非对象”,使用typeof后是object对象 undefined用未定义的值表示更深层次的“空值”,它是变量的一种取值 ...