欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【统计学】最大似然估计和最大后验估计

程序员文章站 2022-03-05 14:31:12
...

两个方法都是基于样本去估计系统(总体)参数的估计方法,因此经常会被拿到一起来说。

最大似然估计

最大似然估计(maximum likelihood estimation,简称MLE)很容易理解,在生活生活中其实也经常用到,看下面一个例子:

一个箱子中有白球和黑球共1000个,但是我们并不知道白球和黑球各多少个(当然这里不允许把箱子里的球倒出来逐个数),此时我们就可以用抽样的方法去估计箱子里黑白两种球的分布。假设我们抽了100次,得到的结果是60次黑球和40次白球,那么我们很自然的可以估计箱子里面有600个黑球,400个白球。你看,这是生活中我们非常自然的意识,但这其中却是用到了最大似然估计的原理哦~

在上面的例子中,我们假设总体为X,箱子里面黑球的真实概率为pp,产生我们抽样结果(即抽到60次黑球)为事件θ\theta,那么发生每次抽取后结构为有60个黑球和40个白球的情况的概率为:P(θX)=p60(1p)40P(\theta|X) = p^{60} * (1-p)^{40}
此处的P(θX)P(\theta|X)就是我们说的似然函数。

最大似然估计可以理解为:选择让抽样结果发生的概率最大的参数作为总体被估计的参数。 也就是说,我们要让似然函数最大,这就很简单了,只要对上式求导即可,这时候你可能会说:对上式求导一点都不简单,哈哈哈~ 那试试先取对数再求导呢?实际上在运用最大似然估计时,一般都不是直接对似然函数求导,而是对对数似然函数求导,因为似然函数的形成其实就是一系列的条件概率相乘而得来的。

我们总结一下:

  • 最大似然估计的终极目标:选择一个参数作为系统参数的估计值,让抽样结果发生的概率(似然概率)最大
  • 最大似然估计步骤:
    • 求出似然函数
    • 对似然函数或对数似然函数求导,令方程等于0
    • 解方程求出参数, 该参数作为总体参数的估计量
  • 另外要注意的是,在上述抽样步骤中,正确的做法是:每抽出一个球记录颜色再放回,而不知直接在箱子里抽取100个球。因为我们需要保证:每次抽样样本颜色跟箱子里球的颜色是同分布的
  • 最大似然估计在大数据量的情况下发挥比较好。

最大后验估计

最大后验概率估计(Maximum a posteriori estimation, 简称MAP),也是用样本估计整体,但是在使用时需要加上先验条件,最大后验估计的基础是贝叶斯公式。举一个网上的例子:

我们需要估算抛硬币正面朝上的概率,在做测试时只允许抛10次,在这10次中,恰好全部是正面朝上的,如果根据极大似然估计的思想,那么抛硬币正面朝上的概率是1,这无疑是不严谨的。因此在最大后验估计中,会设置一个先验条件,如抛硬币实验中,可设置的先验条件为P(θ)P(\theta)服从高斯分布或beta分布。

还是以黑白球为例:
假设抽到白球的先验函数P(θ)P(\theta)服从μ=0.5,σ=0.1\mu=0.5, \sigma=0.1的高斯分布,则根据贝叶斯公式:P(θX)=P(Xθ)P(θ)P(X)P(\theta|X) = \frac{P(X|\theta) * P(\theta)}{P(X)}其中, P(θX)P(\theta|X)就是后验概率,P(Xθ)P(X|\theta)为似然概率, P(θ)P(\theta)为先验概率, P(X)P(X)在此处与θ\theta无关,我们可以把它理解为一个归一化常数。

那么,最大后验估计,其实就是需要找到一个θ\theta值,使得后验概率P(θX)P(\theta|X)最大。
嘻嘻 看到区别了吗:
最大似然估计,把能令似然函数最大的值作为估算值;
最大后验估计,把能令后验函数最大的值作为估算值;

仔细观察一下,在后验概率函数中,当P(Xθ)P(θ)P(X|\theta) * P(\theta)最大时,可以达到我们想要的效果。也就是说要找到一个θ\theta值,使得似然概率和先验概率的乘积最大。 这就很像在机器学习中加入正则项来控制模型复杂度的操作,在这里先验概率可以看做是给似然概率加上了一个限制。这个过程弄清楚了之后,接下来就是求极值的问题了,这完全可以借鉴最大似然估计的做法。

下面用python的sympy库(刚发现的特别好用的一个库,求方程很方便)来对后验函数求极值。把μ=0.5,σ=0.1\mu=0.5, \sigma=0.1的高斯分布带入可得:P(θX)=θ70(1θ)401(2π)σe(θμ)22σP(\theta|X) = \theta^{70}(1-\theta)^{40} * \frac{1}{\sqrt{(2\pi)\sigma}} * e^{-\frac{(\theta - \mu)^2}{2\sigma}}

from sympy import *
def posterior(u, s, front, reverse):
    theta = symbols('theta')
    priorFunc = (theta**front) * ((1-theta)**reverse) ##似然函数
    gaussian =( 1/(sqrt(2*pi) * s)) * E**((-(theta - u)**2)/ (2 * s**2)) ## 高斯分布
    return solve(diff(priorFunc * gaussian, theta), theta) ##先求对数再求解方程
   
posterior(0.5, 0.1, f, 30)

由于θ\theta大于0小于1,解得θ=0.66\theta=0.66,而最大似然估计时0.7,因此加入先验概率后,结果显得更“保守”一点。

总结一下:

  • 最大后验概率估计的终极目标:选择一个参数作为系统参数的估计值,让后验概率函数最大
  • 最大后验估计步骤:
    • 确定参数的先验分布和似然函数
    • 求出后验概率分布函数
    • 对后验函数或对数后验函数求导,令方程等于0
    • 解方程求出参数, 该参数作为总体参数的估计量
  • 对于后验概率估计,选择合适的先验分布很重要。
相关标签: 统计学