EM算法及python简单实现

目录

  • 1.摘要
  • 2.EM算法简介
  • 3.预备知识
    • 3.1贝叶斯公式
    • 3.2 极大似然估计
      • 3.2.1似然函数
      • 3.2.2问题描述
      • 3.2.3极大似然函数估计值的求解步骤
    • 3.3Jensen不等式(琴生不等式)
      • 3.3.1定义
      • 3.3.2举例
  • 4.EM算法详解
    • 4.1问题描述
    • 4.2EM算法公式及推导
      • 4.2.1EM公式
      • 4.2.2EM公式导出
    • 4.3EM算法流程
      • 4.3.1输入
      • 4.3.2算法步骤
      • 4.3.3输出
  • 5.EM算法的简单实现
    • 5.1问题及实现描述
    • 5.2 代码实现及结果
  • 6.EM算法收敛性
  • 7.EM算法的优缺点
    • 7.1优点
    • 7.2缺点
  • 8.EM算法的应用
    • 8.1K-means
    • 8.2高斯混合模型
    • 8.3在半监督学习上的应用
  • 9.总结
  • 10.参考

1.摘要

最大期望算法(Expectation-Maximum algorithm, EM)也称期望最大化算法,是一类通过迭代进行极大似然估计的优化算法,是著名的数据挖掘十大算法之一,在机器学习、数据挖掘中具有一定的影响力。EM算法是最常见的隐变量估计方法,被广泛应用于很多机器学习中,包括高斯混合模型(Gaussian mixture model,GMM),和隐式马尔科夫算法(Hidden Markov Model, HMM)的参数估计等。

2.EM算法简介

EM算法是一种通过不断迭代来进行优化的策略,计算方法中每一次迭代分为两步,其中一步为期望步(E步),另一种为极大步(M步),因此被称为EM算法。EM算法是为了解决数据缺失情况下的参数估计问题而提出的,基本思想是:首先根据已经得到的观测数据来估计出模型参数的值,然后根据上一步估计出的参数估计值来估计缺失数据的值,再讲估计出的损失数据与以及得到的观测数据进行对比,以此来重新对参数值进行估计,不断反复迭代,直至收敛,迭代结束,返回结果。

3.预备知识

3.1贝叶斯公式

贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)是在B发生的情况下A发生的可能性。贝叶斯公式为:
P ( B i ∣ A ) = P ( B i ) P ( A ∣ B i ) ∑ j = 1 n P ( B j ) P ( A ∣ B j ) P(B_i|A)=\cfrac{P(B_i)P(A|B_i)}{\sum_{j=1}^nP(B_j)P(A|B_j)} P(BiA)=j=1nP(Bj)P(ABj)P(Bi)P(ABi)

3.2 极大似然估计

3.2.1似然函数

对于函数 l ( θ ) = P ( x ∣ θ ) l(\theta)=P(x|θ) l(θ)=P(xθ),x表示某一个具体的数据, θ \theta θ表示模型的参数。在似然函数中,x是已知确定的, θ \theta θ是变量,它描述对于不同的模型参数,出现x这个样本点的概率是多少。

3.2.2问题描述

假如有一个罐子,里面有红白两种颜色的球,数目多少不知,两种颜色的比例也不知。目的是得到罐中红球和白球的比例,但不能把罐中的球全部拿出来数。现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中红白球的比例。假如在前面的十次次重复记录中,有七次是白球,请问罐中白球所占的比例最有可能是多少?
我们可以假设白球的比例是θ,那红球的比例是1-θ。因为每抽一个球出来,在记录颜色之后,我们把抽出的球放回了罐中并摇匀,所以每次抽出来的球的颜 色服从同一独立分布。
把一次抽出来球的颜色称为一次抽样。题目中在十次次抽样中,七次是白球的,三次为黑球事件的概率是P(样本结果|θ)。
如果第一次抽象的结果记为x1,第二次抽样的结果记为x2…那么样本结果为(x1,x2…,x10)。这样,我们可以得到表达式:
L ( θ ) = P ( 样 本 结 果 ∣ θ ) L(θ)=P(样本结果|θ) Lθ=P(θ)
= P ( x 1 , x 2 , … , x 10 ∣ θ ) = P(x1,x2,…,x10|θ) =P(x1,x2,,x10θ)
= P ( x 1 ∣ θ ) P ( x 2 ∣ θ ) … P ( x 10 ∣ θ ) = P(x1|θ)P(x2|θ)…P(x10|θ) =P(x1θ)P(x2θ)P(x10θ)
= θ 7 ( 1 − θ ) 3 = θ^7(1-θ)^3 =θ7(1θ)3
这是个关于的函数。而极大似然估计,就是要找到一个 θ \theta θ,使对应的 l ( θ ) l(θ) l(θ)最大:
θ ^ = arg max ⁡ l ( θ ) \hat{\theta}=\argmax l(θ) θ^=argmaxl(θ)

