Machine Learning第六讲[应用机器学习的建议] --(三)建立一个垃圾邮件分类器

来源:互联网 发布:网络歌曲好想好想你 编辑:程序博客网 时间:2024/05/29 02:19

内容来自Andrew老师课程Machine Learning的第六章内容的Building a Spam Classifier部分。

一、Prioritizing What to Work on(优先考虑的工作)

在垃圾邮件分类的问题中,我们首先需要选出很多特征,根据这些特征使用训练集训练,然后使用验证集验证误差,最后使用这个模型预测结果。

在这个问题中,输入的x形式为:
也即:

Note:在邮件分类问题中,一般我们会选择10000-20000个在训练集中出现的比较频繁的单词。

怎样能够使垃圾分类器有更好的性能(最低的误分类率)?一般可以从以下几个方面入手:
(1)收集更多的数据,如“honeypot”project可以用来发送垃圾邮件,这些邮件可以当做训练集中的数据使用。
(2)找出基于路由信息的更复杂的特征(路由信息在邮件的header中)。
(3)寻找邮件主题内容的更复杂的特征,如:“discount”和“discounts”是否是同一个特征?“deal”和“Dealer”是否是同一个特征?以及标点符号特征。
(4)找出更复杂的算法来探测拼写错误,如m0rtgage,medlcine,w4tches等。
虽然我们知道有这些方法,但是具体哪些方法有效,这个很难说清楚,需要根据实际情况考虑。

二、Error Analysis(误差分析)

在学习的过程中,我们推荐的方法是(1)以一个简单的项目开始,在训练集上训练,在验证集上验证。(2)画出学习曲线帮助我们找出出现了什么问题,怎么解决,这部分内容参见Machine Learning第六讲[Advice for Applying Machine Learning] --(二)Diagnosing Bias vs. Variance内容。(3)误差分析:通过人工分析有多少数据被错误分类,并观察被错误分类的邮件主要是哪些内容或者哪些类别的内容。

举例:
验证集具有500个数据,发现有100个数据被错误分类,通过手动检测这100个错误分类的邮件,我们尝试去发现:
(1)这些邮件是什么类型的(type)?
(2)哪些特征可以帮助我们更好的分类这些邮件?

1、假设我们发现在这100个错误分类的邮件中,
Phrama:12
Replica/fake:4
Steal passwords:53
Other:31
我们发现Steal passwords(窃取密码)的这种邮件较多,那么我们需要把时间主要花费在这个上面来研究是否通过设计特征或者其他的方法来减小Steal passwords邮件的误分类率。

2、假如我们发现在这100个错误分类的邮件中,
Deliberate misspellings(m0rgage,medlcine,etc.):5
Unusual email routing:16
Unusual(Spamming) puctuation:32
我们发现拼写错误的比较少,因此我们没有必要把时间耗费在研究拼写错误上面。

我们知道了面对较高的误分类率我们应该怎么做,那么我们怎样衡量这么做是否有用呢?这就需要引入数值评估的内容了。
因为我们不能直接看出我们的方法对提高系统性能是否有帮助,唯一的办法就是利用量化的数值评估

比如,我们来衡量词干提取器有没有作用:
若在使用词干提取器之前误差率为5%,使用词干提取器之后误差率为3%,则说明提取器是有作用的(在后续学习中,这个评判数据还需要一些处理)。
0 0