最大似然估计和最大后验概率估计及其在机器学习中的应用
在现实生活和机器学习的预测阶段中,我们一般都是使用固定的或者已经训练好的参数去预测一件事情发生的概率和新输入样本的输出。比如我们认为硬币是均匀的,去预测抛一次硬币的时候,正面朝上的概率;又或者训练出一个概率模型,预测病人在有某些症状的情况下患有癌症的概率。
但我们还有可能需要去判断一枚硬币是否均匀,以及训练出一个学习器。那么我们就需要做实验或者训练数据集,去估计我们的模型参数。对于参数估计,统计学界两个学派分别提供了两种方案:频率学派选择了最大似然估计,贝叶斯派选择了最大后验概率估计。
最大似然估计(MLE)
我们的目标是需要在给数个样本X=x1, x2, …, xm的情况下,找到每个θ,计算这个θ下发生X的概率。这样我们会找到一个关于θ的函数,然后找X发生概率最大的那个θ——θ0。这个θ0就是我们认为出现X的情况下,模型参数θ最优可能的取值。
L
(
θ
∣
X
)
=
∏
i
=
1
m
p
(
x
i
;
θ
)
,
θ
∈
Θ
θ
0
=
a
r
g
m
a
x
L
(
θ
∣
X
)
L(\theta|X) = \prod_{i=1}^mp(x_i;\theta), \theta \in \Theta\\ \theta_0 = argmaxL(\theta|X)
L(θ∣X)=i=1∏mp(xi;θ),θ∈Θθ0=argmaxL(θ∣X)
对于离散型:
L ( θ ∣ X ) = ∏ i = 1 m p ( x i ∣ θ ) , θ ∈ Θ L(\theta|X) = \prod_{i=1}^mp(x_i|\theta), \theta \in \Theta\\ L(θ∣X)=i=1∏mp(xi∣θ),θ∈Θ
对于连续型:
L ( θ ∣ X ) = ∏ i = 1 m f ( x i ∣ θ ) d x i , θ ∈ Θ L(\theta|X) = \prod_{i=1}^mf(x_i|\theta)dx_i, \theta \in \Theta\\ L(θ∣X)=i=1∏mf(xi∣θ)dxi,θ∈Θ
但由于dxi不随θ而变化,因此只考虑
L
(
θ
∣
X
)
=
∏
i
=
1
m
f
(
x
i
∣
θ
)
,
θ
∈
Θ
L(\theta|X) = \prod_{i=1}^mf(x_i|\theta), \theta \in \Theta\\
L(θ∣X)=i=1∏mf(xi∣θ),θ∈Θ
例子:
这里采用了详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解所举的例子,实现代码(在文末)修改自https://gitee.com/qukequke/utils/tree/master/mle_map:
假设有一个造币厂生产某种硬币,现在我们拿到了一枚这种硬币,想试试这硬币是不是均匀的。即想知道抛这枚硬币,正反面出现的概率(记为 θ)各是多少?
这是一个统计问题,回想一下,解决统计问题需要什么? 数据!
于是我们拿这枚硬币抛了10次,得到的数据(x0)是:反正正正正反正正正反。我们想求的正面概率 θ 是模型参数,而抛硬币模型我们可以假设是 二项分布。
那么,出现实验结果$ x_0$(即反正正正正反正正正反)的似然函数是多少呢?套用离散型的公式,把每一件事情出现的概率连乘:
L
(
θ
∣
X
)
=
∏
i
=
1
m
p
(
x
i
∣
θ
)
=
(
1
−
θ
)
×
θ
×
θ
×
θ
×
θ
×
(
1
−
θ
)
×
θ
×
θ
×
θ
×
(
1
−
θ
)
=
θ
7
(
1
−
θ
)
3
L(\theta|X) = \prod_{i=1}^{m} p(x_i|\theta) = (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
L(θ∣X)=i=1∏mp(xi∣θ)=(1−θ)×θ×θ×θ×θ×(1−θ)×θ×θ×θ×(1−θ)=θ7(1−θ)3
那么我们将认为这个硬币不均匀。正面概率是0.698。
最大后验概率估计(MAP)
贝叶斯学派并不这么认为。贝叶斯学派认为只是因为实验太少导致的情况,应该加入先验的知识。实际上,贝叶斯公式也是这么认为的,因为贝叶斯公式也是有先验概率在里面的。比如
P
(
θ
∣
X
)
=
P
(
X
∣
θ
)
P
(
θ
)
P
(
X
)
P(\theta|X) = \frac{P(X|\theta)P(\theta)}{P(X)}
P(θ∣X)=P(X)P(X∣θ)P(θ)
P(A|B)我们就称为后验概率,而P(A)我们称为先验概率,也就是无论B发不发生,A都发生的概率。在这个例子里,我们认为无论实验结果如何,硬币是均匀的概率都是最大的,而且符合正态分布,我们们用一个高斯分布来具体描述我们掌握的这个先验知识,例如假设 P ( θ ) P(θ)为均值0.5,方差0.1的高斯函数。P(θ)如下:
我理解的是P(X)是固定为1的(理解并不一定准确),因为我们样本已经在眼前,发生的概率就为1。别的博客中有理解为可以从样本中取得,总之,是一个固定的数。因此,可化简为:
P
(
θ
∣
X
)
=
P
(
X
∣
θ
)
P
(
θ
)
=
P
(
θ
)
∏
i
=
1
m
p
(
x
i
∣
θ
)
P(\theta|X) = P(X|\theta)P(\theta) = P(\theta)\prod_{i=1}^{m} p(x_i|\theta)
P(θ∣X)=P(X∣θ)P(θ)=P(θ)i=1∏mp(xi∣θ)
得到的图像为:
也就是说函数取最大值时, θ取值已向左偏移,不再是0.7。实际上,在 θ = 0.558时函数取得了最大值。即,用最大后验概率估计,得到 θ = 0.558。那要怎样才能说服一个贝叶斯派相信 θ = 0.7 呢?你得多做点实验。当抛硬币的次数达到1000时,最大似然中的0.5的概率已经非常低了,因此即使θ在0.5处取得最大值,也无济于事。
即使贝叶斯学派也不得不承认,这个硬币可能真的是不均匀的了。
机器学习中的应用
在机器学习中,我们就需要通过样本来估计这个模型的参数,也即非常著名的一句话,“模型已定,参数未知”。而由于我们得到的数据集是所有数据集中有限的,必然会导致一个问题——“以偏概全”,在机器学习中就是一个老生常谈的问题——过拟合。为了应对过拟合,我们解决的方法有多种,有参数惩罚,有参数共享(比如CNN),有增大样本量,早停,dropout等,还有就是可以加入先验知识来消除过拟合的影响,上文做10次实验的时候,就可能存在过拟合问题,因此加入了先验知识,避免其过拟合。我们又可以做1000次实验,增大样本量,避免可能出现的以偏概全,这个时候,我们的先验知识哪怕是错的,也不会有太大影响。
最大似然估计的核心就在于最大似然函数的表示和求解,应用到机器学习问题中,概率模型就是所谓的学习器了,而训练集就相当于从总体中采样获得的有限样本集X。所以,模型的训练过程实质就是参数估计的过程。但是,需要注意的一点是:**似然函数中的这个参数θ,指的是你建立的概率模型的参数,但这个参数(实际上是个参数向量)与样本的概率分布的参数并不是完全相同的。**那么该如何理解这个结论呢?这里我举例子进行说明:
对于”抛硬币问题",由于这个问题本身比较简单,对这个问题建模,所涉及的参数也就仅仅是样本x的概率分布的参数(即伯努利分布中的p);但在机器学习问题中,建模问题复杂化了,即建立的模型更复杂了,所涉及的参数也就更多了,例如在逻辑回归(对数几率回归)中,此时的概率模型涉及的参数为w和b,虽然逻辑回归的本质是伯努利分布下的极大似然估计,但我们要明白此时的参数不再是伯努利分布中的呢个p了,而是w和b了。
代码:
Gitee地址:https://gitee.com/hou_zhitian/ml_math
Github地址:https://github.com/Zhi-tian-Hou/ML_math
参考:
详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解
浙江大学概率论与数理统计(第四版)
周志华-机器学习
https://gitee.com/qukequke/utils/tree/master/mle_map