前言
第一次写博客,有不好的地方请各位多加指教;之前对SVM进行了一些学习,每次学习的时候又感觉很多东西都忘掉了;之前暑假的时候又进行了一次较为详细的学习,想着记录一下,一些笔记也都准备好了,由于若干原因(主要是拖延症晚期)一直拖到现在;本次总结主要是以李航老师的统计学习方法为参考,对书中的思路做一个梳理(因此想要了解或者回顾SVM的话,本文会有一点帮助,如果想仔细学习的话还是要结合《统计学习方法》进行学习),同时记录一些需要注意的点和自己的一些理解,书上写得很详细的内容(如公式推导之类的)以及证明(本人能力有限,怕把各位带跑偏了)就不再重复;然后会有一些本人在学习时遇到的一些问题,以及参考其他博客学习。
一、SVM学习回顾
支持向量机是定义在特征空间上的间隔最大的线性分类器;其中,间隔最大使它有别于其他感知机;而核技巧使它成为实质上的非线性分类器。支持向量机的学习策略是间隔最大化,可形式化为一个求解凸二次规划的问题(备注1)。
支持向量机模型可分为线性可分支持向量机(数据线性可分,硬间隔最大化)、线性支持向量机(数据近似线性可分,软间隔最大化)和非线性支持向量机(数据线性不可分,使用核技巧,软间隔最大化)。
核技巧:该方法用于解决非线性分类问题;
SMO:序列最小最优化算法,一种高效的求解SVM参数的方法;
接下来参照统计学习方法进行分节
1 线性可分支持向量机与硬间隔最大化
1.1 线性可分支持向量机
注意感知机利用误分类最小的策略来求分离超平面,而线性可分支持向量机利用间隔最大化;当训练数据集线性可分时,前者有无穷多个解,而后者解唯一。
1.2 函数间隔和几何间隔
函数间隔:
几何间隔:
上面两个公式中,xi为某个训练样本,yi为该样本对应的类标记;
可知函数间隔和几何间隔满足。
超平面参数w和b成比例改变,函数间隔也随之改变,但几何间隔不变; ||w||=1时两者相等。
1.3 间隔最大化
(1) 最大间隔分离超平面
当训练数据集线性可分时,分离超平面有无穷多个,但几何间隔最大的超平面只有一个;这里的间隔最大化又称为硬间隔最大化(与后面的训练数据集近似线性可分时的软间隔最大化相对应);
该节的公式推导不再进行赘述,《统计学习方法》中99-100页中有详细的推导。理解其推导思路:最大间隔分离超平面实际上就是使几何间隔最大,然后几何间隔是函数间隔除以||w||,而函数间隔的大小并不影响优化目标,因此为了简化问题,可将函数间隔置为1(这也是为什么式7.14约束条件会有一个减1,这个1代表的就是函数间隔),此时问题转化为最大化1/||w||,为了求解方便,进一步将问题转化为最小化。
线性可分支持向量机学习算法如下:
(2) 支持向量和间隔边界
将距离分离超平面最近的样本点(即使算法7.1中约束条件等号成立的样本点)的实例称为支持向量;再次注意,在最优化问题中,支持向量对应的函数间隔为1,这是一开始就规定好的。
将H1和H2称为间隔边界。
删除或改变在间隔边界以外的点不会影响最大间隔分离超平面;支持向量的个数一般很少,所以支撑向量机由很少的训练样本确定。
1.3 学习的对偶算法
该部分将求解线性可分支持向量机的最优化问题作为原问题,运用拉格朗日对偶性(备注2),通过求解对偶问题来获取原始问题的最优解。
首先是原问题:
针对约束条件中的每个不等式引入拉格朗日乘子,构建拉格朗日函数:
其中是拉格朗日乘子向量,注意拉格朗日乘子均为非负数。
那么原问题就是
那么其对偶问题就是
针对该对偶问题的解决,书中有详细的求解过程,在此不做赘述;关于对偶问题,《统计学习方法》的附录C有很详细的讲解。另外为什么要转化为对偶问题来求解可见后面的备注3
最终结果:
(6)
注意,不为零当且仅当xi为支持向量;这是因为原问题中会先对拉格朗日函数L以拉格朗日乘子为自变量进行极大化,由上述问题可知
,而xi不是支持向量时,,那么只能使为0(注意拉格朗日乘子均为非负数)。
从结果可以看出,w是由所有的支持向量加权和得到的(权重就是该支持向量对应的拉格朗日乘子和类标签的乘积),而训练好的SVM对样本x的分类决策函数为
可以看出SVM分类决策函数只依赖于输入样本x和支持向量的内积。
2 线性支持向量机与软间隔最大化
2.1 线性支持向量机
对于训练数据集线性不可分的情况,上面方法并不适用,此时引入线性支持向量机。线性SVM适用的情况是训练数据集近似线性可分(除去一些特异点外,大部分样本点线性可分),此时引入松弛变量,约束条件变为,优化目标从变成了,此时称为软间隔最大化(“软”体现在引入了松弛变量,允许误分类)。其中C为惩罚因子,当C大时,对误分类的惩罚大,当C小时,对误分类的惩罚小;这样做可以在最大化几何间隔的同时限制误分类。
线性SVM学习问题如下:
2.2 学习的对偶算法
该部分与线性可分支持向量机的求解求解思路类似,只不过拉格朗日函数以及约束条件中多了一些关于松弛变量和惩罚因子的项,不再做进一步讲解。
2.3 支持向量
第一幅图为硬间隔下的支持向量,第二幅图为软间隔下的支持向量。可以看出硬间隔的情况下,所有支持向量均在间隔边界上;在软间隔的情况下,支持向量分布在间隔边界上以及间隔边界之间的区域。
结合《统计学习方法》110页的式7.43,
(1)当支持向量在间隔边界上时,该向量对应的松弛变量为0,那么对应的拉格朗日乘子满足:,此时(《统计学习方法中》写的是,但个人感觉也可以等于C,如果哪位有好的理解,麻烦给我讲解一下);
(2)当支持向量在间隔边界与最优分离超平面之间,且分类正确时,那么松弛变量满足(注意1表示的是函数间隔,两个间隔边界之间的函数间隔为2,这两个边界距离最优分离超平面的函数间隔均为1),此时该松弛变量对应的拉格朗日乘子为0(原因与1.3中分析非支持向量对应ai为0的原因一样,在附录C第一页中也有详细的讲解),因此;
(3)当支持向量在间隔边界与最优分离超平面之间,且误分类,那么,此时该松弛变量对应的拉格朗日乘子为0,因此;
(4)当支持向量在最优分离超平面上,那么,,此时该松弛变量对应的拉格朗日乘子为0,因此;
2.4 合页损失函数
之前线性SVM学习问题转变为下面的凸二次规划问题进行求解:
在本节中给出了线性SVM的另一种解释,即最小化下面的目标函数:
该函数第一部分是经验损失(经验风险),我们将称为合页损失函数;该函数的第二部分是正则化项。
在本节中给出了两个问题的等价性,再此不做赘述;
接下来引出0-1损失函数,下图中给出了0-1损失函数与合页损失函数的图示:
可以认为0-1损失函数是二分类问题的真正损失函数,当正确分类时y(w.x+b)为正,此时损失为0;而合页函数是0-1函数的一种上界表示,不仅要求分类正确,而且确信度足够高,损失才为0,而在线性SVM中,表现为间隔边界和分离超平面足够远,并将最终两者之间的函数间隔作为1。之所以不直接以合页损失函数作为优化的目标函数,是因为该函数在(1,0)处不可导。
3 非线性支持向量机与核函数
3.1 核技巧
(1) 非线性分类问题
注意核技巧并不是只应用于SVM,还应用于其他统计学习问题。
相较于线性支持向量机的应用场景(除去一些特异点外,大部分样本点线性可分),平时遇到的问题大多是非线性可分的数据。
解决非线性问题时通常分为两步:(1)首先将非线性可分的数据映射到新的空间(一般新的空间维数更高,甚至是无穷维,一些低维空间的非线性可分的场景在高维空间下会变得线性可分),得到一组线性可分(并非完全线性可分,而是大部分数据线性可分)的数据;(2)在新的线性可分的数据中利用之前的线性分类方法(如线性SVM)进行求解。
核技巧就是属于这样的方法,即通过一个非线性变换将输入空间(欧式空间或者离散集合)映射到一个特征空间(希尔伯特空间)(备注4),使得输入空间的超曲面模型对应于特征空间的超平面模型。
(2) 核函数的定义
定义从欧式空间(或离散空间)到希尔伯特空间的映射函数:
对于原空间的任意两个输入向量x,z,核函数K(x,z)满足,其中“.”表示内积。
先经过映射函数映射再进行内积,计算较为困难,因此核技巧并不显式定义映射函数,而是直接定义核函数K,然后通过核函数K直接获取高维空间的内积(也就是说核函数是现在低维空间进行计算,将实质上的分类效果表现在高维,避免了高维空间的复杂计算)。
另外注意给定核函数后,特征空间与映射函数的取法并不唯一,这在书中也给了相应的例子。
(3) 核技巧在支持向量机中的应用
核技巧在支持向量机中的应用也较为简单,将向量的内积用来替代,此时对偶问题的目标函数为:
。
分类决策函数变为:
当映射函数是非线性函数时,学习到的具有核函数的支持向量机是非线性分类模型。
核技巧巧妙地利用线性分类学习方法与核函数解决非线性问题,学习是隐式地在特征空间进行的,不需要显式的定义特征空间和映射函数。
3.2 正定核
上面内容中提到核技巧不显式构造映射函数,直接构造核函数,那么如何判断一个函数是核函数呢。通常说的核函数指的是正定核函数,书中该节给出了正定核函数的充要条件,由于本人能力有限,该部分就不做梳理了。。。
3.3 常用核函数
本节给出了一些常用的核函数:
多项式核函数:
多项式核函数对应的分类决策函数:
高斯核函数:
高斯核函数对应的分类决策函数:
此外还有一个字符串核函数。
3.4 非线性支持向量机
非线性支持向量的学习算法与线性支持向量机类似,只不过将两向量的内积换为核函数,整个过程如下:
(1)选取适当的核函数K以及惩罚参数C,然后通过拉格朗日对偶问题来求解拉格朗日乘子向量
(2)然后选取一个支持向量来计算b:
(3)最后构造决策函数:
4 序列最小最优化算法
支持向量机的学习问题可以转化为求解凸二次规划问题,且有许多最优化算法来解决凸二次规划问题,但当训练样本容量很大时这些算法往往变得很低效。因此如何高效实现支持向量机学习就成了一个重要问题,现在已经提出了许多快速实现算法,序列最小最优化算法(SMO)就是其中一种。
SMO算法要解决如下凸二次规划的对偶问题:
在该问题中,拉格朗日乘子是变量;当所有变量满足KKT条件(备注2)时,这个最优化问题的解就得到了。
当SMO算法是一种启发式算法,其基本思路是:当未得到解时,先选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,该二次规划问题关于这两个变量的解更接近原始二次规划问题的解(因为该解使得原始二次规划问题的目标函数值更小);之所以构造这个二次规划问题,是因为该问题可以通过解析方法求解,大大提高算法的计算速度。SMO算法重复上述过程,直至所有变量均满足KKT条件。
该算法中两个变量的确定原则:一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。
整个SMO算法包括两部分:(1)求解两个变量二次规划的解析方法;(2)选择变量的启发式方法。
该算法具体内容《统计学习方法》中写的很详细,再次不做赘述;在求解析解的时候,公式会比较复杂,但把变量梳理一下,实际上就是一个二次函数在指定范围内求最优解的过程;另外选择的两个拉格朗日乘子对应样本类别相同以及类别不同,会有不同的处理,结合图7.8进行理解。
二、补充
备注
备注1 凸二次规划
非线性规划是指在约束条件下求目标函数最值,且约束条件以及目标函数中至少存在一个非线性条件函数。
二次规划是非线性规划中的一类问题,在此类问题中,目标函数是变量的二次函数,约束条件是变量的线性不等式。
标准的二次规划问题如下:
二次规划包括凸二次规划和非凸二次规划;
若Q为半正定矩阵,那么目标函数是凸函数,对应的二次规划就是凸二次规划;若可行域不为空,且目标函数在该可行域由下界,那么该问题由全局最小值;
若Q为正定矩阵,那么为凸二次规划,该问题有唯一的全局最小值;
若Q为非正定矩阵,则目标函数是有多个平稳点和局部极小点的NP难问题;
上述内容参照:https://blog.csdn.net/lilong117194/article/details/78204994
备注2 拉格朗日对偶性和KKT条件
接下来的内容附录C中都有,这里再啰嗦一遍。
原问题:
引进广义拉格朗日函数:
那么原问题是
其对偶问题为:
而原问题与对偶问题解之间的关系满足:
那么两者之间什么时候相等呢?定理C.3给出了给出了答案:
定理中提到了仿射函数,最高次数为1的函数为仿射函数,常数项为0的仿射函数为线性函数。
备注3 为什么要转化为对偶问题求解
首先把原问题、构造的拉格朗日函数、对应的对偶问题列出来(以线性可分支持向量机为例):
原问题:
构造的拉格朗日函数:
拉格朗日函数形式下原问题:
对偶函数:
对内层求极小值后可得:
下面4点取自 https://blog.csdn.net/sun_wangdong/article/details/83963114
(1)对偶问题将原始问题中的约束转为了对偶问题中的等式约束
(2)方便核函数的引入
(3)改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
(4)求解更高效,因为只用求解比例系数a,而比例系数a只有支持向量才为非0,其他全为0.
下面谈一下个人理解:
针对于第1条,感觉叙述的不是很清楚,因为转化为对偶问题后可以看到对内层求极小值,得到的形式中条件仍存在不等式,但可以看出相较于原始问题中的不等式约束,对偶问题的不等式约束明显简洁了很多,可以直接获取变量的可行域,SMO中更新变量时也因此很好判断变量的范围,使得SMO求解析解时较为简单。
针对于第2条,很明显可以看出对偶函数进一步化简后含有,那么就很容易将该内积替换成这两个向量的核函数,这在核函数那一节也有提及。
针对于第3条,个人不太理解,没看出来从w的维度转变为样本数量有什么优化的地方,如果有哪位同学有好的理解的话麻烦告诉我一下。
针对于第4条,结合前面的内容不难理解。
另外上面四条,基本上都是从对偶问题对内层求极小值后的形式出发进行分析的,为什么不对原问题内层求极大值后再进行分析呢,很简单,直接这么做的话(即对a进行求导),又重新变成了该问题最开始的形式,只不过不等式约束变成了等式,很可能这些等式是没有共同解,也就是变量w的可行域为空(可能我这么考虑有问题的,大家如果有不同意见麻烦告诉我一下)。
备注4 欧式空间和希尔伯特空间
线性空间:只有加法和数乘。
度量空间:定义了距离。
赋范空间:定义了范数。
线性赋范空间:线性空间 + 范数。
线性度量空间:线性空间 + 距离。
内积空间:线性赋范空间 + 内积。
巴拿赫空间:赋范空间 + 完备性。
欧式空间:内积空间 + 有限维
希尔伯特空间:内积空间(无限维) + 完备性。
上述内容摘自https://www.jianshu.com/p/f14012775d6a和https://blog.csdn.net/lulu950817/article/details/80424288。
可以看出欧式空间与希尔伯特空间有一个重要的区别:希尔伯特空间是无限维的。这里就可以理解为什么讲解核函数时强调输入空间是欧式空间,而特征空间是希尔伯特空间,因为核函数可以隐式地将输入向量映射到无穷维,而希尔伯特空间是无穷维的。
其他问题
为什么高斯核可以将原始维度映射到无穷维
这个问题网上有很多回答,简单来说就是将核函数进行泰勒展开后可以发现,展开式是无穷维的。
线性可分SVM、线性SVM和非线性SVM三者的b是否唯一
首先线性可分SVM最终的b是唯一的,因为此时所有的支持向量均满足,而w和b的确定只取决于支持向量,而支持向量已经确定了,因此b是唯一的;而在线性SVM和非线性SVM(此时假设非线性SVM将输入向量映射到特征空间后用线性SVM进行处理)中,b不是唯一的,此时支持向量满足,不同的支持向量对应的可能是不同的,因此在计算b时,选取不同的支持向量,会得到不同的b。
来源:https://blog.csdn.net/qq_40824311/article/details/100703032