机器学习:软件工程方法与实现
上QQ阅读APP看书,第一时间看更新

1.1.2 机器学习类别与范式

关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:

对于某类任务T和性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习。

该定义没有突出人类进行机器学习的目的——决策,即机器学习是计算机根据数据做出或改进预测或行为的方法。但总体来说,机器学习的任务就是围绕T、P、E展开的,下面将进一步拆解T、P、E。下文中有算法、模型、学习器混用的现象,有时表达的是同一个意思,有时依据上下文会有细微的区别。

1.经验E

“经验”一词较为抽象,既可以是文字、图形,也可以是当面交流的对话等,属于知识的范畴。对于机器学习而言,经验必须表示为计算机可以处理的形式——数据,按照更贴近计算机底层的说法是,计算机可直接计算的数值,这也是最终进入算法中的形式(向量运算、矩阵运算等)。正因如此,机器学习中涉及大量的数据处理活动:将文字和字符编码为数值、将图像进行数值化处理等,然后进入算法学习。机器学习中所有数据处理的原则可归结为两条:适合计算机处理和便于机器学习算法学习。

扩展数据的上下游将产生大量与数据相关的活动,如数据获取、数据存储、数据ETL等,与之对应的是不同的数据行业或技术领域。4.1.2节会简要讲述常见数据源中数据的获取方式。

我们一般会将数据表示为如表1-1所示的二维表,并适当调整原始数据[1]

表1-1 示例数据

表中所有的数据可称为样本(sample),表中的每一行称为样例或实例(instance),而每一列(此数据中排除首尾两列)。在机器学习中更常称为特征(feature),在计量经济、统计等学科中更常称为变量(variable)或属性(attribute)。该数据源中instant列仅作标识用,无其他意义;而cnt列为目标(target)列,一般称为标签(label)。

有时人们也称只包含标识(或维度)列和标签列的数据集为样本,样本不包含特征。

从表1-1中可以看出,此处的数据有不同的类型:dteday列是日期型数据(时间序列),fake_1列是数据字符(无序),fake_2列是字符(有序),workingday列是布尔型数据(无序),temp列是常规的浮点数据。不同类型数据的处理方法不同,在第5章会详细介绍。根据具体的机器学习问题,我们有时需要进行特征离散化或连续化处理,在第6章会详细介绍。除此之外,机器学习实践过程中还可能会遇到空间、图片、音频和视频等数据,这些数据也需要特殊处理。

我们将dteday到temp列以X表示,cnt列以y来表示,则机器学习的最终任务可表示为:

y=f(X)

通常来说,y为因变量(dependent variable)或响应变量,X为自变量(Independent Variable)、独立变量、解释变量或预测变量,所有可能的f称为假设空间。按照统计学的概念,我们将上面的表述进一步扩展:将X所有可能构成的集合叫作领域集(domain set),对应的y为标签集(label set)。可获得的数据样本可进一步分为训练集(Train set)、测试集(Test set)和验证集(Validate set)等。顾名思义,训练数据是(某轮)机器学习算法学习的数据,而测试和验证则是度量其训练效果的数据,有时也称为袋外数据(Out Of Bag)。在一些集成算法的执行过程中,以上几种数据划分有时是模糊的或交替的,例如在交叉验证的情况下训练随机森林。在一些具有时间属性的场合,把训练集和测试集时间范围外的、起最终模型估计作用的数据集称为OOT集(Out Of Time set),也称跨时间测试集。第4章将会详细讲述以上概念在实践中的应用。

当数据集中的特征(列)太多时,会引发维度灾难,给机器学习求解带来困难或造成过拟合(训练集上表现好,测试集上表现差),从而导致机器学习在新场景下效果很差。针对这一问题,第8章会详细讲述如何选取对问题有用的特征。当数据集中的特征(列)太少或可能存在更有价值的隐变量时,特征衍生就像机器学习中的一个魔法,对特征交叉组合出新的特征,第7章将详细介绍。在一些特定的建模场景里,比如在银行和互联网金融领域,评分卡应用历史悠久,其理论研究也非常丰富。笔者认为,构建评分卡的过程中,变量分箱(离散化)是最核心的技术,第6章会着重讲述这些技术及其实现。实际上,树模型本质上也是离散化了特征。

