本文章可作为《机器学习特训营》关于朴素贝叶斯相关的补充资料。从零开始推导朴素贝叶斯的最大似然,这部分不是必须的,但感兴趣的学员可以参考一下。
作者:李文哲, 2019年7月
朴素贝叶斯模型是文本分析领域最为常用的模型之一,也是最为经典的模型。文本主要从教学的角度来讲解朴素贝叶斯模型以及数学原理。为了让文档具备完备性,必要的前置知识也包含在文章里。 在这里,我们假设朴素贝叶斯的输入向量是每个单词出现的次数。如果向量的表示为tf-idf等实数型的,我们则需要使用高斯朴素贝叶斯模型(不是本文重点)。
预备数学知识:
- 求极值问题
人工智能中最核心的数学环节是求出一个目标函数(object function)的最小值/最大值。求出一个函数最小是/最大值的方法很多,在这里我们介绍一个最经典的方法之一:直接求出极值点。这些极值点的共同特点是在这些点上的梯度为0, 如下图所示。这个图里面,有8个极值点,而且这些极值点中必然会存在最小值或者最大值(除去函数的左右最端点)。所以在这种方式下,我们通常x先求出函数的导数,然后设置成为0。之后从找出的极值点中选择使得结果为最小值/最大值的极值点。
A. 无约束条件的优化
例1:求
对于这样的一个问题,其实我们都知道这个问题的答案是
从而得到
求导之后
即可以得到
*请注意:并不一定所有函数的极值都可以通过设置导数为0的方式求出。也就是说,有些问题中当我们设定导数为0时,未必能直接计算出满足导数为0的点(比如逻辑回归模型),这时候就需要利用数值计算相关的技术(最典型为梯度下降法,牛顿法..)
B. 带约束条件的优化 - 拉格朗日乘法项(Lagrangian Multiplier)
对于某些求极值问题,函数通常带有一些条件。如下面的例子:
例3:求
拉格朗日乘法项就是用来解决这类问题。我们可以把限制条件通过简单的转变加到目标函数中,这时候问题就变成了
剩下的过程就跟上面的类似了。设定导数为0,即可以得到以下三个方程:
解完之后即可以得到
2. 最大似然估计(Maximum Likelihood Estimation)
最大似然估计是机器学习领域最为常见的用来构建目标函数的方法。它的核心思想是根据观测到的结果来预测其中的未知参数。我们举一个投掷硬币的例子。
假设有一枚硬币,它是不均匀的,也就是说出现正面的反面的概率是不同的。假设我们设定这枚硬币出现正面的概率为
其中D表示所观测到的所有样本。从这个结果其实谁都可以很容易说出
基于最大似然估计法,我们需要最大化观测到样本的概率,即p(D)。进一步可以写成:
我们的目标是最大化概率值
把这个式子整理完之后即可以得到
朴素贝叶斯的最大似然估计
假设给定了一批训练数据
朴素贝叶斯是生成模型,它的目标是要最大化概率p(D),也就是p(x,y)。我们把前几步的推导先写一下:
这里简单说明一下:样本
我们看到式子里面都是乘法项,而且多个乘法项很容易引起数据的overflow或则underflow(在这里是underflow)。所以我们一般不直接最大化p(D),而是最大化
在这里我们用了一些技巧。举例子,假设一个文章的内容为
这两者是等同的,只不过我们从词典库的维度把所有的单词都考虑了进来,并数一下每一个单词在文档i里出现了多少次,如果没有出现,相当于0次。所以从这个角度我们可以把
另外,我们也用到了
另外,我们设定
另外,有两个约束条件需要满足,分别是:
第一个条件表示的是所有类别的概率加在一起等于1. 比如
利用拉格朗日乘法项,我们可以把目标函数写成:
A: 找出最优解
我们需要设置导数为0,进而找出最优解。现在求解的是
解为
则
这里面
B. 找出最优解
类似的,我们需要求L对
解为
把
这个式子中分子代表的是在所有类别为$k$的文档里出现了多少次
到此为止,模型的参数已经得到。