期望极大(EM)算法

EM算法是一种迭代方法,用于含有隐变量的概率模型参数的极大似然估计。它包括E步(期望)和M步(极大化)。E步计算期望,M步使Q函数极大化,以更新参数。EM算法在非监督学习中有广泛应用,并具有一定的收敛性。
摘要由CSDN通过智能技术生成

EM算法

概率模型有时既含有观测变量(observable vriable),又含有隐变量或潜在变量(latent variable)。如果概率模型的变量都是观测变量,那么给定数据,可以直接用极大似然估计法,或贝叶斯估计法估计模型参数。

EM算法[Dempster, 1977]是一种迭代算法,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每次迭代由两步组成:E步,求期望(expectation);M步,求极大(maximization)。所以这一算法称为期望极大算法(expectation maximization algorithm,EM)

1 EM 算法

在这里插入图片描述

import numpy as np

def e_step(y, pi, p, q):
    
    mu_1 = pi * p ** y * (1 - p) ** (1 - y)
    mu_2 = (1 - pi) * q ** y * (1 - q) ** (1 - y)
    
    mu = mu_1 / (mu_1 + mu_2)
    
    return mu

def m_step(y, mu):
    
    n = len(y)
    pi = np.sum(mu) / n
    p = sum(y * mu) / sum(mu)
    q = sum(y * (1 - mu)) / sum(1 - mu)
    
    return pi, p, q

def diff(pi, p, q, pi_, p_, q_):
    
    return np.sum(np.abs([pi - pi_, p - p_, q - q_]))

def em(y, pi, p, q):
    cnt = 1
    while True:

        print("-" * 10)
        print("iter %d:" % cnt)
        pi_ = pi
        p_ = p
        q_ = q

        mu = e_step(y, pi, p, q)
        print(mu)
        pi, p, q = m_step(y, mu)
        print(pi, p, q)

        if diff(pi, p, q, pi_, p_, q_) < 0.001:
            break

        cnt += 1
        
    return pi, p, q

y = np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 1])

print("*" * 10)
pi = 0.5
p = 0.5
q = 0.5

pi, p, q = em(y, pi, p, q)

print("*" * 10)
pi = 0.4
p = 0.6
q = 0.7

pi, p, q = em(y, pi, p, q)

print("*" * 10)
pi = 0.46
p = 0.55
q = 0.67