如果我们对数据集进一步研究会发现,数据集的元信息还能传递信息,如数据集的行数和列数、数值列和类别型列的数量、类别值的数量、列空值占比、行空值占比。此外,还有大量的数据统计信息,如最大和最小值、均值和分位数、偏度和峰度、中间绝对偏差(Median Absolute deviation,MAD)等。所有这些信息都是机器学习可处理、可衍生、可转化、可利用、可挖掘的信息。

当然,除了上述将经验表示为数据的形式外,经验自然还包括人们对问题的看法和见解,它们指导机器学习的过程,包括填充空值、选择特征、选择算法、调整算法参数、选择和评判最终模型。这是机器学习的现状——需要大量人力的参与,机器本身智能有限(狭义的人工智能)。总之,机器学习中经验E的本质是进行知识和经验的表示和表达,进而在计算机世界里传承。

最后需要注意,经验有效的前提条件是:我们获得的数据来自真实世界的缩影,同时训练数据和未来或未见的数据在相同的特征空间里且具有相同、相近或相关的分布。也就是说,如果现有的数据和经验在某种程度上具有普适性,可应用在未来或当前类似的场景,则经验有用。经验和知识的质量(正确性、完整性)将直接影响学习的结果。

数据的形式决定了任务T和性能P的形式,下面来一一介绍。

2.任务T

延续对数据形式的分析,我们根据数据是否有标签列,引出新的概念:有监督学习、无监督学习、半监督学习和强化学习(主动学习或弱监督学习)。

1)有监督学习(Supervised Learning):有监督学习的数据集中有标签列,由标签列“监督”学习。学习的成果是将数据拟合成函数或逼近的函数。有监督学习是最常见也是应用最广泛的一类机器学习任务。

2)无监督学习(Unsupervised Learning):无监督学习的数据集中没有标签(没有标签的原因可能是人工标注成本太高,或由于缺少先验知识)。无监督学习的目的往往是发现某种关系、关联规则,没有显式定义目标函数。比如聚类,聚类的目的是把相似的东西聚集在一起,而不关心聚集的类别是什么,常用的算法有K-means、K-medoids等。

3)半监督学习(Semi-Supervised Learning):顾名思义,半监督学习的数据集中部分有标签,部分无标签。这种现象往往是数据获取现实的无奈,例如,现实情况下(成本或时间限制)只能获取到一部分有标签的数据,还有较多的无标签数据。此时为了尽可能多地利用数据,我们需要将部分无标签的数据由某种方法打上伪标签,然后进行学习。在风控领域,信用风险模型中的拒绝演绎就属于这种情况,感兴趣的读者可以参考相关的资料。只有在现实严峻的情况下,才会考虑半监督学习。

4)强化学习(Reinforcement Learning):强化学习中的智能体(Agent)以“试错”的方式进行学习,以通过与环境进行交互获得的奖赏指导行为,具有主动学习的特点,目标是使智能体获得最大的奖赏(预期利益)。强化学习中没有明确的y,取而代之的是奖励信号(奖赏)。这种奖励信号不像有监督学习中的标签那样直接和确切,属于弱监督学习的问题。强化学习常常用于机器人智能对话、智能问答、自动驾驶等。

进一步地,在有监督学习中,根据y变量连续或离散的属性可将任务分为分类问题和回归问题:当y变量是连续变量时为回归问题,比如预测房价;当y变量是离散型变量时为分类问题,比如预测好与坏。更进一步,根据y取值的唯一值个数不同,可将任务分为二分类和多分类。根据分类问题的y是否有序,可进一步分为排序问题和非排序问题。多分类可看作二分类的衍生或组合,二分类是该类学习问题的基础结构,所以书中主要以二分类为示例讲解。二分类中y取值的常见表示形式有(0,1)、(-1,+1)、(好,坏)、(正,负)。在实际操作中,我们一般会将其编码为适合算法处理的(0,1)形式(数据转换的内容参见第6章)。

