昌旭的博客


机器学习、编程和数学


模式识别——极大似然估计和贝叶斯估计(离散随机变量)

模式识别——贝叶斯分类器一文中,我们提到贝叶斯分类器需要$P(\boldsymbol{t}\vert w_i)P(w_i)$和$P(w_i)$这两钟概率值。本文我们将介绍如何通过极大似然估计贝叶斯估计来估计这两种概率。

注意:本文针对$\boldsymbol{t}$为离散变量时的情形,对于$\boldsymbol{t}$为连续变量的情形我将在另外的博文中介绍

极大似然估计

假设产品经理给我们了一组巨大的训练大数据(这个数据集非常巨大,大到保证其分布趋近于真实分布,并且能覆盖变量$\boldsymbol{t}$的全部可能),我们现在希望依据这个训练数据集来估计$P(\boldsymbol{t}\vert w_i)P(w_i)$和$P(w_i)$。

很自然的,我们能想到先验概率为:

$$ P(wk) = \frac{\sum{i=1}^{N}{I(y_i=w_k)}}{N}, \quad k = 1,2,\cdots,K $$

其中$N$为样本数,$I(y_i=w_k)$当且仅当第$i$个样本属于$w_k$时为1。所以我们断言$P(w_k)$的值就是训练数据集中$w_k$类样本出现的频率(这非常符合直觉)。由于产品经理给的数据集非常非常大而完善,这种简单的想法效果拔群。

接下来我们再依葫芦画瓢的估计条件概率:

$$ P(X^{(j)}=a_{jl}\vert Y=ck) = \frac{\sum{i=1}^{N}{I(xi^{(j)} = a{jl}, y_i = ck)}}{\sum{i=1}^{N}{I(y_i = c_k)}} \quad j = 1,2,\cdots ,n; k = 1,2,\cdots , K $$

其中$xi^{(j)}$是指第$i$个样本的第$j$个特征;$a\{jl}$是指第$j$个特征的第$l$个可能的取值。

但是,现实中训练数据集往往不能做到那么“大而全”,因此直接使用贝叶斯估计必然会出现很多概率为0的情况,这就需要我们改进极大似然估计

贝叶斯估计

如果我们在极大似然估计方程的基础上加上一个常数项进行平滑处理,不就能一定程度解决上述问题么?按照这个思路,我们得出如下贝叶斯估计

$$ P(X^{(j)}=a_{jl}\vert Y=ck) = \frac{\sum{i=1}^{N}{I(xi^{(j)} = a{jl}, y_i = ck)} + \lambda}{\sum{i=1}^{N}{I(y_i = c_k)} + S_j\lambda} \quad j = 1,2,\cdots ,n; k = 1,2,\cdots , K $$

式中$\lambda \geq 0$, $s_j$表示$x$的第$j$个分量可能取的值的个数。当常数$\lambda = 1$时上式称为拉普拉斯平滑(Laplace smoothing)

显然,对任何$l = 1,2,\cdots ,S_j, k = 1,2,\cdots ,K$有:

$$ P\lambda(X^{(j)}=a{jl}\vert Y=c_k) > 0 $$

$$ \sum_{l=1}^{Sj}{P(X^{(j)}=a{jl}\vert Y=c_k)} = 1 $$

同理,先验概率为:

$$ P_\lambda(Y = ck) = \frac{\sum{i=1}^{N}{I(y_i = c_k) + \lambda}}{N + K\lambda} $$

到此为止,我们介绍了当观测值为离散随机变量时的两种估计方法,以后我还会写一篇关于连续随机变量情况下极大似然估计和贝叶斯估计用于参数估计的方法。