首页 > 代码库 > 机器学习---从最大似然估计法到EM算法
机器学习---从最大似然估计法到EM算法
最大似然估计 :
这个我们大学学习概率一直用到的东西,其实非常牛逼!
什么是最大似然估计?
问题:给定一组观察数据还有一个参数待定的模型,如何来估计这个未知参数呢?
观察数据(x1,y1)......(xn,yn) 待定模型参数为θ,模型为f(x;θ)。这时候可以借助观察数据来估计这个θ。这就是最大似然函数估计。
举个例子:
假设我们有一个袋子,里面装着白球和黑球,但是我们不知道他们分别有多少个,这时候需要我们估计每次取出一个球是白球的概率是多少?如何估计呢? 可以通过连续有放回的从袋子里面取一百次,看看是白球还是黑球。假设取100次里面 白球占70次,黑球30次。设抽取是白球的概率为P。 那么一百次抽取的总概率为 p(x;p)
p(x;p)=p(x1,x2.......x100;θ)=p(x1;θ)*p(x2;θ)........p(x100;θ)
=p70*(1-p)30
那么这时候我们希望可以使这个概率最大。
求导:logp(x;p)=logp70*(1-p)30 另导数为0则可以求出p=0.7(同理可以用到连续变量里面,这时候就是概率密度函数的乘积so easy)
是不是很简单,对!就是这么简单!其实最大似然估计就是在给定一组数据和一个待定参数模型,如何确定这个模型未知参数,使得这个确定后的参数模型产生的已知数据概率最大。当然这里我只是举了一个只有一个未知参数的估计方法,多个未知参数的做法是一样的,就是求似然函数求导取最大值。其实并不是所有似然函数都可以求导的,当似然函数无法求导时就需要根据定义求使得L(θ)最大的θ。
EM算法 :
相信大家对似然函数已经手到擒来了。那么我们就来看看高深的。
一个概率模型有时候既含有观察变量,有含有隐变量。如果只有观察变量那么我们可以用最大似然法(或者贝叶斯)估计未知参数,但是如果还含有隐变量就不能如此简单解决了。这时候就需要EM算法。
大家可能对这种问题不是很明白,也不太明白隐变量是什么意思。我举个例子(引用统计学习方法的例子):
有3枚硬币分别记为A,B,C,并且出现正面概率分别为p ,q ,k.规则如下:先抛硬币A,如果为正面就选择B,否则选择C,然后再将选择的硬币(B或者C抛),然后观测结果。正面为1 反面为0.独立重复实验10次结果如下:1,1,1,0,0,0,1,1,1,0。我们并不知道抛A硬币时为正面还是方面,只知道最后的结果,问如何估计p,q,k的值?
如果我们知道抛的是哪个硬币就可以使用最大似然估计来估计这些参数,但是我们不知道。因为有p的原因,所以无法估计,这个p就是隐变量
log(Θ)=Σlogp(x;Θ)=Σlogp(x,p;Θ),Θ就是要求的q,k 待定参数,x为观测数据,因为这个p导致我们无法求解MaxΣlogp(x;Θ)。
还比如说调查 男生 女生身高的问题。身高肯定是服从高斯分布。以往我们可以通过对男生抽样进而求出高斯分布的参数,女生也是,但是如果我们只能知道某个人的高度,却不能知道他是男生或者女生(隐含变量),这时候就无法使用似然函数估计了。这个时候就可以使用EM方法。
分为E和M两步:
E步:
首先通过随机赋值一个我们要求的参数,然后求出另外一个隐含参数的后验概率。这是期望计算过程,我们首先通过随便赋予模型参数的初始值p,q,k,求出各个数据到模型的结果。
M步
用求出来的隐含参数的后验概率进行对传统的似然函数估计,对要求参数进行修正。迭代直到前后两次要求的参数一样为止
其实可以这么简单理解:就是在无监督聚类的时候,我们不知道模型的参数(比如为高斯分布),这时候我们就随便赋值给模型的待定参数(u和ó)。然后我们就可以计算出各个数据分别属于那一类。然后我们用这些分类好的数据重新估计u和ó。
参考 : http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
机器学习---从最大似然估计法到EM算法