如何学习垃圾邮件检测?

数据挖掘 机器学习 分类 文本挖掘
2021-09-25 10:13:47

我想了解垃圾邮件检测器是如何完成的。我不是想构建一个商业产品,这对我来说将是一个严肃的学习练习。因此,我正在寻找可以关注的资源,例如现有项目、源代码、文章、论文等。我想通过例子来学习,我认为我不够好,无法从头开始。理想情况下,我想在贝叶斯中弄脏我的手。

有这样的吗?编程语言对我来说不是问题。

4个回答

首先仔细检查这个您会找到一个简单的数据集和一些要查看的论文。

但是当你想开始一个简单的学习项目时,我建议不要通过论文(这显然不是基本的),而是尝试建立你自己的贝叶斯学习器,这并不难。

我个人建议Andrew Moore关于概率图形模型的讲座幻灯片,这些幻灯片是免费提供的,您可以简单地一步一步地学习。

如果您需要更详细的帮助,请对此答案发表评论,我很乐意提供帮助:)

享受贝斯学习!

在 Andrew Ng 在 Coursera 上的机器学习课程(在某种程度上是 Coursera 的旗舰课程)中,支持向量机的程序员练习就是一个垃圾邮件分类器的例子。讲座很棒,甚至很有名,非常值得一看。

他还发布了这个发布的课程:

http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex6/ex6.html

在 Cathy O'Neil、Rachel Schutt 所著的《Doing Data Science - Straight Talk from the Frontline》一书中,对用于垃圾邮件检测的贝叶斯方法进行了基本介绍。

这一章很好,因为它解释了为什么其他常见的数据科学模型不适用于垃圾邮件分类器。整本书自始至终都使用了 R,所以只有当你对使用 R 感兴趣时才拿起它。

它使用安然电子邮件集作为训练数据,因为它已经将电子邮件分为垃圾邮件/非垃圾邮件。

这实际上是许多人和公司都在研究的一个非常深入的问题。以下是一些基础知识:

首先,我们需要很好地表示数据。这涉及以某种方式将每个文档表示为d维空间。理想情况下,在这个空间中,我们希望具有相同标签的样本在欧几里得距离上靠近,而不同标签的样本在欧几里得距离上远离。这一步可能非常困难,但一种久经考验的表示称为词频-逆文档频率 (tf-idf)。这里,空间中的每个维度代表一个特定的单词,特定样本在该维度中的值基本上代表了该单词在文档中出现的归一化次数。你可以在这里阅读更多相关信息。如果你想尝试一下,这个表示有一个非常好的 scikit-learn 实现。

现在数据在一个有用的空间中,但是一个非常高维的空间。我建议以某种方式减少这个维度,但这是另一个线程的整个主题。

最后,您可以训练一些算法来对样本进行分类(这是其他答案的内容)。有很多很好的选择——神经网络、adaboost、SVM、朴素贝叶斯和图形分类模型都会给你很好的结果。其中许多在 scikit-learn 中也有实现。

但是最好的算法利用了这个问题实际上是一个迁移学习的事实。也就是说,训练和测试数据的分布可能并不完全相同——因为一个人认为是垃圾邮件的类型可能与另一个人认为是垃圾邮件的类型不同。