西瓜书学习笔记——第六章:支持向量机(含公式推导)
6. 本章简介
支持向量机(Support Vector Machine),简称SVM,是一种经典的二分类模型,属于监督学习算法。
- 6.1节:介绍了支持向量机的目标是确定一个对样本的分类结果最鲁棒的线性分类器,即找到一个具有最大间隔的划分超平面。为此以间隔为优化目标,可将其转化为一个凸二次规划问题。
- 6.2节:对于6.1节求出的凸二次规划问题,采用拉格朗日乘子法可得到其对偶问题。由于该对偶问题又为二次规划问题,文中采用了SMO算法对其进行求解。
- 6.3节:前两节是在样本在其原始样本空间线性可分的假设下进行讨论的,该节针对原始样本空间线性不可分的问题,基于有限维原始样本空间一定存在一个高维特征空间使样本线性可分这一定理,引出了原始空间和特征空间的桥梁——核函数的相关概念,并强调核函数的选择是支持向量机的最大变数。
- 6.4节:前三节都是基于理论进行的推导,但在现实情况下我们很难确定合适的核函数对样本进行完美分类,故提出了软间隔的概念,允许有尽可能少的样本不满足约束条件。于是在前面的基础上,模型加入了对各个样本松弛变量的考量,并采用6.2节的方法进行求解。
- 6.5节:本节从分类问题转向了回归问题,介绍了相对于传统回归问题上对损失的严格定义,支持向量回归(SVR)则对模型输出和真实输出设有容许偏差,只有超过偏差才计算损失。凭此建立了SVR模型,并还是采用6.2节的方法进行求解。
- 6.6节:由前面的推导发现,SVM和SVR学得的模型总能表示成核函数的线性组合,并引出了表示定理,强调了该类型的优化问题的解总可表示为核函数的线性组合,并以线性判别分析(LDA)为例向我们演示了如何通过引入核函数(核化)进行非线性拓展。
6.1 间隔与支持向量
支持向量机的目标是确定一个对样本的分类结果最鲁棒的线性分类器,即找到一个具有最大间隔的划分超平面。为此以间隔为优化目标,可将其转化为一个凸二次规划问题。
对于二分类问题,其基本思想就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。
但仅仅是将样本分开的话,那么我们可能可以找到许多个划分超平面。如图6.1所示,从几何意义易知,粗线对训练样本局部的扰动的“容忍性”最好(其他的超平面训练样本很容易越界,考虑到噪声等因素,其分类结果很不稳定),也是最鲁棒的。于是粗线也就是我们想要的最优划分超平面。
我们知道最优划分超平面应该满足超平面同时离两个不同类的样本尽量远这一条件,以下是为了量化“尽量远”进行的概念引申:
- 超平面方程:样本空间中,用来描述超平面的线性方程为:
其中, 为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。 - 点到超平面的距离:样本空间中任意点
到超平面(记为
)的距离为:
- 约束条件与支持向量(support vector)
式(6.3)即为超平面将训练样本正确分类的约束条件。如下图所示,距离超平面最近的三个训练样本使得式(6.3)的等号成立,它们就是支持向量。
- 间隔(margin):两个不同类别的支持向量分别到超平面的距离之和
以下是对式(6.2)和(6.3)的推导:
(6.2):
设
为超平面上的一点,则样本空间任意点
到超平面的距离
即为:向量
在经过点
的超平面的法向量
上的投影,计算投影
,又
,可得
注:分子加绝对值是因为向量内积可能小于0
(6.3):
于是,最优划分超平面即对应最大间隔的划分超平面,也就是找到满足(6.3)约束条件的
使得
最大,即:
最大化
等价于最小化
,于是(6.5)可重写为:
这就是支持向量机(Support Vector Machine,SVM)的基本模型
这里解释一下为什么用
:
由约束条件可知将不会存在错误分类的样本,即不存在欠拟合的问题;那么,式(6.6)的优化目标可进一步解释为“最小化
则相当于寻找最不可能过拟合的分类超平面”,为了防止过拟合引入了正则化,即在最小化目标函数中加入分类器的所有参数的模值的平方(不含位移项b)
6.2 对偶问题
对于式(6.6),接下来我们将采用拉格朗日乘子法得到其对偶问题。由于该对偶问题又为二次规划问题,故采用了SMO算法对其进行求解。
6.2.1 转换对偶问题
以下是拉格朗日乘子法求得其对偶问题的基本步骤:
按照上面的步骤,有:
①:对式(6.6)的每一条约束添加拉格朗日乘子
,则该问题的拉格朗日函数可写为:
其中,
注:对于拉格朗日乘子那一项,需将括号里的约束条件转化为
的形式
②+③:求解
对
和
的偏导,并令偏导为0,解得:
所以,有:
④:考虑(6.10)的约束,可得其对偶问题:
超平面的模型为:
故求出
之后,再解出
与
即可得到目标超平面的模型。
对于上述的转换对偶问题求解过程,需满足KKT(Karush-Kuhn-Tucker)条件,即要求:
注:KKT条件主要包含三大部分:
①:拉格朗日乘子
②:原问题的约束条件
③:拉格朗日函数中的拉格朗日乘子项
根据KKT条件,我们可以对 的取值进行讨论,并得出支持向量机一个重要结论:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。
6.2.2 求解对偶问题
那么,如何求解式(6.11)呢?由于该对偶问题为二次规划问题,这里我们采用二次规划算法SMO进行求解。
SMO的基本思想:先固定 之外的所有参数,然后求 上的极值
对SMO的修改:选择两个变量
对于式(6.11),存在约束
,若固定
之外的其他变量,则
还是可以由其他变量导出。于是,在这里SMO每次选择两个变量
和
,并固定其他参数。
这样,在参数初始化后,SMO不断执行如下两个步骤直至收敛:
- 选取一对需要更新的变量 和
- 固定 和 以外的参数,求解式(6.11)获得更新后的 和
如何确定要选取的 和 呢?
我们求解的目标是最大化目标函数,又因为只需选取的
和
中有一个不满足KKT条件,目标函数就会在迭代后增大。也就是我们要选取违背KKT条件程度最大的变量,这就涉及到了比较各变量对应的目标函数值,复杂度过高。
于是,SMO采用了一个启发式:使选取的两变量对应的样本之间的间隔最大。
这是因为,与对两个相似的变量进行更新相比,对两个很大差别的变量进行更新会给目标函数值带来更大的变化。
于是得到一个关于
的单变量二次规划问题,仅有的约束是
,该问题具有闭式解,不需调用数值优化算法即可高效地计算出更新后的
和
。
计算出
和
,则
就可以解决了,接下来就只剩下偏移项b。
注意到,对任意支持向量
,它们使得原问题约束条件的等号成立,故有
,即:
所以,我们可以通过任意一个支持向量就计算出偏移项
的值。
但为了使得计算结果更鲁棒,采用的做法是:选取所有的支持向量计算结果,再取其均值。
注:西瓜书上(6.18)的
写的是
,但本质上是一样的,由于
的取值为{-1,1},对(6.17)两边同时乘以
即可消掉左边的
。
6.3 核函数
前两节是在样本在其原始样本空间线性可分的假设下进行讨论的,6.3节针对原始样本空间线性不可分的问题,基于有限维原始样本空间一定存在一个高维特征空间使样本线性可分这一定理,引出了原始空间和特征空间的桥梁——核函数的相关概念,并强调核函数的选择是支持向量机的最大变数。
将样本从原始样本空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分,令
表示将
映射后的特征向量,则在特征空间中划分超平面所对应的模型可表示为:
按照上一节的做法,运用拉格朗日乘子法得到其对偶问题,这里不再赘述,实际上就只是
变为
而已。
注:约束条件也没有变
与上一节不同的是,求解该对偶问题是涉及到计算
,也即计算两个样本映射到特征空间之后的内积。但是特征空间的维数可能很高(甚至是无穷维),直接对它进行内积的计算是比较困难的。为了避开这个障碍,我们可以设想一个搭建原始样本空间和特征空间的函数:
注:这称为核技巧,即样本在特征空间的内积等于它们在原始样本空间中通过函数
计算的结果。
计算过程与上一节相同,直接代入得:
可见模型最优解可由训练样本的核函数展开,这一展式亦称为“支持向量展式”(support vector expansion)
到这里,面临的问题就是确定核函数了。
由于我们通常不知道
是什么形式,就不能直接根据它来得出核函数
。对此,我们会有几种常用的核函数去解决问题,如表6.1所示。
注:文本分类首选线性核,其他问题一般优先尝试高斯核(RBF核)。
核函数选择是支持向量机的最大变数,它意味着将样本映射到什么样的特征空间,是否满足使得样本线性可分的优化目标。
以下为核函数的相关定理:
注:
- 半正定矩阵:设A为实对称矩阵,若对于每个非零向量 ,都有 ,则称A为半正定矩阵, 为半正定二次型。(正定矩阵则是 )
由该定理可以看出,核矩阵是实对称矩阵,只要一个对称函数对应的核矩阵半正定,它就可以作为核函数。
6.4 软间隔与正则化
前三节都是基于理论进行的推导,但在现实情况下我们很难确定合适的核函数对样本进行完美分类,故提出了软间隔的概念,允许有尽可能少的样本不满足约束条件。于是在前面的基础上,模型加入了对各个样本松弛变量的考量,并采用6.2节的方法进行求解。
6.4.1 软间隔
在引入软间隔的概念后,图6.4上的红色圈的样本也是支持向量,对于这些样本
,有
(注意后面引入的松弛变量的几何意义),即在
的波动范围内,柔化前几节的约束条件
。
当然,在最大化间隔的同时,不满足约束的样本也应尽可能少。于是,这次的优化目标为:
解释一下该模型:
- 第一项是一直以来最大化间隔都想要优化的项,略;
- 第二项基于不满足约束的样本也应尽可能少这一理念,引入了“0/1损失函数”,当样本 不满足约束时,损失函数取值为1,第二项的取值为C,满足约束时则为0。也就是说,不满足约束的样本越多(n)时,第二项的取值越大(n*C),则越偏离我们想要优化的方向(最小化)。于是,最小化该方程的最优解保证了不满足约束的样本也应尽可能少的要求。
值得注意的是,当C取无穷大时,最小化该方程的最优解迫使所有样本均满足约束,也就是将(6.29)等价于前面硬间隔的(6.6)。
接下来,按之前的步骤就是开始使用拉格朗日乘子法求对偶问题,但是这里的0/1损失函数非凸非连续,数学性质不太好,使得式(6.29)不易直接求解。
于是,这里使用具有较好的数学性质的代替损失函数(如它们通常是凸的连续函数且是0/1损失函数的上界)。(联系3.3节用対率函数代替单位阶跃函数的思路)
三种常用的替代损失函数:
以下以采用hinge损失为例:
根据hinge损失,将式(6.29)改为:
式(6.35)就是常用的软间隔支持向量机。
注:解释一下从hinge损失到引入松弛变量
的变换:
hinge损失的取值为
,于是引入松弛变量
,它和hinge损失一样有如下性质:
- 当样本满足约束时( ), (hinge损失也为0)
- 当样本不满足约束时( ), (hinge损失为 也大于0)
每个样本都有一个对应的大于等于0的松弛变量 ,用以表征该样本不满足约束( )的程度,对应的松弛变量越大,该样本不满足约束的程度就越大。
于是,我们就可以继续用拉格朗日乘子法求出对偶问题。
注:
由
,可得
进而得出
可以看出,软间隔下的对偶问题和之前硬间隔的对偶问题差别仅在与第二个约束条件中对偶变量的约束不同。于是还是采取之前的方法,用SMO求解,引入核函数得到支持向量展式(与前面的支持向量展式完全一样)
对于软间隔支持向量机,KKT条件要求:
由上图的推导可以看出,软间隔支持向量机的最终模型仅与支持向量有关,即通过hinge损失函数仍保持了稀疏性。
6.4.2 正则化
若用其他损失函数代替原来的0/1损失函数,则可得到其他的学习模型,这些模型的性质与所用的替代函数直接相关,但具有这样的共性:对于优化目标函数,
- 第一项用来描述划分超平面的间隔大小
- 第二项用来表述训练集上的误差
其一般形式为:
从经验风险最小化的角度看,
结构风险表述了我们希望获得具有何种性质的模型(如复杂度最小的模型),有助于削减假设空间,从而降低了最小训练误差的过拟合风险。从降低过拟合风险这个角度看,上图所写的一般形式可称为“正则化问题”(第6.1节也是从降低过拟合的角度出发取 正则化)。于是,结构风险称为正则化项(联系6.1节的 !常用 范数作正则化项),C称为正则化常数。
6.5 支持向量回归
本节从分类问题转向了回归问题,介绍了相对于传统回归问题上对损失的严格定义,支持向量回归(SVR)则对模型输出和真实输出设有容许偏差,只有超过偏差才计算损失。凭此建立了SVR模型,并还是采用6.2节的方法进行求解。
由给定训练样本 ,欲学习的回归模型为 ,使得 与 尽可能接近, 和 是待确定的模型参数。
- 传统回归模型:模型输出 和真实输出 之间的差别来计算损失,当且仅当两者完全相同时,损失才为0
- 支持向量回归模型(SVR):容忍f(x)与y之间最多有 的偏差,即仅当 与 之间的差别绝对值大于 时才计算损失
如图6.6所示,以
为中心,构建一个宽度为
的间隔带,若训练样本落入此间隔带,则认为是被预测正确的。
于是,将SVR形式化为
注:对于式(6.43)的第二项:正则化常数*经验风险,其思路与式(6.29)处的一致。若样本对应的输出值之差在间隔带内( ),其值取0;若差落在间隔带之外,其值取其到间隔带的距离。也就是说, -不敏感损失函数(经验风险)表征了对应样本在模型上的损失程度大小。
于是,式(6.43)在最大化间隔的同时,使样本在模型上的损失也尽量小
由与间隔带两侧的松弛程度可有所不同,这里引入两个松弛变量
和
分别对应两侧的松弛程度,将式(6.43)重写为:
接下来就还是拉格朗日函数求对偶问题和KKT的套路:
由KKT的前两个约束条件可知,
落入
间隔带内的样本
的
取值只能为0;
只有当样本
不落入
间隔带中时,
才能取非零值;(这些样本落在间隔带之外,为支持向量)
将(6.47)代入(6.7),则SVR的解形如:
即能使
的样本即为SVR的支持向量,它们必落在
间隔带之外
注:落入
间隔带内的样本都满足
且
即:对于SVR模型,其支持向量为落在 间隔带之外的样本,这要与之前的SVM分类区别开来。
求解b:还是和前面几节的方法一样,通过对偶问题运用SMO计算出
,若
,则必有
(由KKT的最后两个条件可推),则:
还是和(6.18)一样,为了让结果更鲁棒,选取多个(或所有)满足
的样本求解b后取均值
6.6 核方法
由前面的推导发现,SVM和SVR学得的模型总能表示成核函数的线性组合,并引出了表示定理,强调了该类型的优化问题的解总可表示为核函数的线性组合,并以线性判别分析(LDA)为例向我们演示了如何通过引入核函数(核化)进行非线性拓展。
表示定理:
一系列基于核函数的学习方法,统称为“核方法”(kernel methods)。最常见的,是通过核化(即引入核函数)来将线性学习器拓展为非线性学习器。
以下是以LDA为例进行非线性拓展的演示,得到“核线性判别分析”(Kernelized Linear Discriminant Analysis,简称KLDA)
KLDA的学习目标为:(参考式(3.35))
注:类内散度尽可能小,类间散度尽可能大