在本章中,我们将介绍5种常见的机器学习算法。它们不但本身非常有效,也常用于构建更复杂的算法。
线性回归(linear regression)是一种流行的回归算法,从样本特征的线性组合(linear combination)中学习模型。
给定一个有标签的样本集,N是总样本数量,xi是每个样本i=1,…,N的D维特征向量。yi是一个实数标签[1],每个特征,j=1,…,D也是一个实数。
我们想要得到一个基于样本特征x的线性组合的模型fw,b(x):
fw,b(x)=wx+b
(1)
fw,b表示f是一个参数化的模型,有w和b两个参数。其中,w是一个维度等于D的向量,b是一个实数。
利用该模型,我们可以对含有未知标签y的样本x进行预测,表示为y←fw,b(x)。在输入样本相同时,两个含有不同参数组(w,b)的模型的预测结果很可能截然不同。学习的目的是找到一组最优参数(w*,b*)。当参数最优时,模型的预测最准确。
细心的读者可能发现式1中定义的线性模型与SVM模型相差无几,只是缺少sign运算。的确,这两个模型非常相似,主要区别在于SVM的超平面是决策边界,用于分隔两类样本。因此,它与两类样本间的距离越远越好。
而另一方面,我们希望线性回归中的超平面离所有训练样本越近越好。图1很直观地解释了这一点。图中呈现了多个一维训练样本(蓝点)和它们的回归线(红线)。利用回归线,我们可以预测新样本xnew的标签ynew。如果样本的特征是D维(D>1),训练得到的线性模型则是一个平面(二维特征向量)或一个超平面(D>2)。
图1 10个一维样本的线性回归
这就是为什么回归模型中的超平面与训练样本越近越好:如果图1中的红线远离代表训练数据的蓝点,预测标签ynew正确的机会就会减少。
为满足回归超平面需要尽量靠近训练样本这一需求,我们通过最小化以下表达式来求最优参数w*和b*:
(2)
在数学中,我们称需要最大化或最小化的表达式为目标函数(objective function),或简称为“目标”。在式2中,(fw,b(xi)-yi)2为损失函数(loss function),用来惩罚一个错误的分类结果。具体来说,式2中用到的是一个方差损失(squared error loss)。所有基于模型的学习算法都有一个损失函数。为了找到最优模型,我们需要将整个目标函数[又称成本函数(cost function)]最小化。线性回归中的成本函数是平均损失,也称为经验风险(empirical risk)。一个模型的平均损失(经验风险)是将其应用于所有训练数据后累积的总损失的平均数。
那么,为什么线性回归的损失是一个二次函数(quadratic function)呢?为什么不用实际值yi与预测值f(xi)之差的绝对值计算惩罚呢?当然可以。我们甚至可以用立方替代损失中的平方运算。
读者可能已经发现,在设计一个机器学习算法时,我们做了许多看起来随意的决定。比如,使用特征的线性回归预测结果。我们同样可以使用平方或其他多项式组合特征。我们也可以选择其他有意义的损失函数,譬如yi与f(xi)差的绝对值和立方损失。同样,使用二元损失(binary loss)(yi和f(xi)的值不相等时为1,否则为0)不也很合理吗?
事实上,一旦我们选择了不同的模型或损失函数,或者用不同的算法来最小化平均损失从而得到最优函数,我们就创造了一个新的机器学习算法。是不是听起来很容易?不过,先别急着发明新算法,因为新的未必更好用。
通常,人们发明新的学习算法有两个目的。
我们选择线性模型的一个现实因素是它比较简单。当一个简单的模型满足需求的时候,何必舍近求远用一个复杂的模型呢?另外一个考虑是,使用线性模型不容易过拟合(overfitting)。一个过拟合的模型可以非常准确地预测训练样本的标签,却容易对新的样本判断错误。
图2中的回归模型是一个过拟合的例子。图中的训练数据(蓝点)与图1中见到的一样。区别在于,这里的回归模型(红线)是一个10元多项式回归(polynomial regression)。回归线对训练样本的预测结果近乎完美。不过,它却对新数据判断完全错误。我们会在第5章中继续讨论过拟合以及如何避免过拟合。
图2 过拟合示意图
现在,我们知道线性模型很有用是因为它不容易过拟合。那么方差呢?为什么我们决定在损失函数里加一个平方?1805年,法国数学家阿德利昂·玛利·勒让德(Adrien⁃Marie Legendre)首次使用平方求和的方法来评价一个模型的质量。他认为在求和之前把误差平方可使运算更方便。为什么这么说呢?绝对值之所以不方便运算的原因是,它的导数不连续,导致整个函数是不平滑的。在优化求解过程中,如果一个函数不平滑,就不能轻易地使用线性代数方法得到闭式解(closed form solution)。闭式解是代表一个函数最优解的代数表达式。相比复杂的数值优化方法[比如训练神经网络时常用到的梯度下降(gradient descent)],闭式解更简单,效果也更好。
另一方面,平方惩罚放大了实际值与目标值之间的误差。我们也可以用3次或4次幂运算达到同一效果,只不过它们的导数更复杂。
最后,为什么我们要在意平均损失的导数呢?我们以式2为例,如果可以计算函数的梯度,我们便能令梯度为0[2]并通过直接求解方程组得到最优参数w*和b*。
对数几率回归(logistic regression)[3]并不是一个回归模型,而是分类学习模型。它的命名来自于统计学,因为其数学表达式与线性回归很类似。
本章中我们只解释对数几率回归在二分类问题上的应用。它也可以直接应用于多类别分类。
在对数几率回归中,我们还是想用xi的线性函数对yi建模。只不过当yi是二元时,问题就没有那么简单了。特征的线性组合wxi+b是一个从负无穷到正无穷的函数,而yi只有两个可能值。
在计算机被发明之前,科学家需要进行大量手动运算,急需一个线性分类模型。他们发现,如果把负标签定义为0、正标签定义为1,我们只需要找到一个域值为(0,1)的简单连续函数。这样一来,当模型对x的结果接近0时,我们给x一个负标签;反之,x得到正标签。标准对数几率函数(standard logistic function),又称为sigmoid函数,便是一个具有这一特质的函数:
{:—}其中,e是一个自然对数的底数,也称为欧拉数(Euler̓s Number)。许多编程语言使用exp(x)表示ex。sigmoid函数的曲线如图3所示。
图3 标准对数几率回归
对率回归模型的具体表示式为:
(3)
其中包含我们在线性回归中见过的wx+b。
通过观察标准对数几率函数的曲线,我们可以理解它如何满足我们的分类去求:如果我们正确地优化得出w和b值,便可以将f(x)的结果理解为yi为正值的概率。举个例子,如果结果大于或等于一个阈值0.5,我们认为x的类型为正;反之为负。在实际操作中,阈值的选择可以因具体问题的不同而调整。我们会在第5章介绍模型效果评估时继续讨论阈值。
接下来,我们要如何找出最优参数w*和b*呢?回顾一下,在线性回归中,我们最小化平均误差损失,也称为均方误差(Mean Squared Error,MSE)。
在对数几率回归中,我们根据模型最大化训练集的似然(likelihood)度。在统计学中,似然函数是指在模型已知的情况下观测到一个样本的可能性。
举个例子,令一个训练集中的有标签数据为(xi,yi)。同时,假设我们已经找到(或猜到)一些具体参数值和。现在,利用式3计算输入为xi时模型的结果,我们会得到一个0<p<1的值。如果yi为正类,根据我们的模型,yi是正类的似然度为p。同样的,如果yi为负类,则yi是负类的似然度为1-p。
对率回归的优化标准(optimization criterion)是最极似然数(maximum likelihood)。在线性回归中,我们将平均损失最小化。现在,我们根据模型将训练数据的似然度最大化:
(4)
表达式fw,b(xi)yi(1-fw,b(xi))(1-yi)看似复杂,实际的意义只不过是:当y1=1时取fw,b(xi)的值,否则取(1-fw,b(xi))的值。进一步解释,如果y1=1,则(1-y1)=0。因为任意一个数的0次方都是1,所以(1-fw,b(xi))(1-yi)等于1。同理,如果y1=0,fw,b(xi)yi等于1。
有的读者可能发现,我们在目标函数中用了求积运算Π而不是线性回归中的求和运算∑。这是因为,观察到N个样本的标签的释然度是每个观测样本似然的乘积(假设所有观测样本都相互独立,事实上也如此)。我们可以定义对数似然(log⁃likelihood)为:
因为ln是一个严格递增函数(strictly increasing function),它的优化问题等价于其变量的优化问题。两个问题的最优解是一致的。
有别于线性回归,上面的优化问题没有闭式解。为求解,我们常用数值优化方法,如梯度下降(gradient descent)。在下一章中,我们会具体解释它。
决策树(decision tree)是一个可用于决策的非循环图(graph)。在每个分支节点上,一个特征j会被测试。如果该特征的值小于一个既定阈值,我们只考虑左边的分支;否则,只考虑右边的分支。当决策过程到达一个叶节点(leaf node)时,我们可以用该叶节点的标签决定一个样本标签。
正如本章的标题所说,一个决策树可以从数据中学习得到。
已知一组标记样本:标签属于集{0,1}。我们想要构建一个决策树,并用它对一个特征向量进行分类。
解决决策树有很多种方法。在本书中,我们重点介绍一种名为ID3的方法。
该方法的优化标准是平均对数似然:
(5)
其中,fID3是一个决策树。
到这一步为止,看起来它和对数几率回归很相似。差别在于,对率回归模型试图通过求最优解构建一个参数化模型(parametric model),即;而ID3算法则通过近似优化构建一个非参数化模型(nonparametric model),即。
ID3学习算法的原理如下。令S为一个有标签样本的集合,刚开始决策树只有一个起始节点,包含所有样本,。起始恒定模型可定义为:
(6)
以上模型对所有输入x的预测,,都是相同的。在图4(a)中,一个此类的决策树由12个标签样本构建。
图4 一个决策树构建算法的示意图
注:样本集合S包含12个标签样本。(a)起初,决策树只有一个起始节点,对所有输入的预测都一样。(b)经过第一次划分之后的同一个决策树,测试特征3是否小于18.3,并根据结果选择两个叶节点中的一个做预测。
接着,我们搜索所有特征j=1,…,D和所有阈值t,并将S划分为两个子集:和。两个新的子集会直达两个新的叶节点。同时,我们评估所有可能的数组(j,t)对S+和S-的划分效果。最后,我们选择最优的划分方案构成新的叶节点,并继续递归划分S+和S-(直到没有任何一个划分后的模型明显优于现有模型)。图4(b)中的决策树由图4(a)中的原型经过一次划分后得到。
那么,该如何评估一次划分效果呢?在ID3中,我们用熵(entropy)估计一次划分的好坏。熵是衡量一个随机变量不确定性的值。当随机变量中的所有概率相等时,熵最大。计算一个样本集合S熵的公式如下:
当我们使用一个特征j和一个阈值t划分一个样本集合时,该划分的熵H(S-,S+)是两个子集的熵的加权求和。
(7)
在ID3的每个步骤中,在每一个叶节点,我们根据式7计算熵,并根据最小熵来划分或停止划分样本。
当以下任何一种情况得到满足时,算法终止于一个叶节点:
在每一次迭代中,因为划分数据集的决定是局部的(不依赖于之后的划分),ID3无法保证得到最优解。我们可以通过使用诸如回溯(backtracking)等方法搜索最优解,不过需要更长的时间构建一个模型。
最广泛使用的一种决策树学习算法叫作C4.5。相比ID3,它有以下特点:
剪枝的具体方法是:决策树构建完成后,重新检查每个分支,去除对降低误差影响不大的分支,并用其叶节点取代。
基于熵的划分标准其实很合理:当S中的所有样本标签都一样的时候,熵达到最低值0;刚好一半的样本被标注为正时,熵为最高值1,该分支也失去了有效分类的能力。至于决策树如何最大化平均对数似然标准,我们把这个问题留给读者自学。
在第1章中我们已经介绍了支持向量机,这里只做补充说明。两个需要回答的关键问题是:
1.如果数据中存在噪声,造成没有超平面可以完全分隔正负样本,怎么办?
2.如果数据不能被一个平面分隔,却可以被一个更高阶的多项式(higher⁃order polynomial)分隔,怎么办?
以上两种情况如图5所示。在左图中,如果不考虑噪声(异常的或标注错误的样本),那么数据可以被直线分隔。在图5(b)中,决策边界呈椭圆形,而不是一条直线。
图5 线性不可分隔的情况
回顾一下SVM,我们需要满足以下两个约束:
(8)
同时,我们试图将最小化,从而使超平面与最近的两类样本的距离相等。最小化等价于最小化。使用后者的好处是,在后面的运算中方便使用二次规划(quadratic programming)求解。这样一来,SVM的优化问题可写为:
(9)
为了扩展SVM可应用于分隔非线性数据,我们需要介绍合页损失(hinge loss)函数:max(0,1-yi(wxi-b))。
当式8中的约束被满足时,合页损失为0。换句话说,如果wxi的位置在决策边界的正确一侧,合页损失为0。当数据位于错误的一侧时,函数的值与距决策边界的距离成正比。
接下来,我们希望最小化以下成本函数:
我们既想要决策边界尽量大,也希望每一个样本xi都位于正确的一侧。超参数C的作用是将二者折中。如同ID3中的超参数ϵ和d,C的值需要实验前预设。优化合页损失的SVM称为软间隔(soft⁃margin)SVM。
正如读者所见,当C的值够大时,成本函数中第二个项可被忽略。这时的SVM会试图找到最大的间隔,而完全不顾分类对错。减小C的值使分类错误的成本增加。为了减少犯错的机会,SVM不惜牺牲间隔的大小。正如之前讨论过的,间隔大的模型具有更好的泛化性。因此,C的作用是折中模型在训练样本(经验风险最小化)与未来数据(泛化性)上的分类效果。
SVM的变体可用于分类在原空间内无法被超平面分隔的数据。实际上,如果我们能将原空间变换成另一个高维空间,即有可能在新空间内线性分隔样本。在优化SVM的成本函数时,使用一个函数隐式地(implicitly)变换原空间到一个更高维空间的方法称为核技巧(kernel trick)。
核技巧的应用效果如图6所示,我们可以使用特定映射(mapping)ϕ:xaϕ(x)将原本线性不可分的二维数据变换成线性可分的三维数据。其中,ϕ(x)是一个比x维度高的向量。以图5(右)中的二维数据为例,将一个二维样本x=[q,p]映射到一个三维空间(见图6)中,。其中,·2表示平方运算。现在,数据在变换后的空间中可以被线性分隔了。
图6 在变换到一个三维空间后,图5(b)中的数据变成线性可分隔
不过,我们预先并不知道哪一个映射ϕ适用于我们的数据。我们可以先用某种映射将所有样本变换成维度很高的向量,再用SVM进行分类,并尝试所有可能实现的映射函数。这样做非常低效,我们的分类问题可能永远也解决不了。
幸运的是,科学家们找到了一个不需要明确地变换即可在高维度空间进行高效运算的核函数[kernel function,或简称核(kernel)]。要了解核的工作原理,我们首先需要理解SVM的优化算法是如何找到w和b最优值的。
用于优化式9的传统方法是拉格朗日乘子法(method of Lagrange multiplier)。与直接优化式9相比,以下形式的等价问题更方便求解:
其中,α是拉格朗日乘子。这样一来,该优化问题就变成了一个凸二次优化问题(convex quadratic optimization problem),可以利用二次规划算法高效求解。
在以上算式中我们可以发现,特征向量只出现在一项中,即xixk。如果我们想要变化向量空间到更高维度的空间,需要将xi和xk分别变成ϕ(xi)和ϕ(xk)并相乘求积。这样计算成本很高。
另外,我们只关心xixk的点积结果,而且知道它是一个实数。只要其结果正确,我们甚至不在乎它的计算过程。使用核技巧,可以避免从原特征空间到更高维度空间的复杂转换,也不需要计算它们的点积。我们将它们替换成一个简单运算。该运算应用于原特征向量的结果与之前相同。举个例子,与其将(q1,p1)、(q2,p2)转换成(,q1p1,)、(,q2p2,)并计算点积得到(+2q1q2p1p2+),不如直接计算(q1,p1)和(q2,p2)的点积(q1q2,p1p2),然后平方得到完全一样的结果(+2q1q2p1p2+)。
这也正使用到了核技巧的一种,即二次核k(xi,xk)(xixk)2。核函数有多种,最常用的是径向基函数(Radial Basis Function,RBF)核:
其中,是欧氏距离(Euclideandistance)的平方。欧氏距离的计算公式为:
RBF核的特征空间的维度是无穷的。通过调整超参数σ,数据科学家可以在原空间选择一个平滑或者弯曲的决策边界。
k近邻(k⁃Nearest Neighbor,kNN)是一个非参数化的学习算法。其他学习算法在建模完成后可以将训练数据丢弃,而kNN却需要将训练数据保存在内存中。当一个新的、未见过的样本x被输入时,kNN可找出与x最相似的k个训练样本。当解决分类问题时,模型输出的多数标签为预测,处理回归问题时则返回标签的均值。
两个样本的相似度由一个距离函数决定,比如前面提到的欧氏距离就在现实应用中很常见。另一个很流行的距离函数是负余弦相似度(consine similarity)。余弦相似度定义为:
它衡量两个向量的方向间的相似度。当两个向量间的夹角为0度时,两个向量指向同一方向,且余弦相似度等于1。当两个向量互相垂直时,余弦相似度等于0。当两个向量指向相反的方向时,余弦相似度为-1。如果我们想用它作为距离度量,就需要乘以-1。其他常用的距离度量包括切比雪夫距离(Chebychev distance)、马式距离(Mahalanobis distance)和汉明距离(Hamming distance)等。距离度量和k值都是超参数,需要数据科学家预先设定。我们也可以通过数据学习(相对于预先猜想)距离度量。具体过程我们会在第10章讨论。
[1] 我们用yi∈来表示yi的值是一个实数。其中,代表所有实数的集合,是一个从负无穷到正无穷的无限集。
[2] 为找到函数的最大或最小值,我们将梯度设为0的原因是,函数的极值的梯度总是0。在二维表示中,位于极值的梯度是一条水平线。
[3] 译者注:简称对率回归,这里使用周志华《机器学习》中的翻译。又译作“逻辑回归”或“逻辑斯谛回归”。
[4] 在第5章,我们会介绍微调超参数。
本文摘自:《机器学习精讲》,安德烈·布可夫(Andriy Burkov) 著,韩江雷 译京东现在五折优惠,过期恢复原价。
本书用简短的篇幅、精炼的语言,讲授机器学习领域必备的知识和技能。全书共11章和一个术语表,依次介绍了机器学习的基本概念、符号和定义、算法、基本实践方法、神经网络和深度学习、问题与解决方案、进阶操作、非监督学习以及其他学习方式等,涵盖了监督学习和非监督学习、支持向量机、神经网络、集成学习、梯度下降、聚类分析、维度降低、自编码器、迁移学习、强化学习、特征工程、超参数调试等众多核心概念和方法。全书最后给出了一个较为详尽的术语表。
本书能够帮助读者了解机器学习是如何工作的,为进一步理解该领域的复杂问题和进行深入研究打好基础。本书适合想要学习和掌握机器学习的软件从业人员、想要运用机器学习技术的数据科学家阅读,也适合想要了解机器学习的一般读者参考。