3.2.3极大似然函数估计值的求解步骤

首先,写出似然函数:
L ( θ ) = L ( x 1 , x 2 , . . . , x n ∣ θ ) = ∏ i = 1 n p ( x i ∣ θ ) , θ ∈ Θ L(\theta)=L(x_1,x_2,...,x_n|\theta)=\prod\limits_{i=1}^np(x_i|\theta),\theta\in\Theta L(θ)=L(x1,x2,...,xnθ)=i=1np(xiθ),θΘ
其次,对似然函数取对数:
l ( θ ) = l o g L ( x 1 , x 2 , . . . , x n ∣ θ ) = l o g ∏ i = 1 n p ( x i ∣ θ ) = ∑ i = 1 n l o g p ( x i ∣ θ ) l(\theta)=logL(x_1,x_2,...,x_n|\theta)=log\prod\limits_{i=1}^np(x_i|\theta)=\sum\limits_{i=1}^nlogp(x_i|\theta) l(θ)=logL(x1,x2,...,xnθ)=logi=1np(xiθ)=i=1nlogp(xiθ)
然后对上式求导,另导数为0,得到似然方程。
最后,解似然方程,得到的参数值即为所求。

3.3Jensen不等式(琴生不等式)

3.3.1定义

设f是定义域为实数的函数,如果对所有的实数x,f(x)的二阶导数都大于0,那么f是凸函数。
Jensen不等式定义如下:
如果f是凸函数,X是随机变量,那么: E[f(X)]>=f(E[x]) 。当且仅当X是常量时,该式取等号。其中,E(X)表示X的数学期望。
注:Jensen不等式应用于凹函数时,不等号方向反向。当且仅当x是常量时,该不等式取等号。

3.3.2举例

EM算法及python简单实现_第1张图片
图3-1

图3-1中,实线f表示凸函数,X是随机变量,有0.5的概率是a,有0.5的概率是b。X的期望值就是a和b的中值,从图中可以看到E[f(X)]>=f(E[x])成立。

4.EM算法详解

4.1问题描述

有两个袋子A和B,里面各有红球和白球,进行随机抽样,每次抽样先随机抽取一个袋子,再随机抽取一个球。每一次抽取到的球都不知道是从哪个袋子中抽取的,这个时候需要估计的是,这个球来自哪一个袋子,每个袋子的红球和白球的比例是多少,如图4-1。对于具体的问题使用EM算法求解步骤如图4-2所示:
EM算法及python简单实现_第2张图片
图4-1EM算法要解决的问题
EM算法及python简单实现_第3张图片
图4-2 EM算法求解步骤

4.2EM算法公式及推导

4.2.1EM公式

E步:计算联合分布的条件概率期望:
Q i ( z i ) = p ( z i ∣ x i , θ t ) Q_i(z_i)=p(z_i|x_i,\theta_t) Qi(zi)=p(zixi,θt)
l ( θ , θ t ) = ∑ i = 1 n ∑ z i Q i ( z i ) l o g p ( x i , z i ∣ θ ) Q i ( z i ) l(\theta,\theta_t)=\sum\limits_{i=1}^n\sum\limits_{z_i}Q_i(z_i)log\cfrac{p(x_i,z_i|\theta)}{Qi(z_i)} l(θ,θt)=i=1nziQi(zi)logQi(zi)p(xi,ziθ)
M步:极大化 l ( θ , θ t ) l(θ,θ_t) l(θ,θt),得到θ_{t+1}:
θ t + 1 = a r g m a x l ( θ , θ t ) \theta_{t+1}=argmax l(\theta,\theta_t) θt+1=argmaxl(θ,θt)

4.2.2EM公式导出

