在介绍各种机器学习方法之前,先看看究竟什么是机器学习,什么不是机器学习。机器学习经常被归类为人工智能(artificial intelligence)的子领域,但我觉得这种归类方法存在误导嫌疑。虽然对机器学习的研究确实是源自人工智能领域,但是机器学习的方法却应用于数据科学领域,因此我认为把机器学习看作是一种数学建模更合适。
机器学习的本质就是借助数学模型理解数据。当我们给模型装上可以适应观测数据的可调参数时,“学习”就开始了;此时的程序被认为具有从数据中“学习”的能力。一旦模型可以拟合旧的观测数据,那么它们就可以预测并解释新的观测数据。在后面的内容中,我会分享一些关于这种数学方法的哲学闲话,你会发现数学模型的“学习”过程其实与人脑的“学习”过程相似。
由于理解机器学习问题的类型对于有效使用各种机器学习工具至关重要,因此首先介绍关
于机器学习方法的若干分类。
5.1.1 机器学习的分类
机器学习一般可以分为两类:有监督学习(supervised learning)和无监督学习(unsupervised learning)。
有监督学习是指对数据的若干特征与若干标签(类型)之间的关联性进行建模的过程;只要模型被确定,就可以应用到新的未知数据上。这类学习过程可以进一步分为分类(classification)任务与回归(regression)任务。在分类任务中,标签都是离散值;而在回归任务中,标签都是连续值。我们会在后面的内容中介绍这两种有监督学习方法。
无监督学习是指对不带任何标签的数据特征进行建模,通常被看成是一种“让数据自己介绍自己”的过程。这类模型包括聚类(clustering)任务和降维(dimensionality reduction)任务。聚类算法可以将数据分成不同的组别,而降维算法追求用更简洁的方式表现数据。
我们同样会在后面的内容中介绍这两种无监督学习方法。另外,还有一种半监督学习(semi-supervised learning)方法,介于有监督学习与无监督学习之间。半监督学习方法通常可以在数据标签不完整时使用。
5.1.2 机器学习应用的定性示例
下面来介绍一些简单的机器学习任务示例,让这些抽象理论显得更具体一点。这些例子都是我们在后面内容中将要看到的机器学习任务的直观、非量化形式,之后将更深入地介绍相关模型的具体用法。如果想尽早了解这些技术的更多细节,那么请参见在线附录(https://github.com/jakevdp/PythonDataScienceHandbook)中生成下面各个示例中彩图的 Python 代码。
1. 分类: 预测离散标签
先来看一个简单的分类任务。假如我们有一些带标签的数据点,希望用这些信息为那些不带标签的数据点进行分类。
假如这些数据点的分布如图 5-1 所示(生成这幅图和本节中的其他所有图形的代码都在GitHub 的在线附录中)。
我们看到的是二维数据,也就是说每个数据点都有两个特征,在平面上用数据点的 (x, y)位置表示。另外,我们的数据点还用一种颜色表示一个类型标签,一共有两种类型,分别用两种颜色表示。我们想根据这些特征和标签创建一个模型,帮助我们判断新的数据点是“蓝色”还是“红色”。
图 5-1:简单的分类学习数据集(缺图片链接)
虽然有许多可以解决分类任务的模型,但是这里还是先用最简单的一种。假设平面上有一条可以将两种类型分开的直线,直线的两侧分别是一种类型。那么,我们的模型其实就是“一条可以分类的直线”,而模型参数其实就是直线位置与方向的数值。这些模型参数的最优解都可以通过学习数据获得(也就是机器学习的“学习”),这个过程通常被称为训练模型。
图 5-2 是为这组数据分类而训练的模型。
图 5-2:简单的分类模型(缺图片链接)
模型现在已经训练好了,可以对一个新的、不带标签的数据进行分类了。也就是说,我们可以拿一组新数据,把这个模型的直线画在上面,然后根据这个模型为新数据分配标签。这个阶段通常被称为预测,如图 5-3 所示。
图 5-3:对新数据应用分类模型(缺图片链接)
这就是机器学习中最基本的分类思想,这个“分类”指的是数据具有离散的类型标签。刚一开始,你可能会觉得分类非常简单:不就是直接观察数据,然后画一条分割线就可以了。但是,机器学习方法的真正用途是要解决大型高维度数据集的分类问题。
以常见的分类任务——垃圾邮件自动识别为例。在这类任务中,我们通常会获得以下特征与标签。
• 特征 1、 特征 2……特征 n → 垃圾邮件关键词与短语出现的频次归一化向量(“Viagra”、“Nigerian prince”等)。
• 标签 →“垃圾邮件”或“普通邮件”。
在训练数据集中,这些标签可能是人们通过观察少量邮件样本得到的,而剩下的大量邮件都需要通过模型来判断标签。一个训练有素的分类算法只要具备足够好的特征(通常是成千上万个词或短语),就能非常高效地进行分类。 5.5 节将介绍一个文本分类的例子。我们还会详细介绍一些重要的分类算法,包括高斯朴素贝叶斯分类(详情请参见 5.5 节)、支持向量机(详情请参见 5.7 节),以及随机森林分类(详情请参见 5.8 节)。
- 回归: 预测连续标签
下面将要介绍的回归任务与离散标签分类算法相反,其标签是连续值。观察如图 5-4 所示的数据集,所有样本的标签都在一个连续的区间内。和前面的分类示例一样,我们有一个二维数据,每个数据点有两个特征。数据点的颜色表示每个点的连续标签。
图 5-4:一个简单的回归数据集(缺图片链接)
虽然有许多可以处理这类数据的回归模型,但是我们还是用简单线性回归模型来预测数据。用简单线性回归模型作出假设,如果我们把标签看成是第三个维度,那么就可以将数据拟合成一个平面方程——这就是著名的在二维平面上线性拟合问题的高阶情形。
我们可以将数据可视化成图 5-5 的形式。
图 5-5:回归数据的三维视角(缺图片链接)
请注意,这里特征 1 与特征 2 平面与之前的二维图形是一样的,只不过用了颜色和三维坐标轴的位置表示标签。通过这个视角,就有理由相信:如果将三维数据拟合成一个平面,就可以对任何输入参数集进行预测。回到原来的二维投影图形上,拟合平面时获得的结果如图 5-6 所示。
图 5-6:回归模型的结果(缺图片链接)
这个拟合平面为预测新数据点的标签提供了依据。我们可以直观地找到结果,如图 5-7所示。
图 5-7:对新数据应用回归模型(缺图片链接)
和之前介绍的分类示例类似,这个回归示例在低维度时看起来可能也非常简单。但是这些
方法的真实价值在于,它们可以直截了当地处理包含大量特征的数据集。
类似的任务有计算通过天文望远镜观测到的星系的距离——在这类任务中,可能会用到以
下特征与标签。
• 特征 1、 特征 2……特征 n → 具有若干波长或颜色的星系的亮度。
• 标签 → 星系的距离或红移(redshift)。
少量星系的距离可以通过直接观察(通常成本也非常高)进行测量。之后,我们就可以利用适当的回归模型估计其他星系的距离,而不需要为整个星系集合使用昂贵的观察设备。在天文学领域中,这种问题通常被称为“测光红移”(photometric redshift)。
我们还会详细介绍一些重要的回归算法,包括线性回归(详情请参见 5.6 节)、支持向量机(详情请参见 5.7 节),以及随机森林回归(详情请参见 5.8 节)。
- 聚类: 为无标签数据添加标签
前面介绍的回归与分类示例都是有监督学习算法,需要建立一个模型来预测新数据的标签。无监督学习涉及的模型将探索没有任何已知标签的数据。无监督学习的普遍应用之一就是“聚类”——数据被聚类算法自动分成若干离散的组别。
例如,我们有如图 5-8 所示的一组二维数据。
图 5-8:聚类数据(缺图片链接)
仅通过肉眼观察,就可以很清晰地判断出这些点应该归于哪个组。一个聚类模型会根据输入数据的固有结构判断数据点之间的相关性。通过最快、最直观的 k-means 聚类算法(详情请参见 5.11 节),就可以发现如图 5-9 所示的类簇(cluster)。
图 5-9: k-means 聚类模型给出的数据标签(缺图片链接)
k-means 会拟合出一个由 k 个簇中心点构成的模型,最优的簇中心点需要满足簇中的每个点到该中心的总距离最短。显然,在二维平面上用聚类算法显得非常幼稚,但随着数据量越来越大、维度越来越多,聚类算法对于探索数据集的信息会变得十分有效。
我们将在 5.11 节详细介绍 k-means 聚类算法。其他重要的聚类算法还有高斯混合模型(详情请参见 5.12 节)和谱聚类(详情请参考 Scikit-Learn 聚类文档, http://scikit-learn.org/stable/modules/clustering.html)。
- 降维: 推断无标签数据的结构
降维是另一种无监督算法示例,需要从数据集本身的结构推断标签和其他信息。虽然降维比之前看到的示例要抽象一些,但是一般来说,降维其实就是在保证高维数据质量的条件下从中抽取出一个低维数据集。不同的降维算法用不同的方式衡量降维质量, 5.10 节将介绍这些内容。
下面用一个示例进行演示,数据如图 5-10 所示。
图 5-10:降维示例数据(缺图片链接)
从图中可以清晰地看出数据存在某种结构:这些数据点在二维平面上按照一维螺旋线整齐地排列。从某种程度上,你可以说这些数据“本质上”只有一维,虽然这个一维数据是嵌在高维数据空间里的。适合这个示例的降维模型不仅需要满足数据的非线性嵌套结构,而且还要给出低维表现形式。
图 5-11 是通过 Isomap 算法得到的可视化结果,它是一种专门用于解决这类问题的流形学习算法。
图 5-11:降维算法给出的数据标签(缺图片链接)
5.1.3 小结
前面介绍了一些机器学习方法基本类型的示例。虽然我们略过了许多重要的实践细节,但我还是希望这节的内容可以让你对用机器学习方法解决问题的基本思路有所了解。
综上所述,本节介绍的主要有以下内容。
有监督学习
可以训练带标签的数据以预测新数据标签的模型。
分类
可以预测两个或多个离散分类标签的模型。
回归
可以预测连续标签的模型。
无监督学习
识别无标签数据结构的模型。
聚类
检测、识别数据显著组别的模型。
降维
从高维数据中检测、识别低维数据结构的模型。
后面的内容将会深入介绍各个类型的具体算法,并且通过一些有趣的示例说明这些算法的使用场景。
前面内容中的所有图形都是通过真实的机器学习计算实现的。所有图形的生成代码都位于在线文档(http://github.com/jakevdp/PythonDataScienceHandbook)中。