最近看斯坦福大学的机器学习课程,空下来总结一下参数估计相关的算法知识。
一、极大似然估计:
大学概率论课程都有讲到参数估计的两种基本方法:极大似然估计、矩估计。两种方法都是利用样本信息尽量准确的去描述总体信息,或者说给定模型(参数全部或者部分未知)和数据集(样本),让我们去估计模型的未知参数。
其中,矩估计依赖于辛钦大数定律:简单随机样本的原点矩依概率收敛到相应的总体原点矩,这就启发我们利用样本矩替换总体矩(最简单的是用一阶样本原点矩估计总体期望,而用二阶样本中心矩估计总体方差),其一大优点就是使用时不用知道总体的分布形式。这个当然很好理解,下面主要总结学习下极大似然估计法:
极大似然估计,又名最大似然估计,其基本思想是:当我们从模型总体随机抽取n组样本观测值后,最合理的参数估计量应该是使得从模型中抽取的该n组样本观测值的概率最大(直观上也很容易理解,概率大的事件总是比概率小的事件更容易发生,反过来,既然事件A已经发生,我们就应当认为事件A发生的概率应该是最大的,否则它又有什么理由PK掉概率最大的事件B呢,个人理解咯)。
依然举个栗子:假设你学校有1000名帅哥并且其身高服从高斯分布N(u,∂),你想知道自己的身高在学校处于什么样的水平、身高分布的特点等信息,这样子你可能需要知道参数(u,∂)的具体值,但你没那么多时间去统计全体帅哥的身高信息,于是你随机抽取了100名帅哥并得到了他们的身高,这样子你就有了一个样本集X={x1,x2,…,xN},由于每个样本都独立的从p(x|θ)中抽取的,那么抽到这100个帅哥的概率是p(x1|θ)* p(x1|θ)...* p(x100|θ)。表达成数学上通用的形式就是:
这个函数反应了在不同的参数θ取值下,取得当前这个样本集的可能性,因此称为参数θ相对于样本集X的似然函数(likehood
function),记为L(θ)。
PS:既然样本集X={x1,x2,…,xN}已经得到(发生),那么就让它发生的概率最大化的吧(这样子说好像有点逻辑错误);
由于L(θ)中各项是连乘形式的,通常为了便于处理/计算,我们进行取对数操作:
如何求取H(θ)的最大值,当然是对函数求导数了,多个参数时就是求函数的偏导数,然后让(偏)导数为0 ,这样就得到了似然方程,然后解似然方程就可以计算得到参数θ的估计值啦。同样的方法,你也可以得到学校美女的身高分布信息,等等。
极大似然估计的基本过程总结下来:
1、抽取得到样本集;
2、假设模型(是服从高斯分布还是二项分布等等;
3、列出似然函数并求导得到似然方程;
4、求解似然方程得到参数θ的估计值
高大上的极大似然估计法经过层层分解就简单许多了。
二、EM算法
继续依赖上面帅哥美女的身高来总结该算法,在极大似然估计中,我们预先知道了某个身高是隶属于帅哥还是美女(因为你抽样的时候已经做了区分了)。但是,现在社会这么复杂,区分人的性别可不是一件容易的事情,这样你抽样得到了200个样本,其中一部分隶属于帅哥,剩下的隶属于美女,只是不知道具体哪个样本隶属于帅哥,在这么艰苦的条件下需要去估计帅哥的(身高)分布参数(u1,∂1)、美女的(身高)分布参数(u2,∂2),又该怎么做呢?
主要需要解决两个基本问题:1、样本类别(是帅哥还是美女) ,算法中描述的隐含变量z(i) 2、每个类别的分布参数是多少。
要解决问题1就需要先解决问题2,要解决问题2也需要先解决问题1,在两个问题的解都未知的情况下,不妨先假设一个解好了。由于样本往往比较多,对其类别做假设还是有点嫌麻烦,那不如假设分布参数值好了(即对u1,∂1、u2,∂2)设定一个初值)。现在好办多了,既然已经知道了分布参数值,那么对于一个样本比如身高170cm,那么将其代入分布1:N(u1,∂1)得到一个概率值:p1(x|θ1),同理,代入分布1:N(u1,∂1)得到一个概率值:p2(x|θ2),这样如果p1>p2,那我们就可以认为这个样本属于类别1(既帅哥了)。 如此,对所有的样本都进行这样的计算、比较,那每个样本的类别信息就有了,这样就解决了第一个问题,那接下来就可以运用极大似然法重新估计分布参数了...如此迭代,直到收敛(比如分布参数的变化值已经低于某个限度了)。
EM算法(Expectation-maximization)算法的流程:
首先初始化分布参数θ;
迭代直到收敛:
E步骤:根据参数初始值或上一次迭代的模型参数来计算出隐性变量的后验概率,其实就是隐性变量的期望。作为隐含变量的现估计值:
M步骤:将似然函数最大化以获得新的参数值:
将M步骤的公式还是有点高大上,分开写就更直观一点了:
收敛后就是我们需要的最有参数估计了。
边学边写的难免有不少错误,也引用了不少同行的公式:EM算法,在此表示感谢