序
接Exercise5的内容,他们都是第六周的内容。这一部分主要讲如何设计一个机器学习系统。
垃圾邮件分类器
假设你正要去实现一个垃圾邮件分类器,你会怎么做?这是一个二分类问题,我已经学习了线性回归、逻辑回归、神经网络。最快速、准确的方式应该是先确定特征向量,收集数据,再选择一个模型,快速地进行一次测试,画出学习曲线,根据曲线分析现状是高方差还是高偏差,再进行下一步的选择。
那么特征向量怎么选取呢?如果是英文,例如:
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$,这样的预测函数是很差的。