本书讲述的核心机器学习任务为有监督学习。

在分类问题中,y变量取值可能会失衡,例如100个值中只有1个取值为1,其他取值为0。这属于机器学习中不平衡样本的例子,常见于反欺诈和广告点击预估等场景。这类型的样本会对算法学习造成困难,需要使用不均衡样本的处理技术。

实际上,机器学习任务从不同的维度有不同且丰富的分类方式,足以扰乱初学者的视线。为此,我们再从另外的视角对机器学习任务进行梳理。

1)生成模型和判别模型:有监督学习方法可以按模型的两种产生方式——生成方式和判别方式相应得到生成模型和判别模型。生成方式中,对数据的潜在分布做出假设(比如各个特征之间条件独立),然后估计模型参数生成模型。应用于分类问题时,算法学习数据中的联合概率分布为P(x,y),然后求出条件概率分布作为判断结果,比如常见的朴素贝叶斯法。判别方式的学习方法是一种与数据分布无关的学习框架,并不需要对数据的分布做出任何假设,也无须刻画数据的潜在分布,而是直接对目标函数进行优化。在一般的分类器中,判别式函数和后验概率P(y|x)是对应的,所以判别式函数最大化同时也是后验概率最大化。判别式在机器学习算法中很常见,包括逻辑回归、决策树、支持向量机、提升方法等。

2)主动学习和被动学习:前面在介绍强化学习时提到了主动学习(如主动提出样本标注建议),与主动学习对应的是被动学习。被动学习中的算法只能观察静态的信息和数据而不能影响、引导和改变它。

3)积极学习和消极学习:积极学习指的是算法在训练阶段学习到了数据中的规则或模式,在模型预测时只需要使用学得的规则或模式直接决策。积极学习是最常用的机器学习算法。与之相反,消极学习并未在经验数据上学得通用化的模式,而是简单地将训练样本存储起来,当有新的实例到来时,直接计算新实例与训练数据之间的关系,并据此作出决策,这种方式也称为基于实例的学习。很明显这种方式需要存储训练样本,模型文件的大小将比积极学习的模型大很多。最近邻(k-Nearest Neighbor,kNN)算法就是如此。注意,支持向量机(SVM)模型虽然也存储部分样例,但与消极学习有本质区别。

4)在线学习和离线学习:在线学习亦称为增量学习,指的是随着数据的持续增加,算法具有动态改进以适应新环境的能力,同时保留对历史的记忆。在大数据时代,在线学习大大降低了学习算法的空间复杂度和时间复杂度,实时性强,但对系统和工程环境要求严苛,且稳定性值得考量。与之相对的是我们所常见的离线学习,即所有的训练数据预先给定,当环境变化时需要重构或重建模型,以保持对环境的跟进。

5)迁移学习:在对环境进行跟进的问题上,迁移学习是另一个研究方向。数据本质上有随时间迁移的可能性,迁移学习旨在成为当数据不在同一个特征空间或同一分布,且获取新训练数据困难时采取的一种新的学习框架。

6)线性模型和非线性模型:按照几何复杂度来看,线性模型较为简单,非线性模型较为复杂,非线性模型一般能更好地拟合数据。常见的线性模型有线性回归或逻辑回归、线性的支持向量机(使用核函数将非线性转化为线性)、神经网络基础结构感知器;非线性模型包括基于树的模型,比如决策树、随机森林、多层或深层神经网络等。本书会介绍经典的线性模型和非线性模型,可参见第9章和第10章。

7)黑盒模型和白盒模型:从可解释性上描述模型,白盒模型可解释性强,易于理解机器学习做出决策的缘由,比如线性回归模型,变量前的系数决定了该变量对结果的影响程度;反之为黑盒模型,人们不能直白地理解模型内部是如何做出决策的,比如深层神经网络。由于线性关系易于理解,很多解释性的方法将模型转化为局部的线性关系或边缘分布来观察变量与目标变量的关系。第14章将详细讲述模型解释的理论、方法和工具。

