吴恩达机器学习笔记(十一)

第十二章 机器学习系统设计

 确定执行的优先级

    这一节中将介绍在实际工作过程中,应该先处理哪些事情。

    以建立一个邮件分类器为例:

    给定一组电子邮件,可以为每个电子邮件构造一个向量。这个向量中的每个元素代表一个单词。向量通常包含10,000到50,000个条目,这些条目是在我们的数据集中找到最常用的单词,将它们作为特征向量。当准备好所有的x向量,我们训练我们的算法,最后,我们可以用它来分类电子邮件是否是垃圾邮件。

    如何在有限的时间下让垃圾邮件分类器具有高精准度和低错误率?

        ▷  收集大量数据(honeypot项目)

        ▷  从邮件信息中找寻复杂的特征来捕捉邮件的来源信息(例如邮件头部)

        ▷ 从邮件体中找寻复杂的特征(discount 和discounts是否被对待一致,关于标点符号的特征)。

        ▷  设计复杂的算法来检测出单词中故意出现的拼写错误

误差分析

    这一节中将介绍误差分析的概念,它能帮助在众多方法中作出选择。

    解决机器学习问题的推荐方法是:

          从一个简单的算法开始,快速实现它,并尽早的用交叉验证数据测试它。

        ▷  绘制学习曲线来决定是否有更多的数据、更多的特性等等可能会有帮助。

        ▷  误差分析:手动检查交叉验证集中示例上的错误,并尝试找出发生大多数错误的趋势。

    具体的实例:

    假设正在做一个垃圾邮件分类器,在交叉验证集中有500个样本,算法对其中的100个进行了错误分类,现在要做的是手动检查100个错误,然后将它们分类:

    (1)根据它们是什么类型的邮件对它们进行分类;

    (2)尝试想出新的线索和特征,帮助算法正确地分类这100个样本。

    在改进算法时,一个技巧是保证自己对学习算法有一种数值估计方法。

    将误差转变为一个单一的数值非常重要,否则很难判断我们所设计的学习算法的表现。在误差分析中我们应使用定量计算来评判算法的表现。

    例如:

    (1)如果使用词干,也就是用不同的形式(fail/ failed /failed /failed)处理相同的单词作为一个单词(fail),得到3%的错误率而不是5%,那么可以确定使用词干提取是一个不错的注意,应该将它添加到模型中。

    (2)如果试图区分单词的大小写字母(Mom/mom),它们是否具有同样的特征呢?最终得到的错误率为3.2%而不是3%,这样做比之前的错误率更高,就能很快决定是否需要区分大小。

    因此,当改进学习算法是,应该尝试很多新东西和新版本算法,通过一个单一规则的数值评价指标可以更快地看到学习算法的表现,并根据我们的结果决定我们是否要保留新特性,所以推荐在交叉验证集上来做误差分析。

不对称性分类的误差评估

    上一节中提到了误差分析和设定误差度量值的重要性,即设定某个实数来评估学习算法、衡量它的表现。

    有了算法评估和误差度量值,要注意的是,使用一个合适的误差度量值有时会对学习算法造成非常微妙的影响,即偏斜类问题。

    以癌症分类器为例

    建立逻辑回归模型y=1表示有癌症,y=0则没有)。

    假设你的算法在测试集上只有1%的错误,可实际上,测试集中只有0.5%的病人患有癌症,此时1%的错误率就不再显得很好了,因此我们可以通过下面的方法来提高正确率:

    这个算法实际上只有0.5%的错误率,这是一个非机器学习算法,它只是预测y总是等于0。这种情况发生在正例和负例的比率非常接近于一个极端情况,在这个例子中,正样本的数量与负样本的数量相比非常少,y=1非常少,把这种情况叫做偏斜类(一个类中的样本与另一个类的数据相比多很多)。

