机器学习CR-附录:极大似然估计(Maximum Likelihood Method)      
View on GitHub

龙珠

修炼自己与发现世界

机器学习CR-附录:极大似然估计(Maximum Likelihood Method)

By arthur503 -- 10 Nov 2013

一、定义

极大似然估计在百度百科中的定义如下:

极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值。极大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。

最大似然估计(Maximum likelihood estimation)中解释如下:

最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。简单而言,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均值与方差未知。我们没有人力与物力去统计全国每个人的身高,但是可以通过采样,获取部分人的身高,然后通过最大似然估计来获取上述假设中的正态分布的均值与方差。

最大似然估计中采样需满足一个很重要的假设,就是所有的采样都是独立同分布的。

极大似然估计中,极大似然估计的步骤如下:

当然极大似然估计只是一种粗略的数学期望,要知道它的误差大小还要做区间估计。

求极大似然函数估计值的一般步骤: (1) 写出似然函数; (2) 对似然函数取对数,并整理; (3) 求导数 ; (4) 解似然方程 。

在求极大似然估计的步骤中,要先写出似然函数。似然函数是什么?怎么定义的呢?

似然函数中,对似然函数的定义如下:

设总体X服从分布P(x;θ)(当X是连续型随机变量时为概率密度,当X为离散型随机变量时为概率分布),θ为待估参数,X1,X2,…Xn是来自于总体X的样本,x1,x2…xn为样本X1,X2,…Xn的一个观察值,则样本的联合分布(当X是连续型随机变量时为概率密度,当X为离散型随机变量时为概率分布) L(θ)=L(x1,x2,…,xn;θ)=ΠP(xi;θ)称为似然函数。

而极大似然函数的定义如下:

是指找出一个(θ)的组合,使得L(θ)=L(x1,x2,…,xn;θ)=ΠP(xi;θ)最大化,即使得样本数据出现的概率最大化(这是基于我们认为样本的数据已经发生了,那么这组数据的出现概率必然是最大的)。

总结:

总的来说,极大似然估计是对“模型已定,参数未知”的情景,即随机样本满足某种概率分布的参数进行估算的方法。参数估算的思想是:认为某个参数能是这个样本出现的概率最大,因此,对于已经出现的样本概率,计算得到的使其概率最大的参数就认为是估计参数的真实值。另外,极大似然估计是一种粗略的数学期望,对于其误差大小还要做区间估计(唔,这个用到了还要再看看概率书)。

极大似然估计的计算方法是:先写出似然函数,似然函数是样本的联合分布,如上说示,是各个样本出现概率的连乘积;对似然函数取对数,求导将式子变为连和,计算得到式子最大值(导数为0处),得到参数θ的值。

二、举例

问题1:

在维基百科最大似然估计中举了个“离散分布,离散有限参数空间”的抛硬币的例子,我们简单借鉴修改一下,题目如下:

我们把这个硬币抛5次(即,我们获取一个采样x1,x2,x3,x4,x5),假设我们抛出了3个正面,2个反面。假设这个硬币是我们从一个装了三个硬币的盒子里头取出的。这三个硬币抛出正面的概率分别为p=1/3, p=1/2, p=2/3.这些硬币没有标记,所以我们无法知道哪个是哪个。使用最大似然估计,通过这些试验数据(即采样数据),我们可以计算出哪个硬币的可能性最大。

我们把正面的事件记为H,反面记为T。并把抛出一个正面的概率记为p,抛出一个反面的概率记为1-p(因此,这裡的p即相当于上边的θ)。这个似然函数取以下三个值中的一个:

P(H=3,T=2|p=1/3) = C_{5}^{3} * (1/3)^{3} * (1-1/3)^{2} = 0.1646

P(H=3,T=2|p=1/2) = C_{5}^{3} * (1/2)^{3} * (1-1/2)^{2} = 0.3125

P(H=3,T=2|p=2/3) = C_{5}^{3} * (2/3)^{3} * (1-2/3)^{2} = 0.3292

可以看出,当p取2/3时,似然函数取得最大值。这就是p的最大似然估计。

问题2:

原例子中的计算到这里就算完毕了,我们再修改一下题目如下:

我们把这个硬币抛5次(即,我们获取一个采样x1,x2,x3,x4,x5),假设我们抛出了3个正面,2个反面。求硬币抛出正面的概率为多少?

在这里,我们其实看完题目直接就可以看出,由于总共抛了5次,抛出正面3次,所以硬币抛出正面的概率为3/5。那这个计算是如何得来的呢?其实也还是使用最大似然概率。

我们使用之前介绍的求极大似然函数估计值的一般步骤,列出概率函数如下:

L(p)= P(H=3,T=2|p) = C_{5}^{3} * (p)^{3} * (1-p)^{2}

对其求导,得到:

l(p) = L^{‘}(p) = C_{5}^{3} * (3(p)^{2} * (1-p)^{2} - (p)^{3} * 2 * (1-p))

另l(p) = 0,求解得:p = 3/5

注意:此处我们并没有取对数。取对数一般是为了方便的将连乘转换为连加,在这里直接可以计算也很简单,不需要转换。

