极大似然估计(MLE)
我们已经了解了似然函数是什么,但怎么去把里面的θ给求出来是个更加关键的问题。这篇我们将来探讨下这个问题。
还是先举一个例子,假设有一个造币厂生产某种硬币,现在我们拿到了一枚这种硬币,想试试这硬币是不是均匀的。即想知道抛这枚硬币,正反面出现的概率(记为θ)各是多少?
这是一个统计问题,回想一下,解决统计问题需要什么? 数据!
于是我们拿这枚硬币抛了10次,得到的数据x_0x0是:反正正正正反正正正反。我们想求的正面概率θ是模型参数,而抛硬币模型是二项分布(除非硬币立起来,那么这个时候要马上去买彩票,还搞什么算法)。
那么,出现实验结果x0(即反正正正正反正正正反)的似然函数是多少呢?我们是这样列式的:
$$
f \left( x _ { 0 } , \theta \right) = ( 1 - \theta ) \times \theta \times \theta \times \theta \times \theta \times ( 1 - \theta ) \times \theta \times \theta \times \theta \times ( 1 - \theta ) = \theta ^ { 7 } ( 1 - \theta ) ^ { 3 } = f ( \theta )
$$
求出来函数的最大值是θ=0.7时取得的。这样,我们已经完成了对θ的极大似然估计。即抛10次硬币,发现7次硬币正面向上,最大似然估计认为正面向上的概率是0.7。
看完上面的公式相信很多人跟我一样是一脸懵逼的。懵逼的点就在于这他妈公式是哪里来的?为什么这样列式然后求其最大值时θ的取值就是极大似然估计的值,也就是根据给出样本的情况模型参数最有可能的取值?Why?
这里需要另外一个例子来告诉我们:
假设有一批产品,根据以往的经验知道它的次品率可能是0.1或0.3。生产这批产品的厂家认为该批产品很好,次品率大约为0.1,而收购产品的商业部门表示产品质量有问题,次品率可能为0.3。现在从这批产品中随机抽取15件,发现其中有5件是次品。问:生产厂家与收购部分谁的估计更加可靠?
解:记次品数为X,则
$$
X \sim B ( n , p )
$$
(这式子的意思是X服从二项分布)
若次品率
$$
p _ { 1 } = 0.1,
$$
则15件产品中有5件是次品的概率为:
$$
P ( X = 5 ) = C _ { 15 } ^ { 5 } 0.1 ^ { 5 } 0.9 ^ { 10 } = 0.0105
$$
若次品率
$$
p _ { 2 } = 0.3,
$$
则15件产品中有5件是次品的概率为:
$$
P ( X = 5 ) = C _ { 15 } ^ { 5 } 0.3 ^ { 5 } 0.7 ^ { 10 } = 0.2061
$$
后面的概率显然高于前面的,因此用0.3作为次品率的估计值更为可靠一些。
OK,解题结束,到这里相信你已经恍然大悟了。为什么极大似然估计公式是连乘。那不就是上面两道公式
$$
C _ { 15 } ^ { 5 }的右边部分吗?仔细看来,对比上下两道公式,可以发现C _ { 15 } ^ { 5 }这个部分是一样的,不同的就是C _ { 15 } ^ { 5 }的右边部分。
$$
而我们要让评估更正确,其实是要求让
$$
P ( X = 5 )这道公式取最大值的pp的值。又因为C _ { 15 } ^ { 5 }
$$
这部分写不写都不影响求解结果,它相当于一个常数,因此忽略掉那部分后,就得到了极大似然估计公式。
我们用更加严谨的公式把似然函数和极大似然估计都用数学表达出来如下(其中argmaxθ表示当右边函数取得最大值时θ的取值):
似然函数:
$$
l ( \theta ) = P ( x | \theta ) = p \left( x _ { 1 } , x _ { 2 } , \cdots , x _ { N } | \theta \right) = \prod _ { i = 1 } ^ { N } p \left( x _ { i } | \theta \right)
$$
极大似然估计:
$$
\hat { \theta } = \arg \max _ { \theta } l ( \theta ) = \arg \max _ { \theta } \prod _ { i = 1 } ^ { N } p \left( x _ { i } | \theta \right)
$$
当然这个公式看起来虽好,但有个问题,算起来比较要命,因为是连乘啊!这求个导能把人求哭。怎么办?两边取对数(因为lnx是随着x增大而单调增大的,也就是说当lnx取得最大值的时候x也取得最大值),这个时候极大似然估计变成这样:
$$
\hat { \theta } = \arg \max _ { \theta } H ( \theta ) = \arg \max _ { \theta } \ln l ( \theta ) = \arg \max _ { \theta } \sum _ { i = 1 } ^ { N } \ln p \left( x _ { i } | \theta \right)
$$
连乘变成累加,世界瞬间清净了!