pi, p, q = em(y, pi, p, q)
**********
----------
iter 1:
[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
0.5 0.6 0.6
----------
iter 2:
[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5]
0.5 0.6 0.6
**********
----------
iter 1:
[0.36363636 0.36363636 0.47058824 0.36363636 0.47058824 0.47058824
 0.36363636 0.47058824 0.36363636 0.36363636]
0.40641711229946526 0.5368421052631579 0.6432432432432431
----------
iter 2:
[0.36363636 0.36363636 0.47058824 0.36363636 0.47058824 0.47058824
 0.36363636 0.47058824 0.36363636 0.36363636]
0.40641711229946526 0.5368421052631579 0.6432432432432431
**********
----------
iter 1:
[0.41151594 0.41151594 0.53738318 0.41151594 0.53738318 0.53738318
 0.41151594 0.53738318 0.41151594 0.41151594]
0.461862835113919 0.5345950037850112 0.6561346417857326
----------
iter 2:
[0.41151594 0.41151594 0.53738318 0.41151594 0.53738318 0.53738318
 0.41151594 0.53738318 0.41151594 0.41151594]
0.46186283511391907 0.5345950037850112 0.6561346417857326

通常情况, Y Y Y表示观测随机变量的数据, Z Z Z表示隐随机变量的数据。 Y Y Y Z Z Z均已知称为完全数据(complete-data),仅有观测数据 Y Y Y称为不完全数据(incomplete-data)。假设给定观测数据 Y Y Y,其概率分布是 P ( Y ; θ ) P(Y; \theta) P(Y;θ),其中 θ \theta θ是需要估计的模型参数,那么不完全数据 Y Y Y的似然函数是 P ( Y ; θ ) P(Y; \theta) P(Y;θ),对数似然函数 L ( θ ) = log ⁡ P ( Y ; θ ) L(\theta) = \log P(Y; \theta) L(θ)=logP(Y;θ);假设 Y Y Y Z Z Z的联合概率分布是 P ( Y , Z ; θ ) P(Y, Z; \theta) P(Y,Z;θ),那么完全数据的对数似然函数是 L ( θ ) = log ⁡ P ( Y , Z ; θ ) L(\theta) = \log P(Y, Z; \theta) L(θ)=logP(Y,Z;θ)

EM算法通过迭代求解 L ( θ ) = log ⁡ P ( Y , Z ; θ ) L(\theta) = \log P(Y, Z ; \theta) L(θ)=logP(Y,Z;θ)的极大似然估计。每次迭代包含两步:E步,求期望;M步,求极大化。

算法9.1(EM算法)

输入:观测变量数据 Y Y Y,隐变量数据 Z Z Z,联合分布 P ( Y , Z ; θ ) P(Y, Z; \theta) P(Y,Z;θ),条件分布 P ( Z ∣ Y ; θ ) P(Z | Y; \theta) P(ZY;θ)

输出:模型参数 θ \theta θ

  1. 选择参数初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;

  2. E步:记 θ ( i ) \theta^{(i)} θ(i)为第 i i i次迭代参数 θ \theta θ的估计值,在第 i + 1 i + 1 i+1次迭代的E步,计算

Q ( θ , θ ( i ) ) = E Z [ log ⁡ P ( Y , Z ; θ ) ∣ Y ; θ ( i ) ] = ∑ Z P ( Z ∣ Y ; θ ( i ) ) log ⁡ P ( Y , Z ; θ ) (9) \begin{aligned} Q(\theta, \theta^{(i)}) & = \text{E}_{Z} \left[ \log P(Y, Z; \theta) | Y; \theta^{(i)} \right] \\ & = \sum_{Z} P(Z | Y; \theta^{(i)}) \log P(Y, Z; \theta) \end{aligned} \tag {9} Q(θ,θ(i))=EZ[logP(Y,Z;θ)Y;θ(i)]=ZP(ZY;θ(i))logP(Y,Z;θ)(9)

其中, P ( Z ; Y , θ ( i ) ) P(Z; Y, \theta^{(i)}) P(Z;Y,θ(i))是在给定观测数据 Y Y Y和当前的参数估计 θ ( i ) \theta^{(i)} θ(i)下隐变量数据 Z Z Z的条件概率分布;

  1. M步:求使 Q ( θ , θ ( i ) ) Q(\theta, \theta^{(i)}) Q(θ,θ(i))极大化的 θ \theta θ,确定第 i + 1 i + 1 i+1次迭代的参数的估计值 θ ( i + 1 ) \theta^{(i + 1)} θ(i+1)

θ ( i + 1 ) = arg max ⁡ θ Q ( θ , θ ( i ) ) (10) \theta^{(i + 1)} = \argmax_{\theta} Q(\theta, \theta^{(i)}) \tag {10} θ(i+1)=θargmaxQ(θ,θ(i))(10)

  1. 重复第2步和第3步,直到收敛。

方程(9)的函数 Q ( θ , θ ( i ) ) Q(\theta, \theta^{(i)}) Q(θ,θ(i))是EM算法的核心,称为 Q Q Q函数( Q Q Q function)。

定义9.1(Q函数) 完全数据的对数似然函数 P ( Y , Z ∣ θ ) P(Y, Z | \theta) P(Y,Zθ)是关于给定观测数据 Y Y Y和当前参数 θ ( i ) \theta^{(i)} θ(i)下,对未观测数据 Z Z Z条件概率分布 P ( Z ∣ Y , θ ( i ) ) P(Z | Y, \theta^{(i)}) P(ZY,θ(i))的期望,称为 Q Q Q函数,即

Q ( θ , θ ( i ) ) = E Z [ log ⁡ P ( Y , Z ; θ ) ∣ Y ; θ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值