以上各种机器学习任务的知识点在本书中并不能全面覆盖,之所以从各个维度将机器学习任务进行分类,主要是期望让读者形成对机器学习的整体认识,不至于在遇到新名词时产生过多困扰。本书只选取了部分机器学习技术进行讲述,着重描述有监督的、线性和非线性的、判别式的、离线批量的、被动的、二分类的统计机器学习。

3.性能P

此处的性能指的是学习任务通过数据学得的模型表现的优劣程度,也是有监督学习任务的评判方式(无监督学习无法直接评判),以此作为模型评价和模型选择的依据。

性能评判过程既可能发生在模型训练阶段,也可能发生在模型训练后的模型选择阶段。对于不同的任务,模型性能的评价指标也不同;而对于相同的任务,评价指标也有多种,甚至对于数据特性不同的任务,也可以选择特定的评价指标以关注特定的点,例如模型在不平衡样本中可以选用PRC(Precision Recall Curve)作为一个评价指标。本质上,评价指标度量了模型预测和真实之间的差异。

在实践过程中模型性能的评估主要包括3个步骤:确定要进行衡量或比较的数据集,在确定后的数据集上使用模型进行预测或判别,选取适合问题的指标进行评价。

1)确定数据集:一般我们在测试集上查看模型的表现,然而在项目实践中,更为全面和保险的做法是查看所有已划分数据集上模型的表现,以纵观全局。例如,数据划分为训练集和测试集,那么建议看两个数据集上的表现。而在带时间属性的数据集上,除了查看训练、测试数据集外,重点需要查看OOT集上的模型表现,以预估未来一段时间里模型性能的表现趋势。如果各数据集上模型表现差异很大,那么我们有理由怀疑模型过拟合或数据发生了迁移。

2)模型预测或判别:使用模型在上述已确定的数据集上进行预测或判别,得到模型在各数据集上的表现。

3)评价指标:评价指标繁多,一般以统计量(标量)的简洁形式表示。以回归和分类问题为例。回归包括均方误差(Mean Squared Error,MSE)、均方根误差(Root Mean Squared Error,RMSE)、平均绝对百分比误差(Mean Absolute Percent Error,MAPE)、R-Squared等。二分类中的混淆矩阵是很多评价指标的基础,以矩阵形式表示,常见的衍生指标有AUC(Area Under the Curve)、准确率Accuracy、精确率Precision、召回率Recall和F1等。KS(Kolmogorov-Smirnov)也是常用的模型区分能力指标。除了关注统计量的指标,我们也关注模型表现的曲线,它们能更细致地展现模型在不同区域的表现力,包括ROC(Receiver Operating Characteristic,受试者工作特征曲线)、PRC、Lift、Gains等。在多分类的评价指标中不能使用AUC等,一般展现混淆矩阵和使用F1的变体,包括F1-Macro、F1-Micro等。

需要注意的是,有的指标值(如单位量纲)具有特定的含义,不能在模型间进行比较;有的指标(如AUC)则具有普适的特性,能在模型间比较以为模型选择提供决策参考。在项目实践中,单一的评价指标可能有失偏颇,我们在重点关注一个指标的同时也要关注其他维度。可以根据业务场景,重点关注高分段模型的区分能力或者建立适合场景的指标体系,进行综合决断。有时评价指标的选取反映了建模人员的综合能力(比如看问题的角度),那些能够依据机器学习项目的特殊情况,自定义评价指标的人员更加出色。

在机器学习得到具体的评价指标后,项目实践还远未结束,还需要解决如何确定阈值、是否进一步对指标进行处理等问题,既要有行业经验、业务场景,还要有人的主观意识参与其中。

评价指标本质是“度量了预测和真实之间的差异”,理论上来说评价指标也可作为模型训练过程中的损失函数,比如在回归问题中,MSE既可作为评价指标,又可作为损失函数。但作为损失函数,除了要求能表征模型预测和真实的差异关系外,还要求具有良好的数学性质(连续可导等)。更详细的介绍可参考第4章的讲解。