对于n个样本观察数据x=(x1​,x2,…,xn),找出样本的模型参数θ, 极大化模型分布的对数似然函数:
l ( θ ) = ∑ i = 1 n l o g p ( x i ∣ θ ) l(\theta)=\sum\limits_{i=1}^n log p(x_i|\theta) l(θ)=i=1nlogp(xiθ)
θ ^ = a r g m a x ∑ i = 1 n l o g p ( x i ∣ θ ) \hat{\theta}=argmax\sum\limits_{i=1}^n log p(x_i|\theta) θ^=argmaxi=1nlogp(xiθ)
如果将得到的观察数据有未观察到的隐含数据 z = ( z 1 , z 2 , . . . , z n ) z=(z_1,z_2,...,z_n) z=z1,z2,...,zn,即上文中每个样本来自哪个分布是未知的,此时有极大化模型分布的对数似然函数:
θ ^ = a r g m a x ∑ i = 1 n l o g p ( x i ∣ θ ) = a r g m a x ∑ i = 1 n l o g ∑ z i p ( x i , z i ∣ θ ) \hat{\theta}=argmax\sum\limits_{i=1}^n log p(x_i|\theta)=argmax\sum\limits_{i=1}^n log \sum\limits_{z_i}p(x_i,z_i|\theta) θ^=argmaxi=1nlogp(xiθ)=argmaxi=1nlogzip(xi,ziθ)
使用Jensen不等式对这个式子进行缩放,分子分母同乘以一个未知分布Qi(zi)其中log(x)为凹函数:
∑ i = 1 n l o g ∑ z i p ( x i , z i ∣ θ ) = ∑ i = 1 n l o g ∑ z i Q i ( z i ) p ( x i , z i ∣ θ ) Q i ( z i ) ( 1 ) \sum\limits_{i=1}^n log \sum\limits_{z_i}p(x_i,z_i|\theta)=\sum\limits_{i=1}^n log \sum\limits_{z_i}Q_i(z_i)\cfrac{p(x_i,z_i|\theta)}{Q_i(z_i)}\quad(1) i=1nlogzip(xi,ziθ)=i=1nlogziQi(zi)Qi(zi)p(xi,ziθ)(1)
≥ ∑ i = 1 n ∑ z i Q i ( z i ) l o g p ( x i , z i ∣ θ ) Q i ( z i ) ( 2 ) \qquad\qquad\quad\quad\quad\quad\ge\sum\limits_{i=1}^n \sum\limits_{z_i}Q_i(z_i)log\cfrac{p(x_i,z_i|\theta)}{Q_i(z_i)}\quad(2) i=1nziQi(zi)logQi(zi)p(xi,ziθ)(2)
此时可以得到 l o g l ( θ ) log l(θ) logl(θ)的下界。在 θ θ θ已经给定的条件下, l o g l ( θ ) log l(θ) logl(θ)的值取决于 Q i ( z i ) Q_i(z_i) Qizi p ( x i , z i ∣ θ ) p(x_i,z_i|θ) p(xi,ziθ)。我们可以通过调整这两个概率来使 l o g l ( θ ) log l(θ) logl(θ)的下界不断上升,来毕竟 l o g l ( θ ) log l(θ) logl(θ)的真实值。当 ∑ i = 1 n l o g ∑ z i p ( x i , z i ∣ θ ) ≥ ∑ i = 1 n ∑ z i Q i ( z i ) l o g p ( x i , z i ∣ θ ) Q i ( z i ) \sum\limits_{i=1}^n log \sum\limits_{z_i}p(x_i,z_i|\theta)\ge\sum\limits_{i=1}^n \sum\limits_{z_i}Q_i(z_i)log\cfrac{p(x_i,z_i|\theta)}{Q_i(z_i)} i=1nlogzip(xi,ziθ)i=1nziQi(zi)logQi(zi)p(xi,ziθ)变成等式时,即可说明调整后的概率等价于 l o g l ( θ ) log l(θ) logl(θ)
等式成立时,有:
p ( x i , z i ∣ θ ) Q i ( z i ) = c , c 为 常 数 \cfrac{p(x_i,z_i|\theta)}{Q_i(z_i)}=c,c为常数 Qi(zi)p(xi,ziθ)=c,c
由于 Q i ( z i ) Q_i(z_i) Qi(zi)是一个分布,所以满足 ∑ z Q i ( z i ) = 1 \sum\limits_{z}Q_i(z_i)=1 zQi(zi)=1
∑ z p ( x i , z i ∣ θ ) = c \sum\limits_{z}p(x_i,z_i|\theta)=c zp(xi,ziθ)=c
可得:
∑ z Q i ( z i ) = p ( x i , z i ∣ θ ) ∑ z p ( x i , z i ∣ θ ) = p ( x i , z i ∣ θ ) p ( x i ∣ θ ) = p ( z i ∣ x i , θ ) \sum\limits_{z}Q_i(z_i)=\cfrac{p(x_i,z_i|\theta)}{\sum\limits_{z}p(x_i,z_i|\theta)}=\cfrac{p(x_i,z_i|\theta)}{p(x_i|\theta)}=p(z_i|x_i,\theta) zQi(zi)=zp(xi,ziθ)p(xi,ziθ)=p(xiθ)p(xi,ziθ)=p(zixi,θ)
由此可知道 Q i ( z i ) Q_i(z_i) Qi(zi)由后验概率计算得出。由此在得到 Q i ( z i ) Q_i(z_i) Qi(zi)后,调整 θ θ θ,去极大化 l ( θ ) l(θ) l(θ)的下界,来得到更优的 θ θ θ

