机器学习系统设计–垃圾邮件分类

假定我们现有一封邮件,其内容如下:

From: cheapsales@buystufffromme.com
To: ang@cs.stanford.edu
Subject: Buy now!Deal of the week!Buy now!
Rolex w4ches - $100
Med1cine (any kind) - $50
Also low cost M0rgages
available.

充斥着各种诱人的促销信息,很有可能是一封垃圾邮件(Spam)。假定我们有一个垃圾邮件的数据集,想通过机器学习的方式来学会鉴定邮件是否是垃圾邮件,通过这个范例,我们也将学习到机器学习的系统设计。

模型设计

我们令向量 x 表示垃圾邮件的特征向量,该向量包含了 100 个按字母序排序的单词特征,这些单词通常为垃圾邮件常出现的词汇:discount,deal,now 等等:
xj={1第j个单词出现0未出现x_j=\begin{cases}1\quad第j个单词出现\\0\quad未出现\end{cases}xj​={1第j个单词出现0未出现​

令 y 标签表示该邮件是否是垃圾邮件:
y={1x是垃圾邮件0x不是垃圾邮件y=\begin{cases}1\quad x是垃圾邮件\\0\quad x不是垃圾邮件\end{cases}y={1x是垃圾邮件0x不是垃圾邮件​

那么垃圾邮件分类就是一个 0/1 分类问题,可以用逻辑回归完成,这里不再重复介绍逻辑回归的过程了,我们考虑如何降低分类错误率:

  • 尽可能的扩大数据样本:Honypot 做了这样一件事,把自己包装成一个对黑客极具吸引力的机器,来诱使黑客进行攻击,就像蜜罐(honey pot)吸引密封那样,从而记录攻击行为和手段。
  • 添加更多特征:例如我们可以增加邮件的发送者邮箱作为特征,可以增加标点符号作为特征(垃圾邮件总会充斥了?,!等吸引眼球的标点)。
  • 预处理样本:正如我们在垃圾邮件看到的,道高一尺,魔高一丈,垃圾邮件的制造者也会升级自己的攻击手段,如在单词拼写上做手脚来防止邮件内容被看出问题,例如把 medicine 拼写为 med1cinie 等。因此,我们就要有手段来识别这些错误拼写,从而优化我们输入到逻辑回归中的样本。

错误分析

对于机器学习问题,吴恩达给出了一些 tips:

  • 在一开始,尽量不要将问题复杂化(不要提前优化),先快速实现一个简单算法,然后通过交叉验证集评估模型。这就好比在软件工程中,不会做提前优化,而是先迭代功能。
  • 通过绘制学习曲线(learning curve),确定面临的问题是高偏差还是高方差,来决定是添加更多训练样本,还是添加更多特征。
  • 甚至可以手动检查交叉验证集中误差较大的样本,确定错误的来源和解决策略。

举个例子,假定交叉验证集有 500 个样本,即 mcvm_{cv}mcv​=500 ,我们的模型错分了其中 100 个样本,那么我们会通过下述手段进行错误分析:

  1. 需要知道哪些邮件被错分了,是假冒伪劣的推销邮件?医药邮件?还是钓鱼邮件?
  2. 需要知道提供什么线索(特征)能帮助模型区分出这些邮件?

例如,在这 100 个错分样本中,我们发现有 53 个样本是钓鱼邮件,因此,我们就需要考虑为模型注入识别的钓鱼邮件的能力。继续观察,我们发现,在这 53 封钓鱼邮件中,故意使用错误拼写的邮件有 5 封,来源可疑(发送人可疑)的邮件有 16 封,使用了大量煽动性标点符号的邮件有 32 封。因此,对于识别钓鱼邮件来说,我们更适合将煽动性标点符号添加为特征,而不用再考虑去识别错误拼写。

4.4 机器学习系统设计--垃圾邮件分类-机器学习笔记-斯坦福吴恩达教授相关推荐

  1. 5.11 程序示例--垃圾邮件检测-机器学习笔记-斯坦福吴恩达教授

    程序示例–垃圾邮件检测 邮件内容的预处理 下面展示了一封常见的 email,邮件内容包含了一个 URL (http://www.rackspace.com/),一个邮箱地址(groupname-uns ...

  2. 8.4 有监督学习与异常检测-机器学习笔记-斯坦福吴恩达教授

    有监督学习与异常检测 很多人会认为异常检测非常类似于有监督学习,尤其是逻辑回归,但我们用一张表格来描述有监督学习与异常检测的区别: 有监督学习 异常检测 数据分布均匀 数据非常偏斜,异常样本数目远小于 ...

  3. 3.12 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授

    多分类问题 我们手上包含有手写字符的数据集,该数据集来自斯坦福机器学习的课后作业,每个字符图片大小为 20×20 ,总的样本规模为 5000×400 , 我们的神经网络设计如下,包含 1 个隐含层,隐 ...

  4. 3.1 再论 0/1 分类问题-机器学习笔记-斯坦福吴恩达教授

    再论 0/1 分类问题 在逻辑回归一章中,我们讨论了 0/1 分类问题,并且知道,通过对特征进行多项式展开,可以让逻辑回归支持非线性的分类问题.假定我们现在有 nnn 维特征,需要进行非线性分类,采用 ...

  5. 5.9 程序示例--非线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–非线性分类 接下来,我们采用高斯核函数来解决非线性可分问题,由于数据集较大,我们使用性能更好的完整版 SMO 算法进行训练: # coding: utf8 # svm/test_non_li ...

  6. 5.8 程序示例--线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–线性分类 首先,我们使用线性核函数来训练线性可分问题,这里,我们使用的是简化版 SMO 算法: # coding: utf8 # svm/test_linear import smo imp ...

  7. 3.9 神经网络解决多分类问题-机器学习笔记-斯坦福吴恩达教授

    神经网络解决多分类问题 假定我们需要将图像分为四类: 行人图像 车辆图像 摩托车图像 卡车图像 这是一个多分类问题,由于图像特征较多,因此我们可以考虑设计含有多个隐含层的神经网络来完成特征优化(扩展) ...

  8. 2.7 程序示例--多分类问题-机器学习笔记-斯坦福吴恩达教授

    程序示例–多分类问题 我们采用 One-vs-All 方法来进行多分类,在原有的逻辑回归模块中添加 One-vs-All 的训练以及预测方法: # coding: utf-8 # logical_re ...

  9. 2.6 多分类问题-机器学习笔记-斯坦福吴恩达教授

    多分类问题 通常采用 One-vs-All,亦称 One-vs-the Rest 方法来实现多分类,其将多分类问题转化为了多次二分类问题.假定完成 KKK 个分类,One-vs-All 的执行过程如下 ...

最新文章

  1. 三线表是什么?R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义三线表结构(将因子变量细粒度化重新构建三线图)、编写自定义函数在三线表中添加p值
  2. 函数嵌套 lisp表达式求值
  3. protobuf入门教程(二):消息类型
  4. 今晚8点直播丨 经典知识库:性能优化那些事
  5. 【Elasticsearch】 Elasticsearch 多字段查询 best_fields、most_fields、cross_fields,傻傻分不清楚?
  6. 三阶魔方层先法 复原公式
  7. c++ 计算多图形面积
  8. 等保测评机构推荐证书撤销,纳入国家认证体系
  9. 最常用20000英语单词表_受够加班煎熬,我整理出10条职场人士最常用的透视表技巧!(下篇)...
  10. Elastic:开发者上手指南
  11. oracle 9i 启动监听报错误 TNS-12555: TNS:permission denied 解决
  12. 休闲一下---沙雕朋友圈的日常
  13. 不重视,小程序将会带来大风险!——三大风险、隐私合规,小程序主该如何面对?
  14. 《赢在中国》第三季观后感
  15. motion_model总结
  16. 想毁掉一家公司的产品,就人手一本他的书
  17. 2023年软考成绩什么时候出?软考成绩公布时间间隔多久
  18. 手机验证码常见漏洞总结
  19. 以太坊系列 - 以太坊的测试网
  20. Qt编写物联网管理平台47-通用数据库设置

热门文章

  1. 记录一些精品开源项目
  2. 48. Rotate Image ~
  3. 利用socketserver实现异步多线程服务端简单聊天功能
  4. Giphy – 分享一个很棒的 GIF 动画图片搜索引擎
  5. iframe 父窗口和子窗口相互的调用方法集锦
  6. 第二十二章 鲁曹沫柯地之盟强索地 齐桓公因势利导著信义
  7. 使用win32 API 下载文件
  8. ArcEngine Hittest学习总结
  9. 简易promise的实现(二)
  10. 正则化方法:防止过拟合,提高泛化能力