[Machine Learning] 机器学习系统的设计(Machine Learning System Design)

[Machine Learning] 机器学习系统的设计(Machine Learning System Design)

9 Machine Learning System Design(机器学习系统的设计)

9.1 Prioritizing What to Work On

例子:一个垃圾邮件分类器算法。

为了解决这样一个问题,首先要确定如何选择并表达特征向量????。例如可以选择由 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得特征向量(出现为 1,不出现为 0),尺寸为 100×1。
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)
为了构建这个分类器算法,可以做很多事,例如:

  1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本
  2. 基于邮件的路由信息开发一系列复杂的特征
  3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理
  4. 为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法

对于上面这些选项,难以决定应该在哪一项上花费时间和精力。不过当使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试试,作出明智的选择,比随着感觉走要更好。

9.2 Error Analysis

构建一个学习算法的推荐方法为:

  1. 构建一个简单并且能快速实现的算法,即便运行得不完美,但是也把它运行一遍,最后通过交叉验证来检验数据。
  2. 一旦做完,可以画出学习曲线,通过画出学习曲线,以及检验误差,来找出算法是否有高偏差和高方差的问题,或者别的问题。在这样分析之后,再来决定用更多的数据训练,或者加入更多的特征变量是否有用。
  3. 除了画出学习曲线之外,一件非常有用的事是误差分析。例如,当在构造垃圾邮件分类器时,看一看交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,可以发现某些系统性的规律:什么类型的邮件总是被错误分类。思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。

误差分析并不总能帮助我们判断应该采取怎样的行动。有时需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常是看交叉验证集的误差。

在垃圾邮件分类器例子中 ,对于“是否应该将 discount/discounts/discounted/discounting 处理成同一个词?”如果这样做可以改善算法,则会采用一些截词软件。误差分析并不能帮助做出这类判断,只能尝试采用和不采用截词软件这两种不同方案,然后根据数值检验的结果来判断哪一种更好。

推荐在交叉验证集上来实施误差分析,而不是在测试集上。

9.3 Error Metrics for Skewed Classes(偏斜类的误差评估)

类偏斜(Skewed Classes) 情况表现为训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。例如以算法来预测癌症是否是恶性的,在训练集中,只有 0.5%的实例是恶性肿瘤。假设编写一个非学习的算法,在所有情况下都预测肿瘤是良性的,那么误差只有 0.5%。然而通过训练而得到的神经网络算法却有 1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。

查准率(Precision)和查全率(Recall) 将算法预测的结果分成四种情况:

  1. 正确肯定(True Positive,TP):预测为真,实际为真
  2. 正确否定(True Negative,TN):预测为假,实际为假
  3. 错误肯定(False Positive,FP):预测为真,实际为假
  4. 错误否定(False Negative,FN):预测为假,实际为真

则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。

这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其查全率是 0。
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)

9.4 Trading Off Precision and Recall(查准率和查全率之间的权衡)

在很多应用中,我们希望能够保证查准率和查全率的相对平衡。

继续沿用刚才预测肿瘤性质的例子。假使,算法输出的结果在 0-1 之间,使用阀值 0.5 来预测真和假。
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)

  • 查准率(Precision)=TP/(TP+FP) 。在所有预测有恶性肿瘤的病人中,实际上有恶 性肿瘤的病人的百分比,越高越好。
  • 查全率(Recall)=TP/(TP+FN)。在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
  • 如果希望只在非常确信的情况下预测为真(肿瘤为恶性),即希望更高的查准率,可以使用比 0.5 更大的阀值,如0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。
  • 如果希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地 检查、诊断,可以使用比 0.5 更小的阀值,如 0.3。

将不同阈值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)
希望有一个帮助我们选择这个阈值的方法。
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)
一种方法是计算 F1 值(F1 Score),其计算公式为:
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)
选择使得 F1 值最高的阀值。

9.5 Data For Machine Learning

例:希望通过机器学习算法来区分常见的易混淆的单词,尝试了许多种不同的算法,发现数据量非常大时,这些不同类型的算法效果都很好。
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)
如上折线图所示,首先大部分算法,都具有相似的性能,其次,随着训练数据集的增大,在横轴上代表以百万为单位的训练集大小,从 0.1 个百万到 1000 百万,也就是到了 10亿规模的训练集的样本,这些算法的性能也都对应地增强了。

事实上,如果选择任意一个算法,可能是选择了一个"劣等的"算法,如果给这个劣等算法更多的数据,那么从这些例子中看起来的话,它看上去很有可能会其他算法更好,甚至会比"优等算法"更好。像这样的结果,引起了一种在机器学习中的普遍共识:“取得成功的人不是拥有最好算法的人,而是拥有最多数据的人”。

另一种考虑这个问题的角度是为了有一个高性能的学习算法,希望它不要有高的偏差和方差。因此偏差问题,将通过确保有一个具有很多参数的学习算法来解决,以便能够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。
[Machine Learning] 机器学习系统的设计(Machine Learning System Design)
在此没有方差问题,这算法将没有方差,并且通过将这两个值放在一起,最终可以得到一个低误差和低方差的学习算法,能够很好地测试测试数据集。从根本上来说,这是一个关键的假设:特征值有足够的信息量,且有一类很好的函数,这是为什么能保证低误差的关键所在。它有大量的训练数据集,这能保证得到更多的方差值,因此这提出了一些可能的条件,如果你有大量的数据,而且你训练了一种带有很多参数的学习算法,那么这将会是一个很好的方式,来提供一个高性能的学习算法。