4.学习理论

考虑一下更深层次的问题:机器学习有哪些学习范式?为什么可学习?学习的收敛性如何?结果是否值得推敲、是否可信?要回答这些问题,首先需要掌握机器学习理论和计算理论等背景知识。本书虽不属于讲解机器学习理论的专著,但从完整性考虑,下文将通俗地阐述部分核心概念及其相互联系。

算法或学习器学习数据,获得可接受的模型性能,即完成了机器学习训练的过程。实际上这个学习过程很困难:首先,我们获得的样本并不能完全代表真实的世界,抑或样本中存在大量的噪声甚至错误;其次,我们不清楚目标函数f真实的样子,导致学习器也无法获知真实误差。退而求其次,我们只能使用训练误差,使用某种度量指标(损失函数)寻找一个最小化训练误差的预测器。这个学习范式称为经验风险(亦称为经验误差)最小化(Empirical Risk Minimization,ERM),常见的ERM有最小二乘法和极大似然估计。按照ERM寻找最优模型即求解式(1-1)的最优化问题:

其中F是假设空间,L表示真实值和预测值某种度量损失的函数。

当样本容量足够大时,ERM学习准则往往能取到很好的效果;但是当样本量不足时,ERM学习很容易导致过拟合。毕竟,ERM目标只寻求经验风险最小,这既是ERM的优点也是它的局限性。很明显,在有限的样本下,一旦设定学习目标就有过拟合的风险。为了尽量避免过拟合,策略是限制假设空间(所有预测器的集合)的大小,如图1-2所示。

图1-2中各图形解释如下。

·虚线椭圆代表数据,其中大的为分布总体,小的为获得的有限学习样本。

·实线椭圆代表假设空间,其中最小的实线椭圆(中间)几乎刚好包含小的虚线椭圆,左侧的实线椭圆包含了小的虚线椭圆和学习样本外的一部分总体,右侧的最大实线椭圆除了包含学习样本还覆盖了大部分的总体。

图1-2 样本与假设空间

由上述示例可以看出,最小的实线椭圆(中间)虽然在学习样本上表现很好,但几乎没有泛化能力,左侧的实线椭圆则具有一定的泛化能力,右侧的实线椭圆泛化能力最强。我们将与学习样本上一致的假设集合称为版本空间(Version Space),用实线椭圆表示。

如何从多个空间中做选择呢?一种方式是使用归纳偏置(inductive bias,也称归纳偏好)。当采取某归纳偏置时,实际的效果是压缩了可能导致过拟合的搜索空间。把图1-2转化为更直观的曲线拟合,如图1-3所示。

图1-3 过相同4点的3条曲线

我们的潜意识可能会选择更为平滑的、实线表示的二次曲线。基于这样一个直观的猜想:图中展现的高次曲线(虚线)在4个点处的导数较大(X轴上微小的变化会导致较大的波动),直观上更陡,不符合“相近的点有相近的输出”的直觉。奥卡姆剃刀(Occam’s razor)正是这一判断的经验法则:若有多个假设与观察一致,选择最简单的那个。奥卡姆剃刀原则是自然科学研究中常用的方法。然而,现实情况复杂,并不容易做出简单的选择,因为简单本身也需要衡量。在实践的算法和模型选择过程中,我们往往凭借经验选择偏向解决问题的学习器。例如,当某二分类问题可能是线性可分的,那么凭借经验,选择线性分类器而不是神经网络。

学习器的偏好是其固有属性。偏好有强有弱,比如线性分类器只支持线性决策面,不适合其他决策类型,我们把它称为强偏好;而神经网络则几乎可拟合任何决策面,其偏好很弱;同样,高阶多项式偏好也很弱。算法的表达、搜索策略等造就了学习器的偏好,例如贪婪搜索使用信息熵筛选特征。

学习器偏好的强弱并不是决定是否选择它的依据。如果一种偏好能解决当前任务,那么它就是合适的。这一实践法则在机器学习领域中以“没有免费的午餐”(No Free Lunch,NFL)定理来描述。这一定理告诉我们,没有一种学习器适用于所有情况,任何学习器总会遇到表现很差的情况,特定的场景有相应的优选学习器。