从上面的例子我们可以知道正确率不足以表现一个算法的优劣(在某些正例或反例及其少的数据集中),因此我们引入了Precision/Recall

    其中一种评估度量值叫做查准率和召回率。

    假设正在用测试集评估一个分类模型,每个测试集的样本都会等于0或1,学习算法要做的就是做出值的预测并且为测试集中的实例做出预测。

    所以有了这个基于实际类和预测类表格的这种方式来评估算法的表现,这里要计算两个数值:

    (1)查准率:在我们预测y=1的数据中,真正得癌症的病人的比率。

    准确率越高越好,在癌症预测的例子中,高准确率对于预测有癌症的病人有很高的准确率。

    (2)召回率:在真正得癌症的数据中,我们预测癌症所占的比率。

    同样地,召回率越高越好。

    通过计算准确率和召回率,可以更好的知道分类模型到底好不好,拥有高准确率和高召回率的模型是一个好的分类模型。

准确率和召回率的平衡

    这里将介绍一些准确率和召回率作为算法评估度量值的更有效的方式。

    在前面有提到,将误差转变为一个单一的数值非常重要,因为这样才能方便的比较不同算法之间的优劣。现在有precisionrecall两个衡量标准,需要权衡两者。如用Logistic回归模型预测病人是否患癌症,考虑下面的情况:

    (1)假设考虑到一个正常人如果误判为癌症,将会承受不必要的心理和生理压力,所以我们要有很大把握才预测一个病人患癌症(y=1)。那么一种方式就是提高阙值(threshold),不妨设我们将阙值提高到0.9,即:

    这是一个高准确率模型,在这种情况下,将会有较高的准确率,但是召回率将会变低。

    (2)假设考虑到一个已经患癌症的病人如果误判为没有患癌症,那么病人可能将因不能及时治疗而失去宝贵生命,所以我们想要避免错过癌症患者的一种方式就是降低阙值,假设降低到0.3, 即:

    这是一个高召回率模型,在这种情况下,将会有较高的召回率,但是准确率将会变低。

    可以绘制出两者对应的变化曲线,如下:

    从以上的情况中,又有新的问题引出,有没有办法自动选取临界值呢?换种说法,如何比较不同的准确率和召回率?

    假设有三个不同的学习算法或三个不同的曲线是一样的算法,但是临界值不同:

     如果有一个评估度量值(一个数字)能判断到底是算法好1号还是算法2好,怎样才能引入得到这个评估度量值呢?尝试计算一下准确率和召回率的平均值,但这可能并不是一个很好的解决办法。

     对于极端情况来说,例如上图中的算法3,一个有非常高的临界值,一个有非常低的临界值,它们中的任何一个都不是一个好的模型。

为了将precision和Recal转变为一个单一数值,我们引入了F值,,上图中算出的F值如下:

    可以通过F值判断算法1是最高的,因此会从3个算法中选择算法1。

机器学习数据

    这一节中讨论机器学习系统设计的另一个重要的方面:数据。

    假设在机器学习问题中,特征值x包含了足够的信息,这些信息可以帮助我们用来准确地预测y,例如:

    容易混淆词问题,假如说它能够描述x捕捉到需要填写的周围空白的词语,我们想要捕捉的特征是:For breakfast Iate ___ eggs.,这里就有大量信息告诉我们中间需要填的词是two,而不是to或too。因此,特征捕捉哪怕是周围词语中的一个词,就能给我足够的信息来明确标签y是什么。

    举一个反例:设想房子价格的问题,房子只有大小信息没有其他特征,所以,如果已知一个房子有500平方米,而不知道其他的信息特征,然而除了房子的大小,还有很多其他因素会影响房子的价格,只知道大小,很难预测房子的价格。

    所以,通过以上这个反例,假设特征能够提供足够的信息,就能在需要的水平上预测出价格。

    如果你有大量的数据,而且训练出了一种带有很多参数的学习算法,那么这将是一个很好的方式来提供一个高性能的学习算法。

猜你喜欢

转载自blog.csdn.net/qq_34611579/article/details/80809388
今日推荐