使用贝叶斯模型对训练集执行垃圾邮件分类任务,用测试集检验模型的运行效果,垃圾邮件数据集为公开的数据集。
我们使用Ling-Spam数据集,可以通过链接http://www.aueb.gr/users/ion/data/lingspam_public.tar.gz 下载。
我们划分Ling-Spam数据集的一部分为测试集来进行模型参数估计,测试集中的每一封信件都被标记为垃圾邮件(标记为$C=c_1$)或非垃圾邮件(标记为
根据贝叶斯定理进行分类,我们使用最大后验概率求解: $$ \begin{align}\begin{aligned}P(y \mid x_1, \dots, x_n) \propto P(y) \prod_{i=1}^{n} P(x_i \mid y)\\Downarrow\\hat{y} = \arg\max_y P(y) \prod_{i=1}^{n} P(x_i \mid y),\end{aligned}\end{align} $$ 在本例中,$y$指的是我们要预测邮件的类别$C=c_j$,$x_i$是指邮件选取高频词的二项分布的随机变量$W_i$,我们要求使得如下公式值最大的邮件类别$c_j$的值: $$ \arg\max_j P(C=c_j\mid W_1,\dots,W_k)=\arg\max_j P(C=c_j)\prod_i^kP(W_i\mid C=c_j) $$ ”宁可放过三千,不可错过一封正常邮件“,拦下一封正常的邮件比起让一封垃圾邮件通过测试更让人无法接受。所以,我们可以调整一封邮件是垃圾邮件的概率与一封邮件正常的概率的比率是否超过一个阈值$t$: $$ \frac{P(C=c_1\mid W_1,\dots,W_k)}{P(C=c_2\mid W_1,\dots,W_k)}>t $$ 当$t=1$时,我们就认为当一封邮件是垃圾邮件的概率超过0.5就可以判断其为垃圾邮件,但是我们取$t=3$,即当一封邮件是垃圾邮件的概率超过0.75时我们才判定它是垃圾邮件。
我们用数据集的其他部分作为测试集,计算出识别垃圾邮件的准确率。
贝叶斯分类邮件的参数包括高频次的次数(20),平滑常数($\alpha$)以及阈值$t=3$