高斯混合模型聚类_高斯混合模型及EM算法

EM(expectationmaximization algorithm)算法是一种迭代算法,1977年由Dempster等人总结提出, 用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望;M步,求极大,所以这一算法称为期望极大算法,简称EM算法。 一、EM算法的推导 用X=(x1,x2,…,xn)表示观测数据,H=(h1,h2,…,hn)表示隐变量数据,隐变量数据hi都服从隐变量分布Z(z1,z2,…,zn),即为隐变量数据的全部取值集合,那么,X与Z一起成为完全数据。观测数据可以直接获得并使用,但是隐变量取值并不明确,所以要根据观测数据的对数似然函数极大化来求得最优参数。 1.E步

(1)计算观测数据的似然函数

de63f5c52f09003d9f55554fec7f1bcb.png

(2)计算对数似然函数  

 49dbb7fe91f72ce0c744dd156f33f17e.png

EM算法通过迭代逐步极大化对数似然函数 来逐步优化参数 。在第m次迭代得到参数的一个估计值 ,并且希望在第m+1次迭代得到的参数估计值 能使得 对 数似然函数 能再次增加, 就这样逐步使得 对 数似然函数 达到极大值。因为 对 数似然函数 的式子已经固定,现在考虑如何保证m+1次迭代时 对 数似然函数 可以再增加,EM算法用了一个比较巧妙的方法,那就是求 对 数似然函数 的下界 ,只要保证每次迭代时 对 数似然函数 的下界取极大,就可以保证 对 数似然函数 一直在增加。 (3)利用Jensen不等式求解第m+1次迭代时 对 数似然函数 的下界 先来简单介绍Jensen不等式:如果f(x)是凹函数, xi(i=1,2,…)来自f(x)的定义域,λi(i=1,2,…) 大于等于0 且∑λi =1,则有如下不等式成立: e6f32248923f4ef743ded88e2d26cc0b.png 当且仅当xi为常数时等号成立。如果f(x)是凸函数则不等号反向。 如果f(x)为凹函数时,将xi看作是随机变量X得取值,将λi看作随机变量取值xi得概率,则E[f(x)]大于等于 f[E(x)],当且仅当随机变量X是常数时等号成立。当f(x)是凸函数时不等号反向。 将Jensen不等式应用于对数似然函数,构造λidf338b9939da65a9aac52d9eb8579ec0.png 因为Jensen不等式成立有如下约束条件:                                09ab2731b890894788e2e5b4671ec4ba.png 且要使等号成立则必须有:                                 a26f8fa535d99d79386268fb74a54d09.png    dcc769e54ffd547a58eed0ea15065261.png 所以:

6c81237ddb0e272c7d49848775da4a58.png

故有: b17ab2878dc29e5f21d9baf0e0676fd1.png

2.M步

100695a66f811211a8acb6de86965f26.png

三、EM算法在高斯混合模型学习中的应用

EM算法的一个重要应用是高斯混合模型的参数估计。高斯混合模型(Gaussian Mixed Model,GMM)是一种常见的聚类算法,在图像分割、对象识别、视频分析等方面均有应用,对于任意给定的数据样本集合,根据其分布概率,可以计算每个样本数据向量的概率分布,从而根据概率分布对其进行分类。高斯混合模型是指具有如下形式的概率分布模型:

  2d92737c7a36fa6ed7b419193715104c.png

其中,αk是系数,αk大于等于0,∑αk =1;Φ(x|θk)是高斯分布密度,θk=(μk,σ2k)则可得第k个分模型: 5dde45aa83036f5a5c0130e36d63e1e6.png 由此看出,高斯混合模型混合的基本分布就是高斯分布。 假设观测数据x1,x2,…,xN由高斯混合模型生成,其中,θ=(α1,α2,…,αk;θ1,θ2,…,θk),下面用EM算法估计高斯混合模型的参数θ。 1. 明确隐变量与完全数据的对数似然函数 设想观测数据xj,j=1,2,…,N是这样产生的:首先依概率αk选择第k个高斯分布分模型Φ(x|θk),然后依第k个分模型的概率分布Φ(x|θk)生成观测数据xj。这时的观测数据是已知的;但是反应观测数据xj来自第k个分模型的数据是未知的,以隐变量γjk表示,其定义为: 89ab35c2e5a6ee6827d519cc266df953.png γjk是0-1随机变量。有了观测数据与未观测数据,那么完全数据是(xj,γj1,γj2,…,γjk),j=1,2,…,N。于是,可以得到完全数据的似然函数: 1e4843550ced9ba5f3529aee9ef01974.png

进一步得到完全数据的对数似然函数:

3ea17003bf8ebd80cc330f7b4e5ec536.png 2.EM算法的E步—确定Q函数 e517e54b235733eb09bfa2f1cc37363a.png e65f9fe54cd0b75143a62fd5a3188523.png 是当前模型参数下第j个观测数据来自第k个分模型的概率,称为分模型k对观测数据xj的响应度。 590f2def213a6b5f899d12e396f04e58.png 3. 确定EM算法的M步 2b74c7d9f6cceb7ce8aee031da73bb44.png 四、高斯混合模型参数估计的EM算法 输入:观测数据xj,j=1,2,…,N与高斯混合模型。 输出:高斯混合模型参数。 (1)取参数的初始值开始迭代。 (2)E步:依据当前模型参数,计算分模型k对观测数据xj的响应度:

16b50f6e809967026b374e378245e536.png

(3)M步:计算新一轮迭代的模型参数。 (4)重复第2、3步,直到收敛。 五、案例分析 已知观测数据-67,-48,6,8,14,16,23,24,28,29,41,49,56,60,75,估计两个分量的高斯混合模型的5个参数。 初值设置为σ1=1,σ2=1,μ1=0.5,μ2=0.5,α1=0.5,α2=0.5。
import numpy as npfrom scipy.stats import normy = np.array([-67, -48, 6, 8, 14, 16, 23, 24, 28, 29, 41, 49, 56, 60, 75])K = 2  # 两个高斯N = 15  # y有15个数据# 参数初始化mu = np.array([0.5, 0.5])sigma = np.array([1.0, 1.0]) * 10alpha = np.array([0.5, 0.5])for i in range(10):    gm = np.zeros((N, K))    # E 步    for j in range(N):        for k in range(K):            gm[j, k] = alpha[k] * norm(mu[k], sigma[k]).pdf(y[j]) #使用scipy实现高斯分布        gm[j, :] /= sum(gm[j, :])  # gm[j,:] = gm[j,:] /sum(gm[j,:])    # M 步    mu2 = y.dot(gm) / sum(gm)    alpha2 = sum(gm) / N    sigma2 = np.zeros((2,))    sigma2[0] = sum(gm[:, 0] * (y - mu[0]) ** 2) / sum(gm[:, 0])    sigma2[1] = sum(gm[:, 1] * (y - mu[1]) ** 2) / sum(gm[:, 1])    #判断是否收敛    if sum((mu - mu2) ** 2 + (sigma - sigma2) ** 2 + (alpha - alpha2) ** 2) < 0.01:        break    mu = mu2    sigma = sigma2    alpha = alpha2    print("第%d次迭代\nalpha_0=%f,mu_0=%f,sigma_0=%f\nalpha_1=%f,mu_1=%f,sigma_1=%f\n" %(i+1, alpha[0], mu[0], sigma[0], alpha[1], mu[1], sigma[1]))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值