支持向量机是由Vapnik等人于1995年提出来的,是被公认的比较优秀的分类模型,逐渐受到了各领域研究者的关注。
支持向量机的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大化使它有别于感知机。学习策略是间隔最大化,可形式化求解一个凸二次规划的问题。
目录
Why Need SVM?
1 线性可分支持向量机
1.1 函数间隔和几何间隔
函数间隔
几何间隔
1.2 间隔最大化
1.3 支持向量和间隔边界
1.4 对偶算法
1.5 线性可分支持向量机学习算法
2 线性支持向量机
2.1 对偶学习算法
2.2 支持向量
2.3 合页损失函数
3 非线性支持向量机
3.1 核技巧
3.2 正定核
3.3 常用的核函数
3.3 非线性支持向量分类机
4 序列最小最优化算法
4.1 两个变量的二次规划的求解方法
4.2 变量的选择方法
1.第1个变量的选择
2.第2个变量的选择
3.计算阈值b和差值
5 支持向量回归(SVR)
在感知机算法中,使用误分类样本到分隔超平面之间的距离作为损失函数,通过最小化误分类样本到超平面的距离,求得最终的超平面。但是分割超平面的参数W和b的初始值和选择不同的误分类样本,最终分隔超平面是不同的。所以,SVM的出现,就是从这些分隔超平面中选择一个最好的。
给定一个线性可分的训练集,找到一个间隔最大的分隔超平面,将两类数据正确划分。
分类确信度,一个正类样本点,被预测为正类,如果样本点距离超平面越近,预测结果的确信度越高,反之越低。负类样本如此。为了能表示分类预测的确信度,需要定义函数间隔和几何间隔。
对于给定的训练数据集T和超平面, 定义:
使用函数间隔表示分类预测的正确性和确定性,存在的一个问题是,如果参数W和b同时扩大为原来的两倍,分隔超平面没有发生变化,但是函数间隔扩大为原来的两倍。为了解决这个问题,即,为了使得间隔使一个确定的值,需要引出几何间隔。
几何间隔是对分隔超平面的参数W加上一个约束,即归一化,
对于给定的训练数据集T和超平面, 定义:
SVM求解分隔超平面要满足两个条件:
几何间隔最大的超平面:
考虑到函数间隔和几何间隔的关系,最优化问题可改写为:
由于当W和b同时扩大2倍,函数间隔也会同时扩大为原来的2倍,这对于上述的优化问题和约束条件并没有影响,因此,可以取=1,则上述最优化问题变成:
为什么要转化成上述形式?
凸二次规划问题:
在线性可分情况下,训练数据集的样本点中与分隔超平面距离最近的样本点称为支持向量。
支持向量对应的约束条件为:
当时,支持向量所在的超平面为:
当时,支持向量所在的超平面为:
在确定最终的分隔超平面时,只有支持向量起作用,其他的样本点不起作用。
怎样求解线性可分支持向量机的最优化问题?采用对偶算法。根据拉格朗日对偶性,将原始问题转化为对偶问题,通过求解对偶问题的最优解,然后进一步求解原始问题的最优解和,这就是线性可分支持向量机的对偶算法。
采用对偶算法的优点,一是对偶算法往往更容易求解,二是自然的引入核函数,进而推广到非线性分类的问题。
首先,对每个不等式约束引入拉格朗日乘子 ,将其转化为无约束的最优化问题求解,定义以下拉格朗日函数:
其中,为拉格朗日乘子向量。
根据拉格朗日对偶性,原始问题是极小极大问题,对偶问题是极大极小问题:
为了得到对偶问题的解,需要先求对W,b 的极小值,再对求极大值。
(1)分别对W,b求导,令导数等于0:
得:
代入拉格朗日函数,得:
(2) 求对的极大,得到如下对偶问题。
等价于:
对线性可分训练数据集,假设对偶最优化问题对的解为,可以由求得原始最优化问题对w和b的最优解和。
对于一个数据集,其中存在部分奇异点,无法找到一个超平面将两类数据完全分开,但将这些奇异点去除后,剩下的样本点组成的集合时线性可分的,该数据集为线性不可分数据集。线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,因为对于线性不可分的某些奇异点,不能满足所有样本点的几何间隔大于等于分隔超平面关于数据集的几何间隔的约束条件,即函数间隔大于或等于1的约束条件。
为了解决这个问题,对每个样本点引入一个松弛变量, 使得函数间隔加上松弛变量大于等于1。
线性不可分的线性支持向量机的学习问题变成如下凸二次规划问题:
C为惩罚系数,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小。尽量小即间隔尽量大(因为间隔的大小为),同时使误分类点的个数尽量小,C是调和二者的系数。
原始问题的拉格朗日函数为:
其中,
1)先求对的极小:
得:
理论上,对任一适合条件的的, 都可以求出, 线性支持向量机的解b的解不唯一,而是存在于一个区间。
先行支持向量机学习还有另外一种解释,就是最小化以下目标函数:
目标函数的第1项是经验损失,函数称为合页损失函数(hinge loss function)。"+"表示取正值:
图中所示0-1损失函数是二分类分问题的真正损失函数,0-1损失函数非凸、非连续、数学性质不太好,使得目标函数不易直接求解,于是通常用其他一些函数替代0-1损失函数,而替代损失函数是0-1损失函数的上界,合页损失函数是一种常见的替代损失函数。
虚线是感知机的损失函数,当样本点被分类正确时,损失是0,否则是。相比之下,合页损失函数不仅要求分类正确并且要求函数间隔大于1时,损失才是0(否则损失是),所以,合页损失函数对学习有更高的要求。
对于非线性的分类问题,可以使用非线性支持向量机。
非线性问题往往不好求解,通常采取的方法是进行一个非线性变换,将非线性问题变换成线性问题,通过求解变换后的线性问题的方法来求解原来的非线性问题。
核技巧:使用一个线性变换将原空间的数据映射到新空间,然后在新空间里用线性分类学习方法从训练数据中学习分类模型。
核技巧应用到支持向量机的思想是,通过一个非线性变换将输入空间(欧氏空间)对应一个特征空间(希尔伯特空间),使得再输入空间中的超曲面模型对应于特征空间中的超平面模型,这样,分类问题的学习任务通过在特征空间中求解线性支持向量机就可以完成。
将线性支持向量机扩展到非线性支持向量机,只需要将线性支持向量机对偶形式中的内积换成核函数。
当是正定核函数时,问题时凸二次规划问题,解是存在的。
支持向量机的学习问题可以形式化为求解凸二次规划问题,这样凸二次规划问题具有全局最优解,但是,当训练样本容量很大时,一般的最优化算法变得低效,以致无法使用。如何解决这个问题?SMO算法能高效的实现支持向量机的学习。
SMO算法是要求解如下凸二次规划的对偶问题:
式中一个拉格朗日乘子对应一个样本点。
SMO算法的基本思路:如果所有变量的解都满足此最优问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解。更重要的是,这个子问题可以通过解析方法求解,大大提高了整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。
选择两个变量和, 固定其他变量。SMO最优化问题的子问题为:
分析和的约束条件,7.102和7.103将两个变量限制在图中虚对角线上。
将用表示,代入目标函数中,对求导=0,得到旧值和新值的关系。
第一个变量的选择在外层循环,选取违反KKT条件最严重的样本点作为第1个变量。
检验是在的范围内进行的。在检验过程中,首先遍历所有满足条件的样本点,即在间隔边界的支持向量点,检验它们是否满足KKT条件。如果都满足KKT条件,再遍历整个训练集,检验它们是否满足KKT条件。
第二个变量选择在内层循环。
每次完成两个变量和的优化后,都要重新计算阈值b.
传统的回归模型通常直接基于模型输出与真实输出之间的差值来计算损失,当模型输出和真实输出完全相同时,损失才为零。
支持向量回归能容忍和之间最多有的偏差,仅当与之间差别绝对值大于时才计算损失。如图所示,相当于以为中心,构建了一个宽度为2的间隔带,若训练样本落入间隔带,则认为时被预测正确的。
SV问题可形式化为:
由于间隔带两侧的松弛程度可不同,引入松弛变量和, 优化函数为: