em算法详细例子及推导_可能是最容易理解的EM算法入门文章

7fd7fd975102d682e5ba1d60358919b1.png

学习过机器学习的同学一定听说过或使用过EM算法,不知道你们第一次见到这个算法是什么感觉,反正我第一次见表情就这个样子

cda2e2cef65116d20fa4a8cb93caf48e.png

这个推导啥子的也太难了把。不过经过我不停不停不停不停的看这个算法,到今天我突然觉得自己好像明白了,然后我决定把我的理解写成一篇文章,毕竟只有给别人讲明白了才能算自己真正的明白。那么就进入我们这篇文章的主题:EM算法。

我们先讲一下极大似然估计法,然后再引申出EM算法

1.极大似然估计法

假设我们有如下的一维高斯分布

的概率密度函数为:

其似然函数为

求对数为

对其求导,可以得到如下似然方程组

我们可以使用

  • 梯度下降法
  • 极大似然估计法

这两种方法来根据样本估计高斯分布的参数,具体代码如下:

def 

我们使用均值为1,标准差为2的高斯分布随机生成了1000个样本,然后分别使用梯度下降和极大似然估计法两种方式来估计参数,得到的参数如下:

7fb20499574e5165c11f16706ce4ca65.png

两种方法得到的结果还是挺不错的。

2. EM算法

极大似然算法确实可以很方便的根据样本估算模型的参数,如果样本来自一个以上的模型,我们又不知道某个样本点到底是来自某个模型的,那么此时极大似然算法就无能为力了。

我们依旧用高斯分布来举例子,混合高斯分布的模型如下:

其中

是系数,
,同时
是高斯分布密度函数,

这个时候我们需要估计的参数有

此时阻挡我们使用极大似然法的原因就是:我们不知道到底哪些样本点由哪个模型生成。

现在假设我们有1000个样本点,由两个独立的高斯分布生成。我们知道其中第一类有300个,第二类有700个,那么我们就可以对两个高斯分布分别使用极大似然法估计他们的参数了。

但事实上我们知道的只有一堆样本点以及其可能的类别数

,至于某个样本到底属于那个模型我们是不知道。此时就要到EM算法登场的时候了,
EM算法的主要思想如下:
  • E步:先随便设置一下各种参数
    ,然后再算一下在当前情况下每个样本点属于哪一个模型的概率值;
  • M步:此时我们知道了一个样本点属于某个模型的概率,然后再次计算各个模型的参数(具体计算方法在下面);然后返回上一步,直至算法收敛。

现在我们知道了EM算法的思想,那么EM算法是怎么在第二步估算出各个模型的参数呢。

我们先介绍一些概念:用

来表示观测随机变量的数据,
表示隐随机变量的数据(比如上述混合高斯分布样本点属于某个模型的概率),
连在一起称为
完全数据(这个我们是没法知道的),观测数据
也被称为
不完全数据(这个我们知道),
被称为
隐变量(我们不知道),假定给定观测数据
,其概率分布是
,其中
是需要估计的模型参数,那么不完全数据
的似然函数是
,对数似然函数为
的联合概率分布是
,其对数似然函数是

EM算法是通过迭代来求

的极大似然估计,也就是在估计出来的参数条件下,模型产生给定样本点的概率最大~。因此我们要最大化下式。

上式中最右边的

指的的一个模型被选择的概率,
是指我们选定了一个模型,此模型产生这个样本点的概率

7e848d0836e55d14c4f9ed327b8e9d3c.png

上图是一维高斯混合分布,黄色的那个高斯分布均值为0,方差为1,被选择的概率为0.3;红色的那个高斯分布均值为3,方差为4,被选择的概率为0.7。

(下面部分参考《李航统计学习》P.159,推导更详细了一点)

EM是通过迭代的方法来逐步逼近近似极大化

,假设某一次我们得到了模型的参数估计值为
(是一个我们知道的值),我们要求估计新的
可以时
增大,即
。我们计算两者的差

利用Jenson不等式

第一步到第二步除了使用了Jenson不等式,还使用了

,其中的
都被约去。

则有

,为了使
尽可能的大,我们应该选择
使
达到极大值。即

通过省去对

极大化是常数的项。

其中

指的是当我们知道模型的参数和样本的分布情况时,此时隐变量的状态。如果模型为高斯分布,那么
指的就是样本点属于某个模型的概率;
就是我们要找到
使得在当前
的情况下,获得函数的一个极大值。

EM算法的流程如下:

(1)随机选择参数

,开始迭代

(2)E步:计算

(3)M步:最大化

(4)重复(2),(3)步直到收敛

对高斯混合模型使用EM算法估计参数,其中第一个高斯分布均值为3,方差为4,系数为0.7;第二个高斯分布均值为0,方差为1,系数为0.3。

def 

算法的估计值如下:

6acc0acca29a7c2f0e14268f74282d22.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值