这就是我们根据经验看出来的3/5的背后的原理。

问题3:

既然得到了最大似然结果:p=3/5,再看一下原来的题目,加上条件“假设这个硬币是我们从一个装了三个硬币的盒子里头取出的。这三个硬币抛出正面的概率分别为p=1/3, p=1/2, p=2/3.这些硬币没有标记,所以我们无法知道哪个是哪个”,我们可以看到,p=2/3与3/5最为接近,因此,如果从这三种硬币里选择,p=2/3的硬币应该是最可能的。

等等,这样做是否毫无问题?

如果要这样做,我们需要确认,与最大似然概率p=3/5距离越远,差距越大。

根据之前的式子可以知道,在本例中关于概率p的公式为:P(H=3,T=2|p) = C_{5}^{3} * (p)^{3} * (1-p)^{2},这并不是一个关于p的线性函数。使用R语言画了一下,是类似于y=x^3的曲线形状。因此,如果两个概率与p=3/5的距离相同(如p=2/5,p=4/5),并不能推出他们的最大似然概率也相同。我们检验如下:

P(H=3,T=2|p=2/5) = C_{5}^{3} * (2/5)^{3} * (1-2/5)^{2} = 0.2304

P(H=3,T=2|p=3/5) = C_{5}^{3} * (3/5)^{3} * (1-3/5)^{2} = 0.3456

P(H=3,T=2|p=4/5) = C_{5}^{3} * (4/5)^{3} * (1-4/5)^{2} = 0.2048

可以看出,P(H=3,T=2|p=3/5)时的概率是最大的,其他概率都不可能超过他。另外,P(H=3,T=2|p=2/5)和P(H=3,T=2|p=4/5)与P(H=3,T=2|p=3/5)的概率的差值是不同的,因此,我们可以验证:在原题目中,不可以通过各个概率值与最大似然概率p=3/5之间的差值来判断哪个p的概率最大。对于原题目中这种限定概率(即:硬币的抛正面的概率是确定的)的情况,必须计算每个p的概率之后比较得到结果,而不能通过计算最大似然概率(p=3/5),然后通过比较各个限定概率与p=3/5之间的距离来计算是哪个硬币。

三、局限性

丕子在博文极大似然估计的朴素理解中,谈到了如下的例子,我们可以从中看出来极大似然估计的局限性,并将其与贝叶斯方法进行对比。

注意:丕子的例子中有个条件忘了给出来,就是人们感染病毒的几率是1%,这一点在后面的计算中用到了,估计是忘了写了。

最大似然法原理简单,应用很广。举个例子,这样的情况在生活会经常遇到。假如人们会感染一种病毒,有一种测试方法,在被测试者已感染这个病毒时,测试结果 为阳性的概率为95%。在被测试者没有感染这个病毒时,测试结果为阳性的概率为2%。现在,有一个人的测试结果为阳性,问这个人感染了病毒吗?根据最大似然法,如果一个人感染病毒,95%的测试结果会为阳性;而如果这个人没有感染病毒,只有2%的测试结果会为阳性,所以这个人应该是已经感染病毒了。

最大似然法应用广泛,但是经常会受到一种批评,而且对于这种批评,尤其在数据量比较小的时候,最大似然法的支持者没有很多充分的反驳理由:在最大似然法 中,只考虑了由一个模型产生一个已知数据的概率,而没有考虑模型本身的概率。相对应的考虑了模型本身概率的方法,是贝叶斯方法(Bayesian method)。

在上面测试病毒的例子中,如果我们知道在整体人群中,只有1%人会感染这种病毒,那么,根据贝叶斯方法,这个被测试者只有1/3左右的可能性感染了病毒 1% * 95%/(1% * 95% + 99% * 2%)=32.4%。在这里,我们看到先验概率对结果的影响很大。

不过,当数据量比较大的时候,先验概率的影响就会减小。比如,人们在被检测出感染了一个严重的病毒后,一般会去其他医院复查。假如同一个人在三家医院进行了独立的检查,结果都是阳性。那么,这个人真正感染了病毒的概率有多大?在这个人感染病毒时,出现这种检测结果的可能性为95% * 95% * 95% = 85.7%;而在这个人没有感染病毒时,出现这种检测结果的可能性为2%2%2% = 0.000008。根据最大似然法,我们应选择这个人感染了病毒。

根据贝叶斯方法,这个人感染病毒的概率为1% * 5% * 95% * 95%/(1% * 95% * 95% * 95% + 99% * 2% * 2% * 2%) = 99.9%。

我们可以看出来,极大似然估计的局限性在于没有考虑模型本身的概率,在数据量比较小的时候没有很强的说服力。但是,很有意思的是,在人们的直觉和常识中,一般是使用极大似然法来估计的,并且是比较盲目的信任(就像一家医院检测出病毒就认为自己的病的概率很高),这在生活中的例子也屡见不鲜。这种盲目的信任可以通过一下方法来破除:

1. 考虑模型本身的概率(即:使用贝叶斯概率计算); 2. 增大数据量(即:多跑几家医院确诊);

参考资料: