• 机器学习模型之EM算法


    1、EM算法

    EM算法是针对含有隐变量的一种优化算法,如果不含有隐变量,我们可以直接利用极大似然估计方法,对需要优化的变量求导,用梯度下降的方法进行参数的更新。而当变量中含有隐变量时,就无法用极大似然估计方法,就需要用到EM算法进行迭代的求解,EM算法分为两步,第一步是E步,即得到隐变量的期望,第二步是M步,即需要更新需要优化的参数。公式如下所示

    • step1:E步

    [Q( heta, heta^{i}) = sumlimits_{Z} P(Z | Y, heta^{i}) log P(Y , Z| heta) ]

    第一步是求期望,这里的期望是对隐变量的期望,这里,我们首先根据先验知识获得( heta^{i}),这样我们便可以得到(P(Z | Y, heta^{i})),这个公式表示在已知( heta^{i})的情况下,我们通过样本数据得到在每一个隐变量上的概率值,通过该概率值,便可以求出(P(Y , Z| heta)),但是这里的( heta)是未知变量,我们进而对( heta)进行求导,并令求导公式等于0,得到更新的( heta^{i+1}),即M步。

    • step1:M步

    [ heta^{i+1} = mathop{argmax}_{ heta} Q( heta, heta^{i}) ]

    2、EM算法解释

    下面,我们来讲解EM算法是如何得出来的。首先,得到需要优化的函数

    [L( heta) = log P(Y | heta) \ = log sumlimits_{Z} P(Y,Z| heta) \ = log sumlimits_{Z} P(Z | heta) P(Y | Z, heta) ]

    接下来,我们定义

    [L( heta) - L( heta^{i}) = log sumlimits_{Z} P(Z | heta) P(Y | Z, heta) - log P(Y | heta^{i}) \ = log sumlimits_{Z} P(Z | Y, heta^{i}) frac {P(Z | heta) P(Y | Z, heta)} {P(Z | Y, heta^{i})} - log P(Y | heta^{i}) \ 根据jensen不等式可以得到 \ >= sumlimits_{Z} P(Z | Y, heta^{i}) log frac {P(Z | heta) P(Y | Z, heta)} {P(Z | Y, heta^{i})} - log P(Y | heta^{i}) \ = sumlimits_{Z} P(Z | Y, heta^{i}) log frac {P(Z | heta) P(Y | Z, heta)} {P(Z | Y, heta^{i}) P(Y | heta^{i})} ]

    我们令

    [B( heta, heta^{i}) = L( heta^{i}) + sumlimits_{Z} P(Z | Y, heta^{i}) log frac {P(Z | heta) P(Y | Z, heta)} {P(Z | Y, heta^{i}) P(Y | heta^{i})} \ 则 L( heta) >= B( heta, heta^{i}) ]

    在什么时候(L( heta))(B( heta, heta^{i}))两者相等呢?其实在(L( heta^{i})=B( heta^{i}, heta^{i}))时两者相等,即在( heta= heta^{i})的时候两者相等,由这个等式可知,(L( heta^{i}))(B( heta^{i}, heta^{i}))同增同减,那么我们只需要最大化(B( heta, heta^{i}))就可以更新( heta)了,即

    [ heta^{i+1} = mathop{argmax}_{ heta} B( heta, heta^{i}) \ = mathop{argmax}_{ heta} L( heta^{i}) + sumlimits_{Z} P(Z | Y, heta^{i}) log frac {P(Z | heta) P(Y | Z, heta)} {P(Z | Y, heta^{i}) P(Y | heta^{i})} \ = mathop{argmax}_{ heta} sumlimits_{Z} P(Z | Y, heta^{i}) log P(Z | heta) P(Y | Z, heta) \ = mathop{argmax}_{ heta} Q( heta, heta^{i}) ]

  • 相关阅读:
    hdu4717 The Moving Points(二分做法)
    C++中用rand()和srand()产生随机数方法介绍
    教你看懂C++类库函数定义之一---HRESULT 宏
    [置顶] IOS培训资料
    调试出不来 断点不起作用 调试技巧 MyEclipse进不了调试
    [置顶] 编程模仿boost::function和boost::bind
    模拟红外协议接收程序
    Java 使用JDBC、DBCP、C3P0访问数据库
    Linux点亮一个灯
    Makefile解析(最简单的LED)
  • 原文地址:https://www.cnblogs.com/stephen-goodboy/p/13067035.html
Copyright © 2020-2023  润新知