4.3EM算法流程

4.3.1输入

n个样本观察数据 x = ( x 1 ​ , x 2 , . . . , x n ) x=(x_1​,x_2,...,x_n) x=(x1,x2,...,xn),初始化 θ θ θ值,联合分布 p ( x , z ∣ θ ) p(x,z|θ) p(x,zθ),条件分布 p ( z ∣ x , θ ) p(z|x,θ) p(zx,θ),最大迭代次数maxiteration。

4.3.2算法步骤

(1)随机初始化模型参数 θ θ θ
(2)t=1,2,…,maxiteration开始迭代:
(3)E步:计算联合分布的条件概率期望。
Q i ( z i ) = p ( z i ∣ x i , θ t ) Q_i(z_i)=p(z_i|x_i,\theta_t) Qi(zi)=p(zixi,θt)
l ( θ , θ t ) = ∑ i = 1 n ∑ z i Q i ( z i ) l o g p ( x i , z i ∣ θ ) Q i ( z i ) l(\theta,\theta_t)=\sum\limits_{i=1}^n\sum\limits_{z_i}Q_i(z_i)log\cfrac{p(x_i,z_i|\theta)}{Qi(z_i)} l(θ,θt)=i=1nziQi(zi)logQi(zi)p(xi,ziθ)
(4)M步:极大化l(θ,θt),得到θt+1。
θ t + 1 = a r g m a x l ( θ , θ t ) \theta_{t+1}=argmax l(\theta,\theta_t) θt+1=argmaxl(θ,θt)
(5)当θt+1已经收敛时,结束并输出结果,否则继续进行(2)和(3)进行迭代。

4.3.3输出

最后输出迭代得到的参数θ。

5.EM算法的简单实现

5.1问题及实现描述

