第2章 监督学习 1

监督学习是最常用也是最成功的机器学习类型之奥一。本章将会详细介绍监督学习,并解释几种常用的监督学习算法。
记住,每当想要根据给定输入预测某个结果,并且还有输入/输出对的示例时,都应该使用监督学习。这些输入/输出对构成了训练集,我们利用它来构建机器学习模型。我们的目标是对从未见过的新数据做出准确预测。监督学习通常需要人力来构建训练集,但之后的任务本来非常费力甚至无法完成,现在却可以自动完成,通常速度也更快。

2.1 分类与回归

监督机器学习问题主要有两种,分别叫作分类(classification)与回归(regression)。
分类问题的目标是预测类别标签(class label),这些标签来自预定义的可选列表。分类问题有时可分为二分类(binary classification,在两个类别之间进行区分的一种特殊情况)和多分类(multiclass classification,在两个以上的类别之间进行区分)。你可以将二分类看作是尝试回答一道是/否问题。将电子邮件分为垃圾邮件和非垃圾邮件就是二分类问题的实例。在这个二分类任务中,要问的是/否问题为:“这封电子邮件是垃圾邮件吗?”
在二分类问题中,我们通常将其中一个类别称为正类(positive class),另一个类别称为反类(negative class)。这里的“正”并不代表好的方面或正数,而是代表研究对象。因此在寻找垃圾邮件时,“正”可能指的是垃圾邮件这一类别。将两个类别中的哪一个作为“正类”,往往是主观判断,与具体的领域有关。
另一方面,鸢尾花的例子则属于多分类问题。另一个多分类的例子是根据网站的文本预测网站所用的语言。这里的类别就是预定义的语言类别。
回归任务的目标是预测一个连续值,编程术语叫作浮点数(floating-point number),数学术语叫作实数(real number)。根据教育水平、年龄和居住地来预测一个人的年收入,这就是回归的一个例子。在预测收入时,预测值是一个金额(amount),可以在给定范围内任意取值。回归任务的另一个例子是,根据上一年的产量、天气和农场员工数等属性来预测玉米农场的产量。同样,产量也可以取任意数值。
区分分类任务和回归任务有一个简单方法,就是问一个问题:输出是否具有某种连续性。如果在可能的结果之间具有连续性,那么它就是一个回归问题。想想预测年收入的例子。输出具有非常明显的连续性。一年40000美元还是40001美元并没有实质差别,即使两者金额不同。如果我们的算法在本应预测40000美元时的预测结果是39999美元或40001美元,不必过分在意。
与此相反,对于识别网站语言的任务(这是一个分类问题)来说,并不存在程度问题。网站使用的要么是这种语言,要么是那种语言。在语言之间不存在连续性,在英语和法语之间不存在其他语言。

2.2 泛化、过拟合与欠拟合

在监督学习中,我们想要在训练数据上构建模型,然后能够对没见过的新数据(这些新数据与训练集具有相同的特性)做出准确预测。如果一个模型能够对没见过的数据做出准确预测,我们就说它能够从训练集泛化(generalize)到预测集。我们想要构建一个泛化精度尽可能高的模型。
通常来说,我们构建模型,使其在训练集上能够做出准确预测。如果训练集和测试集足够相似我们预计模型在测试集上也能做出准确预测。不过在某些情况下这一点并不成立。例如,如果我们可以构建非常复杂的模型,那么在训练集上的精度可以想多高就多高。
为了说明这一点,我们来看一个虚构的例子。比如有一个新手数据科学家,已知之前船的买家记录和对买船不感兴趣的顾客记录,想要预测某个顾客是否会买船。目标是向可能购买的人发送促销电子邮件,而不去打扰那些不感兴趣的顾客。
假设我们有顾客记录,如下表所示:

第2章 监督学习 1_第1张图片
顾客数据示例1

第2章 监督学习 1_第2张图片
顾客数据示例2

对数据观察一段时间之后,我们的新手数据科学家发现了以下规律:“如果顾客年龄大于45岁,并且子女少于3个或没有结婚,那么他就想要买船。”如果你问他这个规律的效果如何,我们的数据科学家会回答:“100%准确!”的确,对于表中的数据,这条规律完全正确。我们还可以发现好多规律,都可以完美解释这个数据集的某人是否想要买船。数据中的年龄都没有重复,因此我们可以这样说:66、52、53和58岁的人想要买船,而其他年龄的人都不想买。虽然我们可以编出许多条适用于这个数据集的规律,但要记住,我们感兴趣的并不是对个数据集进行预测,我们已经知道这些顾客的答案。我们想知道 新顾客是否可能会买船。因此,我们想要找到一条适用于新顾客的规律,而在训练集上实现100%的精度对此并没有帮助。我们可能认为数据科学家发现的规律无法适用于新顾客。它看起来过于复杂,而且只有很好的数据支持。例如,规律里“或没有离婚”这一条对应的只有一名顾客。
判断一个算法在新数据上表现好坏的唯一度量,就是在测试集上的评估。然而从直觉上看,我们认为简单的模型对新数据的泛化能力更好。如果规律是“年龄大于50岁的人想要买船”,并且这可以解释所有顾客的行为,那么我们将更相信这条规律,而不是与年龄、子女和婚姻状况都有关系的那条规律。因此,我们总想找到最简单的模型。构建一个对现有信息量来说过于复杂的模型,正如我们的新手数据科学家做的那样,这被称为 过拟合(overfitting)。如果你在拟合模型时过分关注训练集的细节,得到了一个在训练集上表现很好、但不能泛化到新数据上的模型,那么久存在过拟合。与之相反,如果你的模型过于简单——比如说,“有房子的人都买船”——那么你可能无法抓住数据的全部内容以及数据中的变化,你的模型甚至在训练集上的表现就很差。选择过于简单的模型被称为 欠拟合(underfitting)。
我们的模型越复杂,在训练数据上的预测结果就越好。但是,如果我们的模型过于复杂,我们开始过多关注训练集中每个单独的数据点,模型就不能很好地泛化到新数据上。
二者之间存在一个最佳位置,可以得到最好的泛化性能。这就是我们想要的模型。
第2章 监督学习 1_第3张图片
模型复杂度与训练精度和测试精度之间的权衡

模型复杂度与数据集大小的关系

需要注意,模型复杂度与训练数据集中输入的变化密切相关:数据集中包含的数据点的变化范围越大,在不发生过拟合的前提下你可以使用的模型就越复杂。通常来说,收集更多的数据点可以有更大的变化范围,所以更大的数据集可以用来构建更复杂的模型。但是,仅复制相同的数据点或收集非常相似的数据是无济于事的。
回到前面卖船的例子,如果我们查看了10000多行的顾客数据,并且所有数据都符合这条规律:“如果顾客年龄大于45岁,并且子女少于3个或没有离婚,那么他就想要买船”,那么我们就更有可能相信这是一条有效的规律,比从上表中仅12行数据得出来的更为可信。
收集更多数据,适当构建更复杂的模型,对监督学习任务往往特别有用。在现实世界中,你往往能够决定收集多少数据,这可能比模型调参更为有效。永远不要低估更多数据的力量!

你可能感兴趣的:(第2章 监督学习 1)