机器学习是一种利用计算机程序来实现自我学习的技术。可能你会觉得这个概念太过基础,但耐心听下去,下面将为你揭示一些深层次的内容。谈到机器学习,不得不提的是汤姆·米歇尔(Tom M. Mitchell),正如谈论音乐离不开贝多芬,讨论篮球必然提到迈克尔·乔丹,提及电影则绕不开莱昂纳多·迪卡普里奥。米歇尔对机器学习的定义如下:
“如果一个计算机程序通过经验[E]在任务[T]中的表现[P]有所提升,那么我们可以说这个程序通过经验[E]进行了学习。”
这个定义虽然有些抽象,但其实质在于计算机程序如何通过经验来优化自身性能。在这个定义中,核心概念包括机器、学习以及经验、任务和性能度量。在计算机系统中,经验通常表现为数据,而机器学习就是通过数据来生成模型的过程,即学习算法。由此引出了两个问题:如何评估模型的效果?如何在缺乏未见过的数据情况下评估模型?
这些问题激发了进一步探索的兴趣。接下来的章节将从数据、任务和性能度量三个方面介绍机器学习的基本概念,即使你不懂算法也能理解这些内容。
在任何模型中,“垃圾进,垃圾出”的原则始终适用。如果数据不具备代表性、质量低下或不干净,那么任何建模工作都将徒劳无功。因此,首要任务是处理数据,而不是急于建模。处理数据是一项复杂的工作,将在后续的《数据科学》专题中详细介绍。在《机器学习》领域,我们主要关注算法,因此假设数据具有代表性且质量较高。
举例来说,如果我们收集了勒布朗·詹姆斯过去四场比赛的数据,如下所示:
```
27 | 10 | 12 29 | 12 | 10 30 | 11 | 9 32 | 13 | 11 ```
根据Hadley Wickham在2014年《Tidy Data》一文中的定义,干净数据意味着每一列代表一个变量(例如得分、篮板和助攻),每一行代表一个观察记录(例如[得分=27, 篮板=10, 助攻=12])。上述表格中的数据是干净的。
在深入了解机器学习之前,必须掌握以下术语: - 记录的集合称为“数据集”。 - 每条记录代表一个对象(例如一场比赛中詹姆斯的个人统计)称为“示例”或“样本”。 - 反映对象在某方面的表现或性质(例如得分、篮板、助攻)称为“属性”或“特征”或“输入变量”。 - 属性的取值(例如27, 10, 12)称为“属性值”。
假设我们要研究的问题是詹姆斯的得分、篮板和助攻如何影响骑士队的胜负。我们可以增加一列数据来标记比赛结果,如下所示:
```
27 | 10 | 12 | 赢 29 | 12 | 10 | 输 30 | 11 | 9 | 输 32 | 13 | 11 | 赢 ```
这样可以更清晰地看出詹姆斯的助攻达到一定水平时,球队更容易获胜。这种直觉需要通过模型来验证,例如我们需要知道詹姆斯的得分、篮板和助攻的具体数值与胜负的关系。
接下来是数学符号的定义,为了统一符号,将在后续讨论中使用本节定义的符号。如果你现在不想看,可以跳过这部分,以后需要时再查阅。
通常用 ( X ) 表示包含 ( m ) 个示例的输入变量,每个示例由 ( d ) 个属性描述(例如詹姆斯的个人统计用了3个属性)。每个示例 ( xi ) 是一个 ( d ) 维向量,其中 ( x{ij} ) 是示例 ( xi ) 在第 ( j ) 个属性上的取值(例如詹姆斯第3场比赛在第2个属性上的值是10),而 ( yi ) 是示例 ( xi ) 的标记。一般用 ( (xi, yi) ) 表示第 ( i ) 个示例,而 ( {(xi, y_i); i = 1, 2, ..., m} ) 表示训练集。
根据训练数据是否包含标记,学习任务可分为两大类:监督学习(有标记)和无监督学习(无标记)。还有一种是强化学习(有评级标记)。我们首先关注前两类。
在监督学习中,数据集包含输入变量和标记,主要任务是预测和分类。以詹姆斯为例: - 如果我们预测的是离散值(例如赢或输),这类学习任务称为“分类”。 - 如果我们预测的是连续值(例如詹姆斯的效率65.1, 70.3等),这类学习任务称为“回归”。
在分类任务中: - 涉及两个类别的称为“二分类”任务。 - 涉及多个类别的称为“多分类”任务。
在无监督学习中,数据集包含输入变量但不包含标记,主要任务是发现模式。除了根据詹姆斯的个人统计来预测骑士队的胜负或他的效率值,我们还可以进行“聚类”,即将训练集中的数据分成若干组,每组称为“簇”。例如,生成了以下四个簇: - 最佳防守阵容 - 不是得分王,也不是最有价值球员 - 不是最佳防守阵容,是得分王,但不是最有价值球员 - 是最佳防守阵容,也是得分王,也是最有价值球员
聚类的一个用途是找出詹姆斯在某些情况下的潜在原因,例如为什么他在某些情况下不是最有价值球员。
评估模型不仅需要有效的实验方法,还需要衡量模型泛化能力的标准,即性能度量。性能度量与任务相关。接下来我们将通过回归和分类任务,以及聚类任务,给出相应的性能度量。
在回归任务中,给定训练数据集,要评估模型 ( h ) 的性能,需将模型预测结果 ( h(x) ) 与实际标记 ( y ) 进行比较。回归任务中最常用的性能度量是“均方误差”(MSE)。
精度和错误率
通常,将分类错误的样本数占样本总数的比例称为“错误率”,分类正确的样本数占样本总数的比例称为“精度”。如果有 ( m ) 个样本,其中 ( a ) 个样本分类错误,则错误率为 ( a/m ),精度为 ( 1 - a/m )。
查准率和查全率
虽然错误率和精度常用,但无法满足所有任务需求。以詹姆斯的成绩为例,如果用训练好的模型预测骑士队的胜负,错误率衡量的是实际赢的比赛被误判为输的概率。但如果关心的是预测出的比赛中有多少是赢球,或赢球的比赛中有多少被预测出来,就需要使用“查准率”和“查全率”。
对于二分类任务,可将样例根据其真实类别与模型预测类别的组合划分为真正例(TP)、真反例(TN)、假正例(FP)和假反例(FN)。查准率 ( P ) 和查全率 ( R ) 定义如下:
[ P = frac{TP}{TP + FP} ] [ R = frac{TP}{TP + FN} ]
查准率和查全率是一对矛盾的度量。通常: - 查准率高时,查全率较低 - 查全率高时,查准率较低
例如,在三国杀游戏中,作为主公想要杀死反贼而不误杀奸臣,可以选择最可靠的手段,这样查准率高而查全率低;或者选择尽可能多地杀掉所有人,这样查全率高而查准率低。在一些简单任务或作弊情况下,查准率和查全率都可以很高。
F1度量
F1度量是基于查准率和查全率的调和平均定义的:
[ F1 = 2 times frac{P times R}{P + R} ]
F1度量的一个缺点是对查准率和查全率的重视程度相同,但在实际机器学习任务中,我们通常会对查准率和查全率有不同的重视程度。例如: - 在亚马逊推荐商品时,更希望推荐内容是用户感兴趣的,因此查准率更重要。 - 在FBI追逃犯时,更希望尽量避免漏掉逃犯,因此查全率更重要。 - 在癌症诊断时,查准率和查全率都很重要,但查准率可能更为关键。
为了区分不同重视程度,我们引入F1度量的一个通用形式Fβ:
[ F_beta = frac{(1+beta^2) times P times R}{beta^2 times P + R} ]
其中,β度量了查准率和查全率的相对重要性。当β=1时,Fβ退化为F1;当β>1时,查全率有更大影响;当0<β<1时,查准率有更大影响。
聚类任务是将数据集划分为若干互不相交的子集,即簇。理想的聚类结果应使同一簇内的样本尽可能相似,而不同簇间的样本尽可能不同。换言之,聚类结果的“簇内相似度”要高,而“簇外相似度”要低。
聚类的性能度量有两种: - 外部指标:将聚类结果与参考模型比较,如Jaccard系数、FM指数和Rand指数。 - 内部指标:直接考察聚类结果,如DB指数和Dunn指数。
在相似度计算中,通常使用两种距离度量:欧氏距离和余弦相似度。欧式距离计算的是未单位化的距离,而余弦相似度计算的是单位化的相似度。单位化有其优点和缺点,例如使用欧式距离可能无法将一篇文章和其内容完全相同的另一篇文章归为一类,而使用余弦相似度可能将一篇长文章和一条短微博归为一类。