一. 例子讲解
假设有两个硬币1和2,随机抛出后出现正面概率为
、
。每次取一枚银币,连续抛5次,共抛5轮,数据如下:硬币1-->(3正2反);硬币2-->(2正3反);硬币3-->(1正4反);银币4-->(3正2反);银币5-->(2正3反)
很容易计算硬币1正面
的概率
,
。
假如我们不知道选出的是哪个银币,还需要计算出
、
,该如何处理?数据如下:?-->(3正2反);?-->(2正3反);?-->(1正4反);?-->(3正2反);?-->(2正3反)
对每个问号编个号(
),
表示第1次选择的是硬币1还是硬币2,后面依次类推。在这种情况下该如何计算
。
先随机初始化一个
,用它来估算z,然后基于z用最大似然概率去估计新的
,如新的
和估计的
相等,则我们证明我们估计正确,否则用新的出的
再去估算z,重复直到收敛。
初始设
、
。其中第一组硬币1出现的概率:
,其它数据如下则数据如下。硬币1概率:0.00512,硬币2概率:0.03087-->(3正2反); 硬币1概率:0.02048,硬币2概率:0.01323-->(2正3反); 硬币1概率:0.08192,硬币2概率:0.00567-->(1正4反); 硬币1概率:0.00512,硬币2概率:0.03087-->(3正2反);硬币1概率:0.02048,硬币2概率:0.01323-->(2正3反);
每个取硬币1或2出现最大的最大的概率,则此时
,
。
我们使用所有的z值计算,根据上述数据,可算出z值对应的
的期望。当
时,硬币1的期望
,同理
。则此时数据如下: :0.14,
-->(3正2反);
:0.61,
-->(2正3反);
:0.94,
-->(1正4反);
:0.14,
-->(3正2反);
:0.61,
-->(3正2反)。
计算在硬币1 条件下正方面分布,如:
正面概率3*0.14 = 0.42, 反面概率2*0.14 = 0.28,Z分布数据如下:
0.42, 0.28;
1.22, 1.83;
0.94, 3.76;
0.42, 0.28;
1.22,1.93。则可以计算出
,正面/(正面+反面)。
此时算出的值,更接近真实值0.4。
二. 算法过程
2.1 Jensen不等式
当函数满足凸函数(存在局部极小值),则有
,
是求期望。可从如下图理解和记忆。
2.2 算法推导
有观测变量数据Y(上例中正反面结果),隐藏变量Z(上例中硬币1硬币2),求分布
的
值。已知结果,和分布模型,求分布参数,使用似然估计算法:
取对数,设
为隐变量Z的分布。
(公式1)。
运用Jensen不等式(上图画的),
公式1有:
(公式2)
其中当满足
(公式3),C为常数,取等号。对公式3做如下变换:
两边对z取积分
,可推出
。
则有
(公式4),因为此时的
为估计出来的值,这里记为
。把
带入公式2中,则最后极大似然估计就如下:
,由于第二项为常数,所以最终我们的目标函数为:
(公式5), 其中
为参数, 这就是EM算法的E部。
接下来求
的极大值,得出
也就是
,即
。在把
带入到Q函数中,求极大值又可以得到
,最后直到收敛。
2.3 EM算法收敛性
要证明算法收敛,其实是证明
。
取对数
(公式6)
有
(公式7)设:
(公式8)
则
,则同时取
,并相减:
(公式9)。很明显公式9前个大括号大于0,那边就只要计算后一个大括号的值:
得证。
三. 高斯混合模型离散随机变量期望:
连续随机变量的期望:
方差定义:
,期望的表示方式为:
协方差定义:
,
表示两个变量空间。用期望的表示方式为:
,两个变量独立协方差为0。 协方差矩阵:
多维高斯密度公式:
;
表示纬度维
的向量,
各纬度向量的平均值,
所有向量
协方差矩阵。
如下图所示,有观测样本数据
,属于3个正态分布(参数未知),哪些样本属于哪个正态分布未知。从图示直观来看,样本
最佳概率密度曲线应该是三个正态分布曲线的组合
。高斯密度示意图
从几何意义理解,高斯混合模型就是多个独立高斯分布按照权重叠加的模型,其分布模型公式记为:
(公式 1) ,
是混合模型高斯数量;
高斯模型的权重(k个高斯模型的分布),
;
是高斯分布密度,
。设样本数据
,则完整数据就为
,则z是满足
的分布,那么此时
。
根据EM算法,z的分布是离散分布:
=
这里把
拆开进行换算得到:
=
有
则有:
,在这个后验分布中此时的
其实是
,是已知值。代入
,得:
最终求导可得:
,另外两个参数不再列举。
四. python例子
还是代码简单,高斯混合模型的预测,详情看示范例子:https://github.com/zx3305/tennis/blob/master/em/main.pygithub.com
参考资料: