zoukankan      html  css  js  c++  java
  • EM最大期望算法

    介绍EM算法,必然会抛出一些比较复杂的公式。其实这些公式只是EM算法思想的数学推导,数学推导就是将算法思想用严谨的公式语言表达出来而已。理解EM算法思想,比看懂它的数学推导重要。
     
    EM即最大期望算法(Expectation Maximization algorithm),是在高斯混合模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐性变量。EM算法是解决数学公式的一个算法,很多时候用来求解高斯分布中的均值简单的说就是:给定训练样本{x1,...xm}(与k-means中的样本一样是没有标签的,因此EM也是非监督学习方法),认为他们满足高斯分布N(μ,σ^2), 求估计参数μ。
     
    关于高斯混合模型GMM(Gaussian Mixture Model):参考百度百科定义。简单的说就是:m个样本{x1,...xm},可以分为k类,每个类别都服从高斯分布。
    关于高斯分布(即正态分布):参考百度百科定义。若随机变量X服从一个数学期望(均值)为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ(标准差是方差的算术平方根)决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
     
    EM算法过程:
    EM算法是一种迭代型算法,每一次的迭代过程主要分为两步:即E步和M步。
    第一步:求期望(Expectation),利用对隐藏变量的现有估计值,计算其最大似然估计值;
    第二步:最大化(Maximization),最大化在E步上求得的最大似然值来计算参数的值。M步上找到的参数估计值被用于下一个E步计算中,这个过程不断交替进行。
    简单的说就是:根据事先估计的先验概率A,得出一个结果B,再根据结果B,计算得到A,然后反复。
     
     
    典型的硬币示例
    已知:
        硬币              结果             统计
           ?            正正反正反     3正-2反
           ?            反反正正反     2正-3反
           ?            正反反反反     1正-4反
           ?           正反反正正     3正-2反
           ?            反正正反反     2正-3反
    问题:
    硬币有两枚分别记为A、B,求上述5轮结果A、B正面朝上的概率分别是多少?
    求解过程:
    1.假设两枚硬币正面朝上概率分别为PA、PB,那么反面朝上概率分别为1-PA、1-PB。
    2.先随便给PA和PB赋一个值:PA=0.5(A反面概率即1-0.5=0.5);PB=0.7(B反面概率即1-0.7=0.3)。
    3.根据步骤2计算每轮抛掷最可能是哪个硬币:
       第一轮:
    如果是硬币A,得出3正-2反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
    如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
    硬币A的概率>硬币B的概率,所以第一轮暂且认为是硬币A抛出的。
       第二轮:
    如果是硬币A,得出2正-3反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
    如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
    硬币A的概率>硬币B的概率,所以第二轮暂且认为是硬币A抛出的。
       第三轮:
    如果是硬币A,得出1正-4反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
    如果是硬币B,得出1正-4反的概率为 0.7*0.3*0.3*0.3*0.3 = 0.00567
    硬币A的概率>硬币B的概率,所以第三轮暂且认为是硬币A抛出的。
       第四轮:
    如果是硬币A,得出3正-2反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
    如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
    硬币A的概率>硬币B的概率,所以第四轮暂且认为是硬币A抛出的。
       第五轮:
    如果是硬币A,得出2正-3反的概率为 0.5*0.5*0.5*0.5*0.5 = 0.03125
    如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
    硬币A的概率>硬币B的概率,所以第五轮暂且认为是硬币A抛出的。
    4.根据步骤3的结果来估计新的PA和PB:PA=11/25=0.44、PB=0/0(无解时依然用步骤2的值)。
    5.根据步骤4计算每轮抛掷最可能是哪个硬币:
       第一轮:
    如果是硬币A,得出3正-2反的概率为 0.44*0.44*0.44*0.56*0.56 = 0.0267137024
    如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
    硬币A的概率<硬币B的概率,所以第一轮暂且认为是硬币B抛出的。
       第二轮:
    如果是硬币A,得出2正-3反的概率为 0.44*0.44*0.56*0.56*0.56 = 0.0339992576
    如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
    硬币A的概率>硬币B的概率,所以第二轮暂且认为是硬币A抛出的。
       第三轮:
    如果是硬币A,得出1正-4反的概率为 0.44*0.56*0.56*0.56*0.56 = 0.0432717824
    如果是硬币B,得出1正-4反的概率为 0.7*0.3*0.3*0.3*0.3 = 0.00567
    硬币A的概率>硬币B的概率,所以第三轮暂且认为是硬币A抛出的。
       第四轮:
    如果是硬币A,得出3正-2反的概率为 0.44*0.44*0.44*0.56*0.56 = 0.0267137024
    如果是硬币B,得出3正-2反的概率为 0.7*0.7*0.7*0.3*0.3 = 0.03087
    硬币A的概率<硬币B的概率,所以第四轮暂且认为是硬币B抛出的。
       第五轮:
    如果是硬币A,得出2正-3反的概率为 0.44*0.44*0.56*0.56*0.56 = 0.0339992576
    如果是硬币B,得出2正-3反的概率为 0.7*0.7*0.3*0.3*0.3 = 0.01323
    硬币A的概率>硬币B的概率,所以第五轮暂且认为是硬币A抛出的。
    6.根据步骤5的结果来估计新的PA和PB:PA=5/15=0.3333、PB=6/10=0.6。
    7.根据步骤6计算每轮抛掷最可能是哪个硬币:
       第一轮:
    如果是硬币A,得出3正-2反的概率为 0.3333*0.3333*0.3333*0.6667*0.6667= 0.01645
    如果是硬币B,得出3正-2反的概率为 0.6*0.6*0.6*0.4*0.4 = 0.03456
    硬币A的概率<硬币B的概率,所以第一轮暂且认为是硬币B抛出的。
       第二轮:
    如果是硬币A,得出2正-3反的概率为 0.3333*0.3333*0.6667*0.6667*0.6667= 0.03292
    如果是硬币B,得出2正-3反的概率为 0.6*0.6*0.4*0.4*0.4 = 0.02304
    硬币A的概率>硬币B的概率,所以第二轮暂且认为是硬币A抛出的。
       第三轮:
    如果是硬币A,得出1正-4反的概率为 0.3333*0.6667*0.6667*0.6667*0.6667= 0.06585
    如果是硬币B,得出1正-4反的概率为 0.6*0.4*0.4*0.4*0.4 = 0.01536
    硬币A的概率>硬币B的概率,所以第三轮暂且认为是硬币A抛出的。
       第四轮:
    如果是硬币A,得出3正-2反的概率为 0.3333*0.3333*0.3333*0.6667*0.6667= 0.01645
    如果是硬币B,得出3正-2反的概率为 0.6*0.6*0.6*0.4*0.4 = 0.03456
    硬币A的概率<硬币B的概率,所以第四轮暂且认为是硬币B抛出的。
       第五轮:
    如果是硬币A,得出2正-3反的概率为 0.3333*0.3333*0.6667*0.6667*0.6667= 0.03292
    如果是硬币B,得出2正-3反的概率为 0.6*0.6*0.4*0.4*0.4 = 0.02304
    硬币A的概率>硬币B的概率,所以第五轮暂且认为是硬币A抛出的。
    8.步骤7和步骤5的结果一样,认为达到收敛状态,PA和PB也维持:PA=5/15=0.3333、PB=6/10=0.6。
     
    上述是EM初级版的解答,存在一个问题:
    迭代一定会收敛到真实的PA和PB吗?
    不一定,取决于PA和PB的初始化值。
     
    所以在EM初级版上有进阶版:PA和PB的初始化值考虑所有可能。
    具体步骤可以参考https://www.jianshu.com/p/1121509ac1dc
     
     
  • 相关阅读:
    邮箱启用授权码发送邮件
    try里Response.end()问题
    NPOI导入excel文件为DataTable,使用SqlBulkCopy添加到数据库表
    Python入门(二)
    Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题
    【译】第4节---简单的Code First示例
    【译】第3节--- 配置开发环境
    【译】第2节--- 什么是Code First?
    【译】第1节--- EF Code First 介绍
    多条件查询----补发周一内容(六级让我忽略了JAVA)
  • 原文地址:https://www.cnblogs.com/myshuzhimei/p/11746828.html
Copyright © 2011-2022 走看看