学习过机器学习的同学一定听说过或使用过EM算法,不知道你们第一次见到这个算法是什么感觉,反正我第一次见表情就这个样子
这个推导啥子的也太难了把。不过经过我不停不停不停不停的看这个算法,到今天我突然觉得自己好像明白了,然后我决定把我的理解写成一篇文章,毕竟只有给别人讲明白了才能算自己真正的明白。那么就进入我们这篇文章的主题:EM算法。
我们先讲一下极大似然估计法,然后再引申出EM算法
1.极大似然估计法
假设我们有如下的一维高斯分布
其似然函数为
求对数为
对其求导,可以得到如下似然方程组
我们可以使用
- 梯度下降法
- 极大似然估计法
这两种方法来根据样本估计高斯分布的参数,具体代码如下:
def
我们使用均值为1,标准差为2的高斯分布随机生成了1000个样本,然后分别使用梯度下降和极大似然估计法两种方式来估计参数,得到的参数如下:
两种方法得到的结果还是挺不错的。
2. EM算法
极大似然算法确实可以很方便的根据样本估算模型的参数,如果样本来自一个以上的模型,我们又不知道某个样本点到底是来自某个模型的,那么此时极大似然算法就无能为力了。
我们依旧用高斯分布来举例子,混合高斯分布的模型如下:
其中
这个时候我们需要估计的参数有
此时阻挡我们使用极大似然法的原因就是:我们不知道到底哪些样本点由哪个模型生成。
现在假设我们有1000个样本点,由两个独立的高斯分布生成。我们知道其中第一类有300个,第二类有700个,那么我们就可以对两个高斯分布分别使用极大似然法估计他们的参数了。
但事实上我们知道的只有一堆样本点以及其可能的类别数
- E步:先随便设置一下各种参数
,然后再算一下在当前情况下每个样本点属于哪一个模型的概率值;
- M步:此时我们知道了一个样本点属于某个模型的概率,然后再次计算各个模型的参数(具体计算方法在下面);然后返回上一步,直至算法收敛。
现在我们知道了EM算法的思想,那么EM算法是怎么在第二步估算出各个模型的参数呢。
我们先介绍一些概念:用
EM算法是通过迭代来求
上式中最右边的
上图是一维高斯混合分布,黄色的那个高斯分布均值为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
算法的估计值如下: