本文主要是介绍EM算法,高斯混合模型(GMM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1.EM算法
2、高斯混合模型(GMM)
3.GMM和k-means
1.EM算法
具体流程如下:
输入:观测变量数据Y,隐变量数据Z,联合分布P(Y, Z|θ),条件分布P(Z|Y, θ)
输出:模型参数θ
1)选择参数θ的初始值θ(0),开始迭代
2)E步:
记θ(i)次迭代参数为θ的估计值,在第i+1次迭代的E步,计算(基于当前求得的模型参数θ猜测隐变量的期望值,因此E步也称为期望步)
3)M步:
求使得Q函数极大化的θ值,确定第i+1次迭代的参数的估计值θ(i+1)
4)重复2, 3步直至收敛
注意:EM算法是对初始化参数敏感的
2、高斯混合模型(GMM)
EM算法的一个重要应用场景就是高斯混合模型的参数估计。高斯混合模型就是由多个高斯模型组合在一起的混合模型(可以理解为多个高斯分布函数的线性组合,理论上高斯混合模型是可以拟合任意类型的分布),例如对于下图中的数据集如果用一个高斯模型来描述的话显然是不合理的
对于上图如果我们用两个高斯模型来描述,则如下
然而对于两个高斯模型我们如何将其组合在一起呢,最简单的方式就是通过线性组合的形式来组合,其具体表达式如下:
其中αk是系数,αk ≥ 0,且所有的α总和为1,k表示第k个模型,其中Φ(y|θk) 是高斯分布密度(θk = (μk,σk2)),具体表达式如下
高斯混合模型常用语聚类中(现实中大多数分布都是正态分布,而在聚类中的各个类别可能是分布参数不同的正态分布)。对于高斯模型的应用大致是先随机在这K个模型中任选一个模型(αk是第k个模型被选中的概率,注意在这里的混合模型和集成学习中的模型是不一样的,这里实际应用的只是混合模型中的一个),然后再用这个模型进行预测。而且在用高斯混合模型进行聚类时,混合模型中的模型个数k事实上就是聚类的簇数k。
用EM算法来估计高斯混合模型的参数,在这里参数θ = (α1,α2,...,αk;θ1,θ2,...,θk),在估计之前我们得预先明确隐变量。先假定观测数据yj(j = 1,2,...,N),具体yj的产生过程如下,首先依照概率αk选择第k个高斯分布模型,然后用这个模型生成观测数据yj。在这里观测数据是已知的,而观测数据具体来自哪个模型是未知的(这就和之前提过的三硬币模型是很相似的,知道模型被选择的概率就好比知道选择B,C硬币的概率,但是却不知道本次预测的结果是由B得出的还是C得出的),因此就引出了我们的隐变量,隐变量的具体表达式如下:
γjk是0-1随机变量,确定了观测变量和隐变量之后,那么完全数据就是
之后就可以用EM算法去估计参数θ,具体流程如下
1)初始化θ值,开始迭代
2)E步:依照当前的模型参数,计算
3)M步:计算新一轮迭代的模型参数
4)重复2, 3步直至算法收敛
3.GMM和k-means
其实高斯混合模型和K-means(也可以用EM算法描述)方法很相似,
- 简单来说,K-means的结果是每个数据点被分配到其中某一类中,而高斯混合模型是给出这些点被分配给某一类的概率,可以看作是软聚类(也就是允许两个类之间有重合区域)。
- 高斯混合模型是对初始值敏感的,也就是说如果运气不好,选取的初始值不好,最终的模型结果也不会很好,因此很多时候我们会用K-means做预训练,获得较好的结果,然后再用高斯混合模型进行训练进一步优化预测结果(高斯混合模型也是要给出聚类的簇数K值,在初始化参数时给出的)具体的做法就是:先用K-means粗略的估计出簇心,然后将簇心作为高斯混合模型的初始均值(μ值),然后再去估计高斯混合模型中的参数
这篇关于EM算法,高斯混合模型(GMM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!