有两个袋子A和B,里面各有红球和白球若干个,进行随机抽样,每次抽样先随机抽取一个袋子,再随机抽取一个球。每一次抽取到的球都不知道是从哪个袋子中抽取的,这个时候需要估计的是,这个球来自哪一个袋子,每个袋子的红球和白球的比例是多少。
我们可以对样本随机抽样,得到x1,x2,…,xn​,将选定A袋子的概率记为w,选定B的概率记为1-w。A袋子红球和白球的比例记为p和1-p,B袋子红球和白球的比例记为q和1-q。通过样本x1​,x2​,…,xn使用极大似然估计来估计w、p和q。记取到红球为1,取到白球为0,一共取十次,得到的结果为x=[1,1,0,1,0,0,1,0,1,1]。
设Z来表示球来自于哪个袋子, Z = z 1 , z 2 , . . . , z 1 0 Z={z_1,z_2,...,z_10} Z=z1,z2,...,z10,令θ={w,p,q}。
取出一个球的概率为:
P ( x ∣ θ ) = w p x ( 1 − p ) 1 − x + ( 1 − w ) q x ( 1 − q ) 1 − x P(x|\theta)=wp^x(1-p)^{1-x}+(1-w)q^x(1-q)^{1-x} P(xθ)=wpx(1p)1x+(1w)qx(1q)1x
可得极大似然函数的对数:
l ( θ ) = l o g P ( x ∣ θ ) = ∑ i = 1 n l o g [ w p x i ( 1 − p ) 1 − x i + ( 1 − w ) q x i ( 1 − q ) 1 − x i ] l(\theta)=logP(x|\theta)=\sum\limits_{i=1}^nlog[wp^{x_i}(1-p)^{1-x_i}+(1-w)q^{x_i}(1-q)^{1-x_i}] l(θ)=logP(xθ)=i=1nlog[wpxi(1p)1xi+(1w)qxi(1q)1xi]
可得似然函数最大值θ。
E步:假设当前模型的参数为θ={w,p,q}时,计算后验概率:
A : μ = P ( Z ∣ X θ ) = w p x i ( 1 − p ) 1 − x i w p x i ( 1 − p ) 1 − x i + ( 1 − w ) q x i ( 1 − q ) 1 − x i A:\mu=P(Z|X\theta)=\cfrac{wp^{x_i}(1-p)^{1-x_i}}{wp^{x_i}(1-p)^{1-x_i}+(1-w)q^{x_i}(1-q)^{1-x_i}} A:μ=P(ZXθ)=wpxi(1p)1xi+(1w)qxi(1q)1xiwpxi(1p)1xi
B : 1 − μ B:1-\mu B:1μ
M步:将μ看做固定值,写出后验概率的期望,并分别求偏导,得到新的参数θ={w,p,q}:
E Z ∣ X , θ ( L ( θ ∣ X , Z ) ) = ∑ i = 1 n [ μ l o g w p x i ( 1 − p ) 1 − x i μ + ( 1 − μ ) l o g ( 1 − w ) q x i ( 1 − q ) 1 − x i 1 − μ ] ( 1 ) E_{Z|X,\theta}(L(\theta|X,Z))=\sum\limits_{i=1}^n[\mu log\cfrac{wp^{x_i}(1-p)^{1-x_i}}{\mu}+(1-\mu)log\cfrac{(1-w)q^{x_i}(1-q)^{1-x_i}}{1-\mu}]\quad(1) EZX,θ(L(θX,Z))=i=1n[μlogμwpxi(1p)1xi+(1μ)log1μ(1w)qxi(1q)1xi](1)

w = 1 n ∑ i = 1 n μ i ( 2 ) w=\cfrac{1}{n}\sum\limits_{i=1}^n\mu_i\quad(2) w=n1i=1nμi(2)
p = ∑ i = 1 n μ i x i ∑ i = 1 n μ i ( 3 ) p=\cfrac{\sum\limits_{i=1}^n\mu_ix_i}{\sum\limits_{i=1}^n\mu_i}\quad(3) p=i=1nμii=1nμixi(3)
q = ∑ i = 1 n ( 1 − μ i ) x i ∑ i = 1 n ( 1 − μ i ) ( 4 ) q=\cfrac{\sum\limits_{i=1}^n(1-\mu_i)x_i}{\sum\limits_{i=1}^n(1-\mu_i)}\quad(4) q=i=1n(1μi)i=1n(1μi)xi(4)

5.2 代码实现及结果

先定义E步和M步:

import math
def cal_mu(w,p,q,xi):
    return w * math.pow(p, xi) * math.pow(1 - p, 1 - xi) / \
           float(w * math.pow(p, xi) * math.pow(1 - p, 1 - xi) +
                 (1 - w) * math.pow(q, xi) * math.pow(1 - q, 1 - xi))
def e_step(w,p,q,x):
    mu=[cal_mu(w,p,q,xi) for xi in x]
    return mu
def m_step(mu,x):
    w=sum(mu)/len(mu)
    p=sum([mu[i]*x[i] for i in range(len(mu))])/sum(mu)
    q=sum([(1-mu[i])*x[i] for i in range(len(mu))])/\
    sum([1-mu[i] for i in range(len(mu))])
    return [w,p,q]

再定义迭代过程,输入参数,返回结果:

def run(x,w,p,q,maxiteration):
    for i in range(maxiteration):
        mu=e_step(w,p,q,x)
        print(i,[w,p,q])
        if [w,p,q]==m_step(mu,x):
            break
        else:
            [w,p,q]=m_step(mu,x)
    print([w,p,q])
if __name__=="__main__":
    x = [1, 1, 0, 1, 0, 0, 1, 0, 1, 1]
    [w,p,q]=[0.4,0.6,0.7]
    run(x,w,p,q,100)

结果:
EM算法及python简单实现_第4张图片

