11.1 Prioritizing what to work on: Spam classification example
设计机器学习系统时首先要做什么?我们以垃圾邮件分类器为例:
挑选一些词来作为垃圾邮件的特征有出现的为1否则为0.这里的数据x是100维的。
如何减少分类器的误差呢?列出了4种方法,如何选择这些方法呢?
11.2 Error analysis
在进行算法设计时,我们先去实现一个简单的算法,然后通过构造它的学习曲线来决定做哪些改进。在交叉验证集上进行误差分析,观察对哪些例子的处理效果不好,再针对这些例子进行算法改进。
例如这个垃圾邮件分类的误差分析,在100个被错误分类的邮件中,我们观察这些邮件的特征尝试提取出新的特征,但误差分析的结果并不一定能改进你的算法,你需要通过试验后的数值分析来判断算法改变后是否对效果有改进。比如,增加这个特征错误率了5%,不增加是几%,数值化评估。
所以总的来说,还是要尽快实现一个算法即使它比较简单效果一般,但实验后我们通过它犯的错找到办法改进它,不要提前去判断一些事,没有基于实验的做法往往不正确。
11.3 Error metrics for skewed classes
skewed classes偏斜类,就是分类问题中,正反两类的比例悬殊的情况。
cancer分类问题中,我们学习的误差有1%,看起来还不错,但实际上样例只有0.5%cancer,所以一个傻瓜式分类(把所有人都划分到没有cancer)误差只有0.5%。所以在这种偏斜类分类问题中,用精度来判断分类模型质量是否提升并不准确,比如从99.2%提升到99.5%,确实精度提升了,但是否改进的分类模型是否往傻瓜式上靠了呢?这样并不能得到一个好的分类模型。
我们列出实际和预测的2*2的表格,查准率是true pos/predicated pos,召回率是true pos/actual pos,我们可以看出这两个比率都是越高越好。
那么对于上面的傻瓜式分类,它的召回率为0,因为它不会预测阳性,这样阻止了算法欺骗我们。
需要注意precision和recall的定义:一般是y=1这种想要去测的少数类。
11.4 Trading off precision and recall
设置不同的阈值后,我们会得到不同的查准率和召回率。如设置阈值为0.9,那么我们很确信预测结果正确才告知,这样预测的查准自然很高,但同时只预测了很少部分阳性,召回率自然低了;相反设置阈值为0.1,我们进行更多大胆的预测,这样召回率自然高了,但是预测有太多不准确,查准率降低。
所以在一个较高查准或召回率前要如何选择呢?
平均值并不能排除3这种算法,我们采用F1 Score来判断。
测试不同的临界值,并在交叉验证集上算出哪个的F1 Score高。
11.5 Data for machine learning
我们看到这些算法都随着数据量增大准确度提高,这可能出现一个“劣等算法”在大数据的情况下比“优等算法”效果好的情况。
所以会出现“It’s not who has the best algorithm that wins. It’s who has the most data.”这种言论。
那么这种说法何时正确呢