现在我们来讨论一下机器学习系统设计。

Machine Learning System Design

Building a Spam Classifier

Prioritizing What to Work on

假设我们想建立一个垃圾邮件分类系统,现在手上有大量的垃圾邮件和费垃圾邮件,那么我们怎样使用监督学习将垃圾邮件和非垃圾邮件分开呢?首先我们可能需要从这些邮件中选择一些能够区分垃圾邮件与非垃圾邮件的词汇,将他们作为特征X。比如说“buy”一词,邮件中含有该词汇,则很有可能是垃圾邮件。如果一封邮件中含有“buy”,则其对应的$x_{buy}^{(i)}=1$,否则$x_{buy}^{(i)}=0$。假设我们抽取100个单词作为特征,那我们就从每一封邮件抽象出一个特征向量$x^{(i)}$,一个标志$y^{(i)}$。然后再利用前面讲到的某一种分类方法,比如逻辑回顾,来对邮件进行分类。最后进行调参,判断系统性能。当然实际应用我们抽取的词汇可能远远不止100个。《机器学习实战》中介绍的第一个例子就是垃圾邮件分类,有兴趣的话可以拿来看一看。

增大训练数据集是改善模型的一个好方法,但前面我们已经这种方法不是在任何时候都奏效。针对垃圾分类系统,我们在下图中列出了几种方法:

6_20

Error Analysis

建立一个机器学习学习系统时,我们推荐的一个流程是这样的。以一个能快速实现的算法开始训练模型,然后用交叉验证数据集(cross validation set)来测试模型。然后画出学习曲线(learning curve),观察模型存在什么样的问题,后选择合适的方法,如增加训练数据,提取更多特征等,来调整改善模型。现在我们提出错误分析(error analysis)的概念:人工地查看模型在交叉验证数据集中出错的数据,观察系统是否存在造成分类错误的一些较明显的问题,若存在则针对该问题对模型进行调整,如提取新的特征等。

6_21

如上图所示,假设数据量为500的交叉验证数据集,模型在其中的100封邮件上错误分类。观察这100封邮件,看它们中是正常邮件多还是垃圾邮件多,是否存在什么特别的之前没有提取到的特征。另外,在垃圾分类系统中,还有一些小的细节要注意,如将邮件中的大写转换为小写,同一个动词的一般式,过去式,ing形式,三单式提取成一个特征等等。

精确度(accuracy)和错误率(error rate)等数字能定量的衡量模型的好坏。在一个小标题我们来讨论这个问题。(突然发现Andrew Ng起的标题名有问题啊!)

Handling Skewed Data

Error Metrics for Skewed Classes

以癌症分类问题为例,我们引出对skewed class的误差度量(error metric)。假设一个数据集S,其中只有0.5%的病人患有癌症,现在有一个较好的模型M1有99.2%的accuracy,而另一模型M2直接将所有病人全都分类成没有患癌症,则其accuracy为99.5%,那我们能说M2的性能比M1好么,当然不能。我们将S这样的数据集成为skewed class。模型对数据的分类只可能有四种情况:将$y_{actual}=1$的数据分类成$y_{predicted}=1$,将$y_{actual}=1$的数据分类成$y_{predicted}=0$,将$y_{actual}=0$的数据分类成$y_{predicted}=0$,将$y_{actual}=0$的数据分类成$y_{predicted}=1$。我们将这四种情况分别记为True positive,False positive,False negative,True negative。引入准确率(precision)和召回率(recall)两个概念,分别表示模型对分类成$y_{predicted}=1$的数据的accuracy,和模型对实际分类为$y_{actual}=1$的数据的accuracy。
$$Precison=\frac{True positive}{predicted positive}=\frac{True positive}{True positive + False positive}$$ $$Recall=\frac {True positive}{actual positive}=\frac{True positive}{True positive + False negative}$$

6_22

Trading Off Precision and Recall

从准确率和召回率的定义可以看出,二者越高,模型的性能越好,但二者不能兼得,high precision往往意味着low recall,high recall往往意味着low precision,因此我们要根据实际需要对二者进行权衡(trade-off)。例如,将癌症分类问题中逻辑回归的threshold由0.5改为0.7,模型的precision将得到提升,其中的现实意义是医生只在有足够把握(原来的把握是超过50%,而现在是70%)的情况下才会告知病人得了癌症,减少了误诊(前面的False positive)。反过来,如果将threshold由0.5改为0.3,模型的recall将得到提升,其中的现实意义是减少了实际患有癌症但分类错误耽误治疗的情况(前面的False negative)。precision和recall的变化情况见下图。

6_23

下面介绍使用precision和recall来对模型进行评价的方法。下图中分别给出了三个算法的precision和recall,使用二者的平均值来权衡模型的性能是不合适的,这里我们使用了$F_1$ score

Using large data

Data For Machine Learning

现在我们来讨论一下数据量的问题。2001年,Michelle Banko和Eric Broule作了一个很有趣的研究。在相同的数据集上,他们使用不同的算法去分辨confusable words。结果如下图所示:

6_24

研究的结论是这样一句话:It’s not who has the best algorithm that wins, it’s who has the most data.

视频的最后几分钟讲的是在一个多参的算法中使用大的training set可能会获得很好的性能。