6.EM算法收敛性

θ θ θ取到 θ t θ_t θt时,可得:
θ t + 1 = arg max ⁡ θ ∑ j = 1 n ∑ i Q j t ( z i ) l o g P ( y j , z i ∣ θ ) Q j t ( z i ) \theta^{t+1}=\argmax\limits_\theta \sum\limits_{j=1}^n\sum\limits_iQ_j^t(z_i)log\cfrac{P(y_j,z_i|\theta)}{Q_j^t(z_i)} θt+1=θargmaxj=1niQjt(zi)logQjt(zi)P(yj,ziθ)
l ( θ t + 1 ) = ∑ j = 1 n l o g ∑ i Q j t ( z i ) P ( y j , z i ∣ θ t + 1 ) Q j t ( z i ) ( 1 ) l(\theta_{t+1})=\sum\limits_{j=1}^nlog\sum\limits_iQ_j^t(z_i)\cfrac{P(y_j,z_i|\theta^{t+1})}{Q_j^t(z_i)}\qquad(1) l(θt+1)=j=1nlogiQjt(zi)Qjt(zi)P(yj,ziθt+1)(1)
≥ ∑ j = 1 n ∑ i Q j t ( z i ) l o g P ( y j , z i ∣ θ t + 1 ) Q j t ( z i ) ( 2 ) \quad\qquad \ge\sum\limits_{j=1}^n\sum\limits_iQ_j^t(z_i)log\cfrac{P(y_j,z_i|\theta^{t+1})}{Q_j^t(z_i)}\qquad(2) j=1niQjt(zi)logQjt(zi)P(yj,ziθt+1)(2)
≥ ∑ j = 1 n ∑ i Q j t ( z i ) l o g P ( y j , z i ∣ θ t ) Q j t ( z i ) ( 3 ) \quad\qquad \ge\sum\limits_{j=1}^n\sum\limits_iQ_j^t(z_i)log\cfrac{P(y_j,z_i|\theta^t)}{Q_j^t(z_i)}\quad\qquad(3) j=1niQjt(zi)logQjt(zi)P(yj,ziθt)(3)

式(2)是根据Jensen不等式得来的,由于 θ t + 1 θ_{t+1} θt+1不一定等于 θ t θ_{t} θt,故等号不一定成立。由于 θ t + 1 θ_{t+1} θt+1使得似然函数取最大值,可得式(3)。由此得出 l ( θ ) l(θ) l(θ)在迭代下是递增的,根据单调有界收敛可得 l ( θ ) l(θ) l(θ)有上界,故EM算法可以保证收敛到一个稳定点,但是却不能保证收敛到全局的极大值点,因此它是局部最优的算法。

7.EM算法的优缺点

7.1优点

具有简单性和普适性,可看作是一种非梯度优化方法。

7.2缺点

EM算法对初始值敏感,EM算法需要初始化参数θ,而参数θ的选择直接影响收敛效率以及能否得到全局最优解。且EM算法不能保证找到全局最优值。
在5.2的代码实现及结果中,采用不同的初始值,得到的结果如图7-1:
EM算法及python简单实现_第5张图片
图7-1

8.EM算法的应用

8.1K-means

K-means的目标是将样本集划分为K个簇,同一个簇内样本的距离尽可能小,不同簇内的样本距离尽可能大,即最小化每个簇中样本与质心的距离。从EM算法的角度来看,K-means的参数就是每个簇的质心,隐变量为每个样本属于哪个簇。在不知道样本属于哪个簇的情况下,运用EM算法来得到每个簇的质心μ。
假设有k个簇,随机选定k个点作为质心 μ 1 , μ 2 , . . . , μ k μ_1,μ_2,...,μ_k μ1μ2,...,μk,进行:
(1)固定μ_i(i=1,2,…,k),将样本划分到距离最近的 μ i μ_i μi中,用 r n i r_{n_i} rni来表示第n个样本所属的簇。这一步对应EM算法的E步。
(2)固定 r n i r_{n_i} rni,根据上一步的划分结果重新计算每个簇的质心,来最小化每个簇中样本与质心的距离。这一步对应EM算法的M步。
K-means可以保证收敛到局部最优值,但在非凸目标函数的情况下不能保证收敛到全局最优值。

8.2高斯混合模型

