前言
《机器学习》,又称西瓜书,是南京大学教授周志华教授编著的一本机器学习领域的经典教材。《机器学习》系统地介绍了机器学习的基本理论、常用算法及其应用。全书内容丰富,涵盖了机器学习的多个重要方面,包括监督学习、无监督学习、强化学习等主要学习范式。《机器学习》适合计算机科学、人工智能、数据科学等相关专业的本科生、研究生以及对机器学习感兴趣的自学者。无论是初学者希望系统地学习机器学习的基础知识,还是有一定基础的研究人员和从业者希望深入了解前沿技术,这本书都能提供有价值的参考。
在接下来的日子里,我将每周精心打磨一章内容,全方位、多角度地为大家剖析书中精髓。无论是复杂难懂的算法,还是晦涩难解的公式,我都会以通俗易懂的方式逐一解读,力求让每一位读者都能轻松掌握其中的奥秘。让我们一起在知识的海洋中遨游,探索机器学习的无限魅力!
第一章:西瓜书《机器学习》全网最详细解读 第一章:绪论_机器学习 西瓜书-CSDN博客
第二章:西瓜书《机器学习》全网最详细解释 第二章:模型评估-CSDN博客
第三章:西瓜书《机器学习》全网最详细解读 第三章:线性模型-CSDN博客
第四章:西瓜书《机器学习》全网最详细解读 第四章:决策树-CSDN博客
第五章:西瓜书《机器学习》全网最详细解读 第五章:神经网络-CSDN博客
在本系列中:
- 重点内容将使用加粗或者红字显示
- 普通内容使用普通颜色显示
- 示例使用蓝色显示
-
-
6.1 间隔与支持向量
分类学习最基本的想法就是基于训练集 D 在样本空间中找到一个划分超平面,将不同类别的样本分开。我们已经学习过线性模型、决策树和神经网络,他们均可作为分类模型使用。每个模型均可生成若干合适的分类面
然而,能将训练样本分开的划分超平面可能有很多,如图 6.1 所示,我们应该使用哪一个呢?
显然我们应该去找位于两类训练样本“正中间”的划分超平面,因为训练集外的样本可能比训练样本更接近两个类的分隔界,这将出现错误,而“正中间”的超平面受影响最小。换言之,这个划分超平面对没见过的示例的泛化能力最强。
在样本空间中,划分超平面可通过如下线性方程来描述:,其中
为法向量,决定了超平面的方向;b 为位移项,决定了超平面与原点之间的距离。显然,划分超平面可被法向量 w 和位移 b 确定。
-
根据之前的分析,我们应该找到最中间的分类面,那么我们可以自然而然的想到,计算所有点到分类面的距离,取平均值最小的分类面作为结果。
下面我们将其记为 (w, b)。样本空间中任意点 x 到超平面 (w, b) 的距离可写为
我们假设超平面 (w, b) 能将训练样本正确分类,即对于 ,若
(正例),则有
;若
(负例),则有
。
那么我们令
(你会发现无论正负例,只要划分正确,其 ;若小于0,则说明划分错误)
-
然而,如果使用所有点计算,计算成本太大,有没有办法降低其计算成本?
我们知道找“正中间”的分类面的目的是可能会有训练集外样本接近两个类的分隔界,使得部分分类面的结果出现错误,而“正中间”的超平面受影响最小。那我们能否仅使用较近的几个样本进行计算(如下图红圈所示)
距离超平面最近的这几个训练样本,它们被称为“支持向量”(support vector),我们的目的就是训练模型,使得其划分的分类面在这些支持向量上能够划分正确。
我们定义两个异类支持向量到超平面的距离之和为 ,它被称为“间隔”(margin)。如下图中,其间隔为
很显然,要找到最中间的分类面,就是找到间隔最大的分类面!
-
欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到能满足约束条件的参数 w 和 b,使得 最大,即
我们梯度下降的目的都是求解最小值,因此我们要把支持向量机转换为求最小化的过程。
为了最大化间隔,仅需最大化 ,这等价于最小化
。于是,式(6.5)可重写为
这就是支持向量机(Support Vector Machine,简称 SVM)的基本型。我们希望求解上式来得到大间隔划分超平面所对应的模型 ,其中 w 和 b 是模型参数。
-
--
6.2 对偶问题
上面我们之所以使用 而非
,实际上是想构造一个凸二次规划(convex quadratic programming)问题,这是一种常见的优化问题。
凸二次规划问题(Convex Quadratic Programming)是数学优化中的一类问题,它属于二次规划问题的子集。在凸二次规划问题中,目标函数是二次的,并且是凸函数,而约束条件可以是线性的等式或不等式。由于目标函数是凸的,凸二次规划问题的局部最优解也是全局最优解。
详细解释可自行查看书附录B
对上式使用拉格朗日乘子法可得到其“对偶问题”(dual problem)。
对偶问题(Dual Problem)是优化理论中的一个概念,它与原问题(Primal Problem)相对应。对于一个给定的优化问题,其对偶问题是一个新的优化问题,它通过原问题的约束条件和目标函数来定义。对偶问题的解可以提供原问题解的下界,而且在某些情况下,对偶问题的解与原问题的解相同。
对偶问题在优化理论中具有重要的意义,它不仅提供了一种求解原问题的方法,而且可以用于分析原问题的性质和解的稳定性。
简单来说,对偶问题就是将原本复杂的问题转换为一个相对容易的问题,以便求解。
具体来说,对式(6.6)的每条约束添加拉格朗日乘子 ,则该问题的拉格朗日函数可写为
其中 ,每一个
都对应着一个支持向量。
令 对 w 和 b 的偏导为零可得
将上式代入拉格朗日函数,即可将 中的 w 和 b 消去,就得到对偶问题
解出 后,求出 w 与 b 即可得到模型
-
我们发现原问题有一个不等式约束,因此我们需相应构造一个对偶问题的约束条件,即KKT (Karush-Kuhn-Tucker) 条件,定义如下:
KKT条件(Karush-Kuhn-Tucker条件)是优化理论中的一个基本概念,它提供了一种判断一个点是否是优化问题的最优解的方法。
KKT条件是必要条件,即如果一个点 x 是优化问题的最优解,那么它必须满足KKT条件。但是,KKT条件不是充分条件,即满足KKT条件的点不一定是最优解。只有当优化问题是凸优化问题时,KKT条件才是充分必要条件。
对于6.1节支持向量机的基本式,因为它本身就是凸二次规划问题,因此满足KKT条件的解就是最优解!
KKT条件的详细解读如下:
-
那么,如何求解式对偶问题呢?不难发现,这是一个二次规划问题,可使用通用的二次规划算法来求解;然而,该问题的规模正比于训练样本数,这会在实际任务中造成很大的开销。
为了避开这个障碍,人们通过利用问题本身的特性,提出了很多高效算法,SMO (Sequential Minimal Optimization) 是其中一个著名的代表。
SMO 每次选择两个变量 和
,并固定其他参数。这样,在参数初始化后,SMO 不断执行如下两个步骤直至收敛:
- 选取一对需更新的变量
和
;
- 固定
和
以外的参数,求解对偶式获得更新后的
和
。
SMO 算法之所以高效,恰由于在固定其他参数后,仅优化两个参数的过程能做到非常高效。具体来说,仅考虑 和
时,对偶式中的约束可重写为
,其中
是使
成立的常数。用
消去对偶式中的变量
,则得到一个关于
的单变量二次规划问题,仅有的约束是
。
-
SMO算法的优势在于:
- 它避免了直接求解大规模二次规划问题,从而减少了计算开销;
- 利用问题本身的特性,使得每次迭代都更接近最优解;
- 特别适用于大规模数据集,因为它每次只优化两个变量,而不是全部变量。
-
如何确定偏移项 b :可选取任意支持向量并通过求解式获得 b,但现实任务中常采用一种更鲁棒的做法:使用所有支持向量求解的平均值
-
-
6.3 核函数
在第5章中,我们说过,如果样本是线性可分的,那么我们仅使用一个超平面就能将训练样本正确分类。然而很多现实任务并不是线性可分的,例如“异或”问题就不是线性可分的。
我们首先介绍cover定理:如果一组数据在低维空间中是非线性可分的,那么通过将这些数据映射到一个更高维的空间,它们更有可能变得线性可分。而且只要升维的维度足够高,我们就一定能解决问题!
如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分。如下图所示,异或问题在二维空间无法用一条直线划分开,但在三维空间内,我们可以使用一个线性超平面划分开。
我们令为将低维映射到高维的函数,则
表示将 x 映射到高维空间后的特征向量,于是,在特征空间中划分超平面所对应的模型可表示为
,其中 w 和 b 是模型参数。
类似原支持向量机,有
其对偶问题是
(对比一下原式,你会发现,这里仅仅只是将x替换为)
-
如此看来,我们仅需将数据从低维映射到高维空间,就可以用线性方法解决任何非线性问题了?
这个理解基本正确,但是,如果升维的维度过高,甚至出现需升高至无限维才能解决的问题。这类问题问题过于复杂,以至于难以求解。我们称其为维度灾难。
“维度灾难”(Curse of Dimensionality)是高维数据分析和处理中一个常见的问题,它指的是随着数据维度的增加,数据的性质和处理难度会发生显著变化,导致许多在低维空间中有效的算法和方法在高维空间中变得低效甚至不可行。
- 数据稀疏性:在高维空间中,数据点之间的距离会迅速增加,数据变得稀疏。例如,在二维空间中,100个数据点可能能够很好地覆盖一个区域,但在10维空间中,这100个点可能显得非常稀疏,无法有效地描述数据的分布。
- 计算复杂度:随着维度的增加,数据的存储和处理成本会呈指数级增长。例如,对于一个 n 维空间,如果每个维度有 k 个数据点,那么总的数据点数为 kn。这会导致计算和存储成本急剧增加。
-
我们再回头看一下对偶问题:
求解上式涉及到计算 ,这是样本
与
映射到特征空间之后的内积。由于特征空间维数可能很高,甚至可能是无穷维,因此直接计算
通常是困难的。
为了避开这个障碍,我们可以设想这样一个函数:,(原来我们必须要计算
和
,然后将其乘起来;但有了这个函数,我们仅需将通过函数
计算即可,免去了高维甚至无穷维特征空间中的内积计算,于是问题的重点转换为如何设计
)。
于是上式可重写为
求解后即可得到
这里的函数 就是“核函数”(kernel function)。上式显示出模型最优解可通过训练样本的核函数展开,这一展式亦称“支持向量展式”(support vector expansion)。
核函数的作用是允许我们在不显式地知道映射函数 ϕ 的情况下,计算两个映射后的样本在高维空间的内积。这解决了在高维空间(尤其是无限维空间)中直接计算内积的难题。这大大减少了计算成本,同时也避免了直接在高维空间中处理数据的复杂性。
-
现在问题又来了,在现实任务中我们通常不知道 是什么形式,也不一定能找到合适的核函数进行映射。那么,合适的核函数是否一定存在呢?什么样的函数能做核函数呢?我们有下面的定理:
定理 6.1(核函数) 令 为输入空间,
是定义在
上的对称函数(对称函数指的是在变量的任何排列下保持不变的函数,如f(a,b)=f(b,a) ),若
是核函数,当且仅当对于任意数据
,则“核矩阵”(kernel matrix) K 总是半正定的:
核矩阵实际上是定义了任意两个数据点之间的关系 ,相当于能将任意两个数据映射到一个新的空间,这个空间称为“再生核希尔伯特空间”(Reproducing Kernel Hilbert Space, 简称 RKHS),也就是本章一开始提到的升维空间。
定理 6.1 表明,只要一个函数是对称函数,且该函数所对应的核矩阵是半正定的,那么它就能作为核函数使用。
半正定矩阵:如果对于所有的非零向量,该矩阵对应的二次型的值都是非负的。性质:
对称性:半正定矩阵必须是对称的。
特征值非负:半正定矩阵的所有特征值都是非负的。
主子式非负:半正定矩阵的所有主子式(包括行列式)都是非负的。
为什么是半正定
- 需要解决一个凸优化问题。核函数对应的核矩阵的半正定性保证了优化问题的凸性,从而确保了全局最优解的存在。
- 半正定核矩阵能够保证算法的稳定性。在SVM中,这意味着模型对于训练数据的小的扰动不敏感,从而提高了模型的泛化能力。
- 核函数的半正定性与Mercer定理相关。Mercer定理指出,如果核函数是半正定的,那么它对应于某个再生核希尔伯特空间(RKHS)中的内积。这允许我们在高维特征空间中隐式地定义函数,而不需要显式地计算映射。
关于核函数的证明,请参阅 Schölkopf, B. and A. J. Smola, eds. (2002). Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond. MIT Press, Cambridge, MA.。
特征空间的好坏对支持向量机的性能至关重要。而在不知道特征映射的形式时,我们并不知道什么样的核函数是合适的。于是,“核函数选择”成为支持向量机的最大变数。若核函数选择不合适,则意味着将样本映射到了一个不合适的特征空间,很可能导致性能不佳。
表 6.1 列出了几种常用的核函数。
此外,核函数还可通过函数组合得到,例如:
- 两个核函数的线性组合仍然是核函数:若
和
为核函数,则对于任意正数
、
,其线性组合
也是核函数;
- 两个核函数的直积仍然是核函数:若
和
为核函数,则核函数的直积
也是核函数;
- 核函数左右乘以任意函数,仍然是核函数:若
为核函数,则对于任意函数 g(x),
也是核函数。
-
-
6.4 软间隔和正则化
在前面的讨论中,我们一直假定存在一个超平面能将不同类的样本完全划分开。然而,在现实任务中往往存在所谓噪声点,使得很难确定合适的分类面;即便恰好找到了某个核函数使训练集在特征空间中线性可分,也很难断定这个貌似线性可分的结果不是由于过拟合所造成的。
缓解该问题的一个办法是允许模型在一些样本上出错,为此,要引入“软间隔”(soft margin)的概念,如图 6.4 所示。
前面介绍的支持向量机形式是要求所有样本均满足约束 ,即所有样本都必须划分正确,这称为“硬间隔”(hard margin)。其优化目标为
而软间隔则是允许某些样本不满足约束 ,即允许少量异常点的出现。不过所谓不满足约束的样本应尽可能少。
于是,其优化目标可写为
,其中 C > 0 是一个常数,
是“0/1损失函数”:
。
当 C 为无穷大时,优化目标迫使所有样本均满足约束,于是上式等价于硬间隔;当 C 取有限值时,优化目标允许一些样本不满足约束。
然而, 非凸、非连续,数学性质不太好,使得上式不易直接求解(这点已经在前面5章多次提过)。于是,人们通常用其他一些函数来代替
,称为“替代损失”(surrogate loss)。替代损失函数一般具有较好的数学性质,如它们通常是凸的连续函数且是
的上界。这里给出了三种常用的替代损失函数:
- hinge 损失(合页损失):
;
- 指数损失(exponential loss):
;
- 对率损失(logistic loss):
。
-
现在,我们将替代函数引入其中。若采用 hinge 损失,则上式变成。
现在我们引入“松弛变量”(slack variables) 进行简化,可将上式重写为
这就是常用的“软间隔支持向量机”。
-
显然,上式中每个样本都有一个对应的松弛变量,用以表征该样本不满足约束的程度。但是,这仍是一个二次规划问题。于是,我们通过拉格朗日乘子法可得到上式的拉格朗日函数:
其中 是拉格朗日乘子。
接着我们求 对
的偏导,并令其为零,可得
将上式代入即可得到软间隔的对偶问题
将上式与硬间隔下的对偶问题对比可看出,两者唯一的差别就在于对偶变量的约束不同:前者是 ,后者是
,
软间隔支持向量机的KKT 条件要求如下:
-
那么,能否使用其他的替代损失函数呢?
如果使用对率损失函数 来替代上式中的 0/1 损失函数,则几乎就得到了对率回归模型。原因很简单:hinge 损失有一块零区域,这使得大部分数据因为变成0而对分类面没有影响(也就是说只有支持向量才对分类面产生影响),因此支持向量机的解具有稀疏性;而对率损失函数不存在所谓零区域,因此非支持向量也参与计算!那么预测过程就要依赖所有的数据,其预测开销更大。详请看图:
-
当然,我们还可以把上式中的 0/1 损失函数换成别的替代损失函数以得到其他学习模型,这些模型的性质与所用的替代函数直接相关,但它们具有一个共性:优化目标中的第一项用来描述划分超平面的“间隔”大小,另一项 用来表述训练集上的误差,可写为更一般的形式
其中 称为“结构风险”(structural risk),用于描述模型 f 的某些性质;第二项
称为“经验风险”(empirical risk),用于描述模型与训练数据的契合程度;C 是常数参数。
从经验风险最小化的角度来看, 表述了我们希望获得具有何种性质的模型(例如希望获得复杂度较小的模型),这为引入领域知识和用户意图提供了途径;
另一方面,该信息有助于削减假设空间,从而降低了最小化训练误差的过拟合风险。从这个角度来说,上式称为“正则化”(regularization)问题, 称为正则化项,C 则称为正则化常数。
范数(norm)是常用的正则化项,其中
范数
倾向于 w 的分量取值尽量均衡,即非零分量个数尽量稠密,而
范数
和
范数
则倾向于 w 的分量尽量稀疏,即非零分量个数尽量少。
-
-
6.5 支持向量回归
6.1-6.4是将支持向量机和分类任务结合,而这一节的基本想法就是将支持向量机的想法融入到回归任务中。
给定训练样本集 ,
,希望学得一个形如
的回归模型,使得 f(x) 与 y 尽可能接近,w 和 b 是待确定的模型参数。
对于样本 (x, y),传统回归模型通常直接基于模型输出 f(x) 与真实输出 y 之间的差别来计算损失,当且仅当 f(x) 与 y 完全相同时,损失才为零。
与此不同,支持向量回归(Support Vector Regression, 简称 SVR)仅当 f(x) 与 y 之间的差别绝对值大于 时才计算损失。
如图 6.6 所示,这相当于以 f(x) 为中心,构建了一个宽度为 的间隔带,若训练样本落入此间隔带,我们认为误差可以忽略不计,即认为是被预测正确的;而在间隔带外的,离回归直线较远,他们就是支持向量,我们的目的是让这些样本的损失尽可能小。
于是,SVR 问题可形式化为 ,其中 C 为正则化常数,
是图 6.7 所示的
-不敏感损失 (
-insensitive loss) 函数
剩余的公式推导和上面几节一样,我们就简写略过。
如果我们引入松弛变量 和
,可将上式重写为
类似地,通过引入拉格朗日乘子 ,由拉格朗日乘子法可得到上式的拉格朗日函数
令 对
和
的偏导为零可得
将上式全部代入原拉格朗日函数,即可得到 SVR 的对偶问题
上式的KKT条件是:
可以看出,当且仅当 时
能取非零值,当且仅当
时
能取非零值。换言之,仅当样本
不落入
-间隔带中,相应的
和
才能取非零值。
此外,约束 和
不能同时成立,因此
和
中至少有一个为零。
-
求解可得 SVR 的解形如
能使上式中的 的样本即为 SVR 的支持向量,它们必落在
-间隔带之外。
然而上式中b不知道,而从 KKT 条件可看出,对每个样本 都有
且
。于是,若
,则必有
,进而有
(注意书上公式有误)
因此,在求解得到 后,理论上来说,可任意选取满足
的样本通过上式求得 b。实践中常采用一种更鲁棒的办法:选取多个(或所有)满足条件
的样本求解 b 后取平均值。
-
若考虑核函数形式,则
将上式代入,则 SVR 可表示为 ,其中
为核函数。
-
-
6.6 核方法
给定训练样本 ,若不考虑偏移项 b,则无论 SVM 还是 SVR,学得的模型总能表示成核函数
的线性组合。那么我们的想法就是能不能有更多的线性方法能推广到非线性的领域?满足什么条件才能推广?
定理 6.2(表示定理) 令 为核函数
对应的再生核希尔伯特空间,
表示
空间中关于 h 的范数,对于任意单调递增函数
和任意非负损失函数
,优化问题
其解总可写为
上面的定理的意思是:我们想要得到一个复杂的非线性模型 ,原来我们需要复杂的非线性空间变化,但利用表示定理,我们可以将其表示为核函数的线性组合,也就是说,我们仅需定义核函数即可。
表示定理对损失函数没有限制,对正则化项 仅要求单调递增,甚至不要求
是凸函数,意味着对于一般的损失函数和正则化项,优化问题的最优解
都可表示为核函数
的线性组合;这显示出核函数的巨大威力。
-
下面我们以3.4节的线性判别分析为例来演示如何通过核化来对其进行非线性拓展,从而得到“核线性判别分析”(Kernelized Linear Discriminant Analysis, 简称 KLDA)。
我们先假设可通过某种映射 将样本映射到一个特征空间
,然后在
中执行线性判别分析,以求得
(注意原来是
),然而,和本章前面遇到的问题一样,我们通常我们难以知道映射
的具体形式,因此我们需要构建核函数来解决这个问题。
类似于式LDA,KLDA 的学习目标是 ,其中
和
分别为训练样本在特征空间
中的类间散度矩阵和类内散度矩阵。
令 表示第
类样本的集合,其样本数为
;总样本数
。第 i 类样本在特征空间
中的均值为
。
则两个散度矩阵分别为
本节我们多次强调:通常我们难以知道映射 的具体形式,因此接下来使用核函数
来隐式地表达这个映射和特征空间
。把 J(w) 作为式
中的损失函数
,再令
,由表示定理,函数 h(x) 可写为
我们将 带入
,得到
。因为最开始定义KLDA的式子为
,于是可得
-
最后,我们让模型的表示更加简洁和紧凑:
令 为核函数
所对应的核矩阵,即
。
令 为第 i 类样本的指示向量,即
的第 j 个分量为 1 当且仅当
,否则
的第 j 个分量为 0。
再令
于是,式 等价为
-
-
亲爱的朋友们,非常感谢您抽出宝贵的时间阅读我的博客。在这里,我分享了一些自己学习的点滴。如果您在阅读过程中有所收获,或者觉得这些内容引起了您的共鸣,希望能得到您的一次点赞,这对我来说是莫大的鼓励。同时,如果您对我的分享感兴趣,不妨关注一下我的博客,这样就能及时收到我的更新通知,不错过更多有趣的内容。另外,如果这些文章对您有帮助,也可以收藏起来,方便日后查阅。您的支持是我不断前行的动力,再次感谢您的陪伴!