测试集包含 130 封垃圾邮件 和 130 封非垃圾邮件。如果你已经走到了这一步,你将会发现以下结果。我已经展示出了对这两个模型的训练集的混淆矩阵(confusion matrix)。对角元素表示正确识别(也叫真识别)的邮件,其中非对角元素表示邮件的错误分类(假识别)。 除了 SVM 具有稍微平衡的假识别之外,这两个模型在测试集上具有相似的表现。我必须提醒你,测试数据既没有在创建词典使用,也没有用在训练集中。 你的任务 下载 Euron-spam 语料库()的预处理表格。该语料库在 6 个目录中包含了 33716 封邮件,其中包含「ham」和「spam」文件夹。非垃圾邮件和垃圾邮件的总数分别为 16545 和 17171。 遵循本文章中描述的相同步骤,并检查它如何执行支持向量机和多项式朴素贝叶斯模型。由于该语料库的目录结构不同于博客文章中使用的 ling-spam 子集的目录结构,因此你可能需要重新对其组织或在 def make_Dictionary(dir) 和 def extract_features(dir) 函数中进行修改。 我将 Euron-spam 语料库以 60:40 的比例分成训练集和测试集。执行本博客的相同步骤后,我在 13487 封测试集邮件中得到以下结果。我们可以看到,在正确检测垃圾电子邮件方面的表现,支持向量机(SVM)略优于朴素贝叶斯分类器。 最后的感想 我试图保持教程的简洁性。希望对文本分析感兴趣的初学者可以从这个应用程序开始。 你可能会思考朴素贝叶斯和支持向量机(SVM)背后的数学技术。支持向量机(SVM)在数学上是较为复杂的模型,但朴素贝叶斯相对容易理解。我鼓励你从在线资源中学习这些模型。除此之外,你可以进行很多实验以便发现各种参数的效果,比如 训练数据的数量 词典的大小 不同的机器学习技术,比如 GaussianNB、BernoulliNB、SVC) 对支持向量机模型参数进行调优 通过消除不重要的词(可以手动)以改进词典 一些其它的特征(可搜索 td-idf 了解) 你可以从 GitHub 获得这两种语料库的完整 Python 实现:https://github.com/abhijeet3922/Mail-Spam-Filtering。 原文链接: ↓↓↓ (责任编辑:本港台直播) |