高斯混合模型多用于聚类,与K-means不同的是其采用概率模型来表达聚类原型。关于高斯分布(Gaussian Distribution)为:对于随机变量,其概率密度函数可表示为:
  N ( x ∣ μ , σ 2 ) = 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2 {\ N}(x|\mu,\sigma^2)=\cfrac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}  N(xμ,σ2)=2πσ2 1e2σ2(xμ)2
若x为n维随机向量,则多元高斯分布(Multivariate Gaussian Distribution)为:
  N ( x ∣ μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ )   T Σ − 1 ( x − μ ) {\ N}(x|\mu,\Sigma)=\cfrac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^\frac{1}{2}} e^{-\frac{1}{2}(x-\mu)^\ T \Sigma^{-1}(x-\mu)}  N(xμ,Σ)=(2π)2nΣ211e21(xμ) TΣ1(xμ)
高斯混合模型,本质上是k个高斯分布的线性组合,可以描述更多样的分布:
p ( x ) = ∑ k = 1 K π k   N ( x ∣ μ k , Σ k ) p(x)=\sum\limits_{k=1}^K\pi_k{\ N}(x|\mu k,\Sigma_k) p(x)=k=1Kπk N(xμk,Σk)
其中 π k π_k πk为混合系数, ∑ k = 1 K π k = 1 \sum\limits_{k=1}^K {\pi_k}=1 k=1Kπk=1
对于高斯混合模型来说,先依照 π k π_k πk选择第k个高斯分模型,然后依照其概率密度函数进行采样生成相应的样本。高斯混合模型的隐变量为样本来自于第几个分模型。
定义一个k维随机向量 z = z 1 , z 2 , . . . , z k z={z_1,z_2,...,z_k} z=z1,z2,...,zk,其中只有一个 z i ( i = 1 , 2 , . . . , k ) z_i(i=1,2,...,k) zi(i=1,2,...,k)为1,其余为0,表示样本来自于第i个分模型。
(1)将 π k π_k πk视为选择第k个分模型的先验概率,计算 x i ( i = 1 , 2 , . . . , k ) x_i(i=1,2,...,k) xi(i=1,2,...,k)属于第j个分模型的后验概率,对应EM算法的E步。
(2) x i ( i = 1 , 2 , . . . , k ) x_i(i=1,2,...,k) xi(i=1,2,...,k)属于第j个分模型的后验概率来计算每一个样本的 μ μ μ Σ Σ Σ来更新参数,对应EM算法的M步。
高斯混合模型相比于K-means更具一般性,能形成各种不同大小和形状的簇。K-means可视为高斯混合聚类中每个样本仅指派给一个混合成分的特例,且各混合成分协方差相等,均为对角矩阵。
但高斯混合模型的计算量较大收敛慢。因此常先对样本集运用k-means,依据得到的各个簇来定高斯混合模型的初始值。其中质心即为均值向量,协方差矩阵为每个簇中样本的协方差矩阵,混合系数为每个簇中样本占总体样本的比例。

8.3在半监督学习上的应用

在现实分类问题中,常遇到少量样本是带有标签,大部分样本缺失标签的情况。为了能利用无标签的样本,可以采用EM算法,将标签视为隐变量,来利用数据进行训练,主要步骤为:
(1)仅利用有标签的样本训练模型,得到初始参数θ。
(2)E步:利用训练好的模型预测无标签样本,将样本分类到概率最大的类别。
(3)M步:用所有的样本重新训练模型,得到参数 θ t + 1 θ_{t+1} θt+1
重复(2)和(3)直到收敛,得到最终的模型。

9.总结

EM算法是迭代求解最大值的算法,计算含有隐含变量的概率模型参数估计。EM算法在每一次迭代时分为两步,E步和M步。一轮轮迭代更新隐含数据和模型分布参数,直到收敛,即得到我们需要的模型参数。

10.参考

【1】EM算法及其应用(一)
【2】EM算法及其应用(二)
【3】EM算法(Expectation Maximization Algorithm)详解
【4】EM算法整理及其python实现
【5】DEMPSTER,A. P. Maximum likelihood from incomplete data via the EM algorithm[J]. Journal of the Royal Statal Society, 1977, 39.
【6】李航.统计学习方法.北京:清华大学出版社,2012
【7】机器学习-白板推导系列(十)-EM算法(Expectation Maximization)
【8】复旦-机器学习课程 第十讲 EM

你可能感兴趣的:(机器学习,python)