即使这样,选择某类偏好学习器,假设空间依然很大,例如限定使用某个具体的学习算法,其参数空间依然复杂。为了进一步限制假设空间复杂度,学者们提出了结构风险最小化(Structural Risk Minimization,SRM)范式,其具体实现为正则损失最小化(Regularized Loss Minimization,RLM)。该最优化问题由式(1-1)后加入正则项表示,见式(1-2),正则项作为算法的“稳定剂”。

其中J(f)表示模型的复杂度,前面的系数λ用于权衡经验风险和结构风险。

另外,常见的降低模型复杂度的方法有树剪枝算法、神经网络中的dropout和提前终止等。

当我们在假设空间上权衡经验风险和结构风险时,模型效果表现为偏差和方差的权衡(Bias-Variance Tradeoff)。

如何衡量模型的复杂度呢?VC维理论阐明了假设空间能打散或区分的最大样本数,该理论由Vladimir Vapnik与Alexey Chervonenkis(合称VC)提出。打散的直观解释为:在二维空间下的3个点,不论如何将正负标签分配给样本,线性分类器(直线)能打散任何不共线的3个数据点;当数据点增加到4个时,很容易找到一组标签分配的情况使得这4个点不能被直线完全分开。按照VC的定义,在二维空间中线性分类器的VC维等于3。由此可见,VC维表征了分类器的几何属性,反映了假设空间的强大程度。VC维越大,假设空间越“强”——能打散的点越多。比如多项式,其VC维随其阶数按组合级数增长,如果不加限制的决策树,其VC维可以无穷大。

VC维越高的强假设空间所需的样本数增长越快,甚至会大到不切实际。这正是NFL定理所述的情形之一,此时又回到如何做权衡的问题上。

从VC维的角度来看,假设空间中加入正则项后,VC维将减小。实践中不同的学习器有不同的衡量和表示复杂度的方式,比如在决策树中,可将树的深度作为模型复杂度的衡量指标,回归模型中可将自由度作为指标。

笔者认为VC维的实践指导意义是:当样本量较小时选择较简单的模型,比如压缩特征,在分类问题上进行逻辑回归;当选择复杂度高的学习器时,则要求有相应数据量的支撑。

通过上述描述可知,机器学习难以达到完美,仅仅是求解任务的近似。如果一个学习器的错误率能控制在某常数ε范围内,ε可任意小,且学习时间可控(最多以多项式方式增长),那么认为学习器是成功的且具有实践价值。学者们将以上学习过程归纳成一般的学习框架——概率近似正确(Probably Approximately Correct,PAC),它使得量化学习能力成为可能。PAC定理阐明了ERM准则和RLM是概率近似正确可学习的,同时在理论上说明了什么样的条件下可学习较好的模型、满足一定预设误差情况下学习所需要的样本量、如何进行有效学习与一致学习等理论问题。这部分内容回答了笔者初学机器学习时的困惑:在不确定的数据集上进行精确计算是否有意义。

机器学习的过程很困难,许多不确定性夹杂其中。我们无法躲避做权衡的“艰难”处境:如何选择分类器,选择的偏好是否正确,选择多大的正则,如何调优算法参数。这些问题在理论上并没有完美的答案。实践过程中,我们凭借经验,多次选择,多次调优,多维度测评模型效果。正因如此,笔者一直认为机器学习是一门实验学科,机器学习工程师除了必要的机器学习基础知识,还应具备做实验的工程和探索能力,这种能力是区分理论者和实践者、普通实践者和优秀实践者的有效方法。(详细介绍参见1.3节。)最后,将以上主要概念关系表示如图1-4所示。

图1-4 误差、风险、复杂度和VC维的关系

以上是从理论层面的概括性描述,实为学习理论的冰山一角,感兴趣的读者可继续阅读更深入的资料。其他有关机器学习实践中会接触到的概念(如损失函数等)可参见第4章。

[1] http://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset