Week 6:Machine Learning System Design

接Exercise5的内容,他们都是第六周的内容。这一部分主要讲如何设计一个机器学习系统。

垃圾邮件分类器

假设你正要去实现一个垃圾邮件分类器,你会怎么做?这是一个二分类问题,我已经学习了线性回归、逻辑回归、神经网络。最快速、准确的方式应该是先确定特征向量,收集数据,再选择一个模型,快速地进行一次测试,画出学习曲线,根据曲线分析现状是高方差还是高偏差,再进行下一步的选择。

那么特征向量怎么选取呢?如果是英文,例如:

1
2
3
4
5
From: xxxx@xx.com
To: me@xx.com
Subject: Buy now!!

Deal of the week! Buy now!

可以考虑建立一个特征向量,选择100个词左右,记录词是否出现过,例如 x = [buy, deal, discount, …, now],对于上面这封邮件,x的值会是 x = [1, 1, 0, …, 1]。

接着就是模型选择,参考Exercise5的模型选择方法即可,那么训练集怎么获取呢?一个简单的方法是把自己的邮箱暴露给个大广告商,这样的话你可能每天都会受到上百封广告邮件,接着就是对模型进行训练了。

错误分析

在验证集中你需要手动对错误分类的邮件进行纠错,并且检查哪一类的邮件容易被分类错误,这件事必须手动进行。例如验证集大小为500,其中有100封邮件是垃圾邮件,但是没有被过滤掉,那么你最好检查这100封邮件,手动进行分类。

现在进行深一步考虑特征向量:

  • 我们都知道英语是有词根的,例如 discount, discounted, discounts 它们是不是应该看成一个词,即discount呢?
  • 对于Deal和deal 是否也看成一个词呢?(即不区分大小写)
  • 对于错误拼写如discount 和 disc0unt,有些聪明人会采取这种方式来躲过垃圾邮件过滤器

一个好的方法便是,把这些方法都试一遍,看哪一个种的准确率比较高,因为它们比较容易在算法中进行调整。

偏斜类、查准率、召回率

偏斜类是指在二分类中,其中某一类的占比很大的情况。例如在癌症预测中,实际上患癌症的概率是很小的,例如只有1%,此时如果你的预测函数直接写成 $ y = 0$ 而不经过机器学习算法来计算,你的准确率也许会更高一些,但是我们都知道这个预测函数肯定是错的,显然准确率并不能衡量一个预测函数的好坏。此时就需要引入两个概念:查准率、召回率。

还是以癌症预测为例,$ y = {0, 1}$ 表示未患癌症和患上癌症,预测函数 $h = {0, 1}$ 表示预测没患癌症和预测患上了癌症。那么根据两两组合关系可以得到下面的关系:

y = 1 y = 0
h = 1 真阳性(True positive) 假阳性(False positive)
h = 0 假阴性(False negative) 真阴性(True negative)

查准率:预测病人患上了癌症的正确率,P = $\frac {真阳性} {真阳性 + 假阳性}$

召回率:患癌症的病人能查出来的概率,R = $\frac {真阳性} {真阳性 + 假阴性}$

一个好的预测函数,这两个率都要高,也就是 $\frac {2PR} {P + R}$ 要大

那么对于之前的那个情况,如果预测函数为 $y = 0$ ,那么它的召回率 $R = 0$,这样的预测函数是很差的。

坚持原创文章分享,您的支持将鼓励我继续创作!