Building a Spam Classifier

Prioritizing What To Work On

系统设计案例:

给定电子邮件数据集,我们可以为每个电子邮件构造一个向量。此向量中的每个条目代表一个单词。 向量通常包含10,000至50,000个条目,这些条目是通过在我们的数据集中找到最常用的单词而收集的。 如果要在电子邮件中找到一个单词,则将其相应的条目分配为1,否则,将为该条目分配0。一旦我们准备好所有x向量,就对算法进行了训练,最后,我们可以使用它来分类电子邮件是否为垃圾邮件。

DrWokj.png

那么,如何花费时间来提高此分类器的准确性?

  • 收集大量数据(例如“ honeypot”项目,但并不总是有效)
  • 开发复杂的功能(例如:在垃圾邮件中使用电子邮件标题数据)
  • 开发算法以不同方式处理输入(识别垃圾邮件中的拼写错误)

很难说出哪个选项最有用。

Error Analysis

解决机器学习问题的推荐方法是:

  • 从简单的算法开始,快速实现它,并在交叉验证数据上尽早对其进行测试。
  • 绘制学习曲线,以确定是否有可能提供更多数据,更多功能等。
  • 手动检查交叉验证集中的示例中的错误,并尝试找出导致大多数错误的趋势。

例如,假设我们有500封电子邮件,而我们的算法将100封电子邮件分类错误。 我们可以手动分析这100封电子邮件,并根据它们是哪种电子邮件进行分类。 然后,我们可以尝试提出新的提示和功能,以帮助我们正确分类这100封电子邮件。 因此,如果我们大多数错误分类的电子邮件都是试图窃取密码的电子邮件,那么我们可以找到一些特定于这些电子邮件的功能并将其添加到我们的模型中。 我们还可以看到如何根据词根对每个词进行分类如何改变我们的错误率:

Dr4nSI.png

获得作为单个数值的错误结果非常重要。否则,很难评估算法的性能。例如,如果我们使用词干处理,即将具有不同形式(fail/failing/failed)的同一个单词作为一个单词(失败)处理的过程,则错误率为3%,而不是5%,那么我们一定要添加它到我们的模型。但是,如果我们尝试区分大写字母和小写字母,并最终得到3.2%的错误率,而不是3%,那么我们应该避免使用此新功能。因此,我们应该尝试新事物,获取错误率的数值,然后根据结果确定是否要保留新功能。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