简单易学的机器学习算法——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算法的求解过程
- 初始化参数
,开始迭代;
- E步:假设
为第
次迭代参数
的估计值,则在第
次迭代中,计算
:
- M步:求使
极大化的
,确定第
次的参数的估计值
:
五、EM算法的收敛性保证
- E步:
- M步:
固定,将
看成变量:
六、利用EM算法参数求解实例
假设有有一批数据分别是由两个正态分布:
产生,其中,和
未知,
。但是不知道具体的
是第产生,即可以使用
和
表示。这是一个典型的涉及到隐藏变量的例子,隐藏变量为
和
。可以使用EM算法对参数进行估计。
- 首先是初始化
和
;
- E步:
,即求数据
是由第
个分布产生的概率:
- M步:
,即计算最大的期望值。然而我们要求的参数是均值,可以通过如下的方式估计:
Python代码
- #coding:UTF-8
- '''''
- Created on 2015年6月7日
- @author: zhaozhiyong
- '''
- from __future__ import division
- from numpy import *
- import math as mt
- #首先生成一些用于测试的样本
- #指定两个高斯分布的参数,这两个高斯分布的方差相同
- sigma = 6
- miu_1 = 40
- miu_2 = 20
- #随机均匀选择两个高斯分布,用于生成样本值
- N = 1000
- X = zeros((1, N))
- for i in xrange(N):
- if random.random() > 0.5:#使用的是numpy模块中的random
- X[0, i] = random.randn() * sigma + miu_1
- else:
- X[0, i] = random.randn() * sigma + miu_2
- #上述步骤已经生成样本
- #对生成的样本,使用EM算法计算其均值miu
- #取miu的初始值
- k = 2
- miu = random.random((1, k))
- #miu = mat([40.0, 20.0])
- Expectations = zeros((N, k))
- for step in xrange(1000):#设置迭代次数
- #步骤1,计算期望
- for i in xrange(N):
- #计算分母
- denominator = 0
- for j in xrange(k):
- denominator = denominator + mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
- #计算分子
- for j in xrange(k):
- numerator = mt.exp(-1 / (2 * sigma ** 2) * (X[0, i] - miu[0, j]) ** 2)
- Expectations[i, j] = numerator / denominator
- #步骤2,求期望的最大
- #oldMiu = miu
- oldMiu = zeros((1, k))
- for j in xrange(k):
- oldMiu[0, j] = miu[0, j]
- numerator = 0
- denominator = 0
- for i in xrange(N):
- numerator = numerator + Expectations[i, j] * X[0, i]
- denominator = denominator + Expectations[i, j]
- miu[0, j] = numerator / denominator
- #判断是否满足要求
- epsilon = 0.0001
- if sum(abs(miu - oldMiu)) < epsilon:
- break
- print step
- print miu
- 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算法的更多相关文章
- 简单易学的机器学习算法—SVD奇异值分解
简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义 假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇 ...
- 简单易学的机器学习算法—基于密度的聚类算法DBSCAN
简单易学的机器学习算法-基于密度的聚类算法DBSCAN 一.基于密度的聚类算法的概述 我想了解下基于密度的聚类算法,熟悉下基于密度的聚类算法与基于距离的聚类算法,如K-Means算法之间的区别. ...
- 斯坦福大学机器学习,EM算法求解高斯混合模型
斯坦福大学机器学习,EM算法求解高斯混合模型.一种高斯混合模型算法的改进方法---将聚类算法与传统高斯混合模型结合起来的建模方法, 并同时提出的运用距离加权的矢量量化方法获取初始值,并采用衡量相似度的 ...
- 机器学习五 EM 算法
目录 引言 经典示例 EM算法 GMM 推导 参考文献: 引言 Expectation maximization (EM) 算法是一种非常神奇而强大的算法. EM算法于 1977年 由Dempster ...
- 关于机器学习-EM算法新解
我希望自己能通俗地把它理解或者说明白,但是,EM这个问题感觉真的不太好用通俗的语言去说明白,因为它很简单,又很复杂.简单在于它的思想,简单在于其仅包含了两个步骤就能完成强大的功能,复杂在于它的数学推理 ...
- 机器学习之EM算法(五)
摘要 EM算法全称为Expectation Maximization Algorithm,既最大期望算法.它是一种迭代的算法,用于含有隐变量的概率参数模型的最大似然估计和极大后验概率估计.EM算法经常 ...
- 【机器学习】EM算法详细推导和讲解
今天不太想学习,炒个冷饭,讲讲机器学习十大算法里有名的EM算法,文章里面有些个人理解,如有错漏,还请读者不吝赐教. 众所周知,极大似然估计是一种应用很广泛的参数估计方法.例如我手头有一些东北人的身高的 ...
- 详解十大经典机器学习算法——EM算法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第14篇文章,我们来聊聊大名鼎鼎的EM算法. EM算法的英文全称是Expectation-maximization al ...
- 【机器学习】--EM算法从初识到应用
一.前述 Em算法是解决数学公式的一个算法,是一种无监督的学习. EM算法是一种解决存在隐含变量优化问题的有效方法.EM算法是期望极大(Expectation Maximization)算法的简称,E ...
随机推荐
- oracle3
查看表结构 DESC emp; 查询所有列 SELECT * FROM dept; 切忌动不动就用select * set timing on; 打开显示操作时间的开关,在下面显示查询时间. CREA ...
- IOS 整理
防止程序进入休眠状态 设置应用程序的 idleTimerDisabled 属性为 YES (默认为NO) [UIApplication sharedApplication].idleTimerDisa ...
- spring注解:@PostConstruct和@PreDestroy
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...
- JavaScript原型模式
一.提到原型模式,和构造函数关系密切,先讲一下它 javascript没有类,通过函数来模拟实现类,用new来创建对象,函数内部的this指针来指向调用它的对象. 事例中创建对象myGril,这个对象 ...
- AndroidStudio字体主题样式分享
最近慢慢在从eclipse往AndroidStudio习惯,但总觉得AS的默认字体颜色看的不舒服,便花了些时间将字体颜色样式改成了和原来类似的.以下是效果图. 这里是下载地址http://downlo ...
- Android工程师必会做的20道题
一.单选题 (共7道题,每题5分) 1.使用AIDL完成远程service方法调用下列说法不正确的是 A.aidl对应的接口名称不能与aidl文件名相同 B.aidl的文件的内容类似java代 ...
- 黑马程序员-File类+递归的简单应用
Java File类 Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目 ...
- .Net下的MSMQ(微软消息队列)的同步异步调用
一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具.消息队列 和电子邮件有着很多相似处,他们都包含多个属性, ...
- C# DataTable的詳細用法 - hcw_peter的专栏 - 博客频道 - CSDN
C# DataTable的詳細用法 - hcw_peter的专栏 - 博客频道 - CSDN.NET 在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够 ...
- Laravel_1 安装
1>http://www.golaravel.com/post/install-and-run-laravel-5-x-on-windows/ 2>http://www.golaravel ...