理论基础

贝叶斯公式

贝叶斯公式刻画了先验概率和后验概率之间的关系。

设$A_1,A_2,\dots,A_n$构成完备事件组,且对于$\forall A_i, P(A_i) > 0$。$B$为样本空间的任意事件,$P(B)>0$,则有:

$$ P(A_k | B) = \frac{P(A_k)P(B|A_k)}{\displaystyle\sum^{n}_{i=1}P(A_i)P(B|A_i)} $$

贝叶斯公式在问题中的应用

对于贝叶斯公式我们可以有如下的理解:

$$ P(\text{类别}|\text{特征}) = \frac{P(\text{特征}|\text{类别})P(\text{类别})}{P(\text{特征})} $$

当我们求得$P(\text{类别}|\text{特征})$,再将本样本归于概率最大的那一类,实际就完成了一次贝叶斯分类过程。

但是上述对贝叶斯公式的理解还需要加上一个不可缺少的条件,即各变量之间相互独立,以满足“$A_1, A_2, \dots, A_n$为完备事件组”这一条件。所以在实际运用中,我们还需要假设各个特征之间是独立的。

然而实际上,能够统计到的变量之间几乎不可能是互相独立的。例如,设事件$A=\text{电子邮件中出现“http”},B = \text{电子邮件中包含完整链接}$,当$A,B$都发生的时候电子邮件很可能是一封垃圾广告邮件。但是,显然$B\subseteq A$,也就是说$A,B$不互相独立。我们的程序在处理的过程中很难依据内容判断词与词之间的复杂的语义、逻辑关系,即无法判断两个词的出现事件之间是否互相独立。此外,由于人类语言的复杂性,词语之间基本都存在互相关联的情况,无法直接地抽象为互斥事件,所以利用朴素贝叶斯算法进行基于文本的垃圾邮件判断存在一定的理论误差。

在不大规模使用的情况下,朴素贝叶斯算法仍然能在简单的邮件分类作业上表现良好。

假设$A_i$为出现词汇表中的第$i$个词,$B$为此邮件为垃圾邮件,$\because A_i, A_j \text{互相独立}(i \neq j)$互相独立,则:

$$ \begin{align*}P(B|A_1,A_2,\cdots,A_n) & = \frac{P(A_1|B)P(A_2|B)\cdots P(A_n|B) P(B)}{P(A_1)P(A_2)\cdots P(A_n)} \\& = \frac{P(B) \Pi^{n}{i=1}P(A_i|B)}{\Pi^n{i=1}P(A_i)}\end{align*} $$

实践

要点问题分析

如何用数据表示词语

在程序处理的过程中,我们只需要进行数字的计算,但是我们的日常语言是使用词语等拼接起来的,为了进行这其中的转换,使得程序能够用数字的方式正确“理解”词语,我们需要一种用数字正确表示词语的方法。

常用的方法有独热码、词向量等,这里使用独热码表示。