支持向量机(support vector machines
:SVM
)是一种二分类模型。它是定义在特征空间上的、间隔最大的线性分类器。
间隔最大使得支持向量机有别于感知机。
如果数据集是线性可分的,那么感知机获得的模型可能有很多个,而支持向量机选择的是间隔最大的那一个。
支持向量机还支持核技巧,从而使它成为实质上的非线性分类器。
支持向量机支持处理线性可分数据集、非线性可分数据集。
当输入空间为欧氏空间或离散集合、特征空间为希尔伯特空间时,将输入向量从输入空间映射到特征空间,得到特征向量。
支持向量机的学习是在特征空间进行的。
线性可分支持向量机、线性支持向量机假设这两个空间的元素一一对应,并将输入空间中的输入映射为特征空间中的特征向量。
非线性支持向量机利用一个从输入空间到特征空间的非线性映射将输入映射为特征向量。
欧氏空间是有限维度的,希尔伯特空间为无穷维度的。
欧式空间 希尔伯特空间 内积空间 赋范空间。
欧式空间,具有很多美好的性质。
若不局限于有限维度,就来到了希尔伯特空间。
从有限到无限是一个质变,很多美好的性质消失了,一些非常有悖常识的现象会出现。
如果再进一步去掉完备性,就来到了内积空间。
如果再进一步去掉"角度"的概念,就来到了赋范空间。此时还有“长度”和“距离”的概念。
越抽象的空间具有的性质越少,在这样的空间中能得到的结论就越少
如果发现了赋范空间中的某些性质,那么前面那些空间也都具有这个性质。
给定一个特征空间上的训练数据集 ,其中 。
为第 个特征向量,也称作实例; 为 的类标记; 称作样本点。
假设训练数据集是线性可分的,则学习的目标是在特征空间中找到一个分离超平面,能将实例分到不同的类。
分离超平面对应于方程 , 它由法向量 和截距 决定,可以用 来表示。
给定线性可分训练数据集,通过间隔最大化学习得到的分离超平面为: ,
相应的分类决策函数: ,称之为线性可分支持向量机。
当训练数据集线性可分时,存在无穷个分离超平面可以将两类数据正确分开。
可以将一个点距离分离超平面的远近来表示分类预测的可靠程度:
在超平面 确定的情况下:
能够相对地表示点 距离超平面的远近。
的符号与类标记 的符号是否一致能表示分类是否正确
时,即 位于超平面上方,将 预测为正类。
此时若 则分类正确;否则分类错误。
时,即 位于超平面下方,将 预测为负类。
此时若 则分类正确;否则分类错误。
可以用 来表示分类的正确性以及确信度,就是函数间隔的概念。
对于给定的训练数据集 和超平面
如果成比例的改变 和 ,比如将它们改变为 和 ,超平面 还是原来的超平面,但是函数间隔却成为原来的100倍。
因此需要对分离超平面施加某些约束,如归一化,令 ,使得函数间隔是确定的。此时的函数间隔成为几何间隔。
对于给定的训练数据集 和超平面
定义超平面 关于样本点 的几何间隔为:
定义超平面 关于训练集 的几何间隔为:超平面 关于 中所有样本点 的几何间隔之最小值: 。
由定义可知函数间隔和几何间隔有下列的关系:
当 时,函数间隔和几何间隔相等。
当超平面参数 等比例改变时:
支持向量机学习基本思想:求解能够正确划分训练数据集并且几何间隔最大的分离超平面。几何间隔最大化又称作硬间隔最大化。
对于线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但几何间隔最大的分离超平面是唯一的。
几何间隔最大化的物理意义:不仅将正负实例点分开,而且对于最难分辨的实例点(距离超平面最近的那些点),也有足够大的确信度来将它们分开。
求解几何间隔最大的分离超平面可以表示为约束的最优化问题:
考虑几何间隔和函数间隔的关系,改写问题为:
函数间隔 的大小并不影响最优化问题的解。
假设将 按比例的改变为 ,此时函数间隔变成 (这是由于函数间隔的定义):
因此取 ,则最优化问题改写为:
注意到 和 是等价的,于是最优化问题改写为:
这是一个凸二次规划问题。
凸优化问题 ,指约束最优化问题:
其中:
目标函数 和约束函数 都是 上的连续可微的凸函数。
约束函数 是 上的仿射函数。
称为仿射函数,如果它满足
当目标函数 是二次函数且约束函数 是仿射函数时,上述凸最优化问题成为凸二次规划问题。
线性可分支持向量机原始算法:
输入:线性可分训练数据集 ,其中
输出:
算法步骤:
构造并且求解约束最优化问题:
求得最优解
由此得到分离超平面: ,以及分类决策函数 : 。
可以证明:若训练数据集 线性可分,则可将训练数据集中的样本点完全正确分开的最大间隔分离超平面存在且唯一。
在训练数据集线性可分的情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量。
支持向量是使得约束条件等号成立的点,即 :
超平面 、 称为间隔边界, 它们和分离超平面 平行,且没有任何实例点落在 、 之间。
在 、 之间形成一条长带,分离超平面位于长带的中央。长带的宽度称为 、 之间的距离,也即间隔,间隔大小为 。
在决定分离超平面时,只有支持向量起作用,其他的实例点并不起作用。
由于支持向量在确定分离超平面中起着决定性作用,所以将这种分离模型称为支持向量机。
支持向量的个数一般很少,所以支持向量机由很少的、重要的训练样本确定。
将线性可分支持向量机的最优化问题作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。这就是线性可分支持向量机的对偶算法。
对偶算法的优点:
原始问题:
定义拉格朗日函数:
其中 为拉格朗日乘子向量。
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
先求 。拉格朗日函数分别为 求偏导数,并令其等于 0
设对偶最优化问题的 的解为 ,则根据 KKT
条件有:
根据第一个式子,有: 。
由于 不是零向量(若它为零向量,则 也为零向量,矛盾),则必然存在某个 使得 。
根据第三个式子,此时必有 。同时考虑到 ,得到 :
于是分离超平面写作: 。
分类决策函数写作: 。
上式称作线性可分支持向量机的对偶形式。
可以看到:分类决策函数只依赖于输入 和训练样本的内积。
线性可分支持向量机对偶算法:
输入:线性可分训练数据集 ,其中
输出:
算法步骤:
构造并且求解约束最优化问题:
求得最优解 。
计算 。
选择 的一个正的分量 ,计算 。
由此得到分离超平面: ,以及分类决策函数 : 。
只依赖于 对应的样本点 ,而其他的样本点对于 没有影响。
将训练数据集里面对应于 的样本点对应的实例 称为支持向量。
对于 的样本点,根据 ,有: 。
即 一定在间隔边界上。这与原始问题给出的支持向量的定义一致。
设训练集为 ,其中 。
假设训练数据集不是线性可分的,这意味着某些样本点 不满足函数间隔大于等于 1 的约束条件。
对每个样本点 引进一个松弛变量 ,使得函数间隔加上松弛变量大于等于 1。
即约束条件变成了: 。
对每个松弛变量 ,支付一个代价 。目标函数由原来的 变成:
这里 称作惩罚参数,一般由应用问题决定。
相对于硬间隔最大化, 称为软间隔最大化。
于是线性不可分的线性支持向量机的学习问题变成了凸二次规划问题:
这称为线性支持向量机的原始问题。
因为这是个凸二次规划问题,因此解存在。
可以证明 的解是唯一的; 的解不是唯一的, 的解存在于一个区间。
对于给定的线性不可分的训练集数据,通过求解软间隔最大化问题得到的分离超平面为: ,
以及相应的分类决策函数: ,称之为线性支持向量机。
定义拉格朗日函数为:
原始问题是拉格朗日函数的极小极大问题;对偶问题是拉格朗日函数的极大极小问题。
先求 对 的极小。根据偏导数为0:
得到:
再求极大问题:将上面三个等式代入拉格朗日函数:
于是得到对偶问题:
根据 KKT
条件:
则有: 。
若存在 的某个分量 ,则有:。
若 的所有分量都等于 0 ,则得出 为零,没有任何意义。
若 的所有分量都等于 ,根据 ,则要求 。这属于强加的约束,
分离超平面为: 。
分类决策函数为: 。
线性支持向量机对偶算法:
输入:训练数据集 ,其中
输出:
算法步骤:
选择惩罚参数 ,构造并且求解约束最优化问题:
求得最优解 。
计算 : 。
选择 的一个合适的分量 ,计算: 。
可能存在多个符合条件的 。这是由于原始问题中,对 的解不唯一。所以
实际计算时可以取在所有符合条件的样本点上的平均值。
由此得到分离超平面:,以及分类决策函数: 。
在线性不可分的情况下,对偶问题的解 中,对应于 的样本点 的实例点 称作支持向量,它是软间隔的支持向量。
线性不可分的支持向量比线性可分时的情况复杂一些:
根据 ,以及 ,则:
若 ,则 , 则松弛量 。此时:支持向量恰好落在了间隔边界上。
若 , 则 ,于是 可能为任何正数:
定义取正函数为:
定义合页损失函数为: ,其中 为样本的标签值, 为样本的模型预测值。
则线性支持向量机就是最小化目标函数:
合页损失函数的物理意义:
可以证明:线性支持向量机原始最优化问题等价于最优化问题:
合页损失函数图形如下:
感知机的损失函数为 ,相比之下合页损失函数不仅要分类正确,而且要确信度足够高(确信度为1)时,损失才是0。即合页损失函数对学习有更高的要求。
0-1损失函数通常是二分类问题的真正的损失函数,合页损失函数是0-1损失函数的上界。
理论上SVM
的目标函数可以使用梯度下降法来训练。但存在三个问题:
sub-gradient descent
来解决。非线性分类问题是指利用非线性模型才能很好的进行分类的问题。
对于给定的训练集 ,其中 ,如果能用 中的一个超曲面将正负实例正确分开,则称这个问题为非线性可分问题。
设原空间为 ,新的空间为 。定义
从原空间到新空间的变换(映射)为: 。
则经过变换 :
用线性分类方法求解非线性分类问题分两步:
这一策略称作核技巧。
设 是输入空间(欧氏空间 的子集或者离散集合), 为特征空间(希尔伯特空间)。若果存在一个从 到 的映射 ,使得所有的 , 函数 ,则称 为核函数。
即:核函数将原空间中的任意两个向量 ,映射为特征空间中对应的向量之间的内积。
实际任务中,通常直接给定核函数 ,然后用解线性分类问题的方法求解非线性分类问题的支持向量机。
学习是隐式地在特征空间进行的,不需要显式的定义特征空间和映射函数。
通常直接计算 比较容易,反而是通过 和 来计算 比较困难。
首先特征空间 一般是高维的,甚至是无穷维的,映射 不容易定义。
其次核函数关心的是希尔伯特空间两个向量的内积,而不关心这两个向量的具体形式。因此对于给定的核函数,特征空间 和 映射函数 取法并不唯一。
在线性支持向量机的对偶形式中,无论是目标函数还是决策函数都只涉及输入实例之间的内积。
在对偶问题的目标函数中的内积 可以用核函数 来代替。
此时对偶问题的目标函数成为:
分类决策函数中的内积也可以用核函数代替: 。
核函数替代法,等价于:
若映射函数 为非线性函数,则学习到的含有核函数的支持向量机是非线性分类模型。
若映射函数 为线性函数,则学习到的含有核函数的支持向量机依旧是线性分类模型。
在实际应用中,核函数的选取往往依赖领域知识,最后通过实验验证来验证核函数的有效性。
若已知映射函数 ,那么可以通过 和 的内积求得核函数 。现在问题是:不用构造映射 , 那么给定一个函数 判断它是否是一个核函数?
即: 满足什么条件才能成为一个核函数?
可以证明: 设 是对称函数, 则 为正定核函数的充要条件是:对任意 , 对应的 Gram
矩阵: 是半正定矩阵。
对于一个具体函数 来说,检验它为正定核函数并不容易。因为要求对任意有限输入集 来验证 对应的 Gram
矩阵是否为半正定的。
因此,实际问题中往往应用已有的核函数。
常用核函数:
多项式核函数: 。
对应的支持向量机是一个 次多项式分类器。
高斯核函数:
radial basis function:RBF
,因为其值从 沿着 向外辐射的方向减小。radial basis function
) 。sigmod
核函数: 。
对应的支持向量机实现的就是一种神经网络。
非线性支持向量机学习算法:
输入:训练数据集 ,其中 。
输出:分类决策函数
算法步骤:
求得最优解
当 是正定核函数时,该问题为凸二次规划问题,解是存在的。
支持向量机不仅可以用于分类问题,也可以用于回归问题。
给定训练数据集 ,其中 。
对于样本 ,传统的回归模型通常基于模型输出 与真实输出 之间的差别来计算损失。当且仅当 与 完全相同时,损失才为零。
支持向量回归(Support Vector Regression:SVR
)不同:它假设能容忍 与 之间最多有 的偏差。仅当 时,才计算损失。
支持向量回归相当于以 为中心,构建了一个宽度为 的间隔带。若训练样本落在此间隔带内则被认为是预测正确的。
SVR
问题形式化为:
其中:
为罚项常数。
为损失函数。其定义为:
线性回归中,损失函数为
引入松弛变量 ,将上式写做:
这就是 SVR
原始问题。
引入拉格朗日乘子,,定义拉格朗日函数:
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
先求极小问题:根据 对 偏导数为零可得:
再求极大问题(取负号变极小问题):
上述过程需要满足KKT
条件,即:
可以看出:
当样本 不落入 间隔带中时,对应的 才能取非零值:
此外约束 与 不能同时成立,因此 中至少一个为零。
设最终解 中,存在 ,则有:
最后若考虑使用核技巧,则SVR
可以表示为: 。
通常分类问题是两类或者多类,但有一种分类为一类one class
的分类问题:它只有一个类,预测结果为是否属于这个类。
一类分类的策略是:训练出一个最小的超球面把正类数据包起来。识别一个新的数据点时,如果这个数据点落在超球面内,则属于正类;否则不是。
示例:给定一些用户的购物行为日志,其中包括两类用户:
现在给定一群新的用户,预测这些用户中,哪些可能对该商品有兴趣。
如果简单的使用二类分类问题,则有两个问题:
support vector domain description:SVDD
可以用于一类分类问题。
给定训练集 ,这些样本都是属于同一类。SVDD
的的优化目标是:求一个中心为 ,半径为 的最小球面,使得 中的样本都在该球面中。
类似SVR
,SVDD
允许一定程度上的放松,引入松弛变量。对松弛变量 ,其代价为 。
其中 为惩罚系数:
SVDD
的求解也是采用拉格朗日乘子法:
引入核函数:
其解法类似支持向量机的解法。
判断一个新的数据点 是否属于这个类,主要看它是否在训练出来的超球面内:若 ,则判定为属于该类。
支持向量机的学习问题可以形式化为求解凸二次规划问题。这样的凸二次规划问题具有全局最优解,并且有多种算法可以用于这一问题的求解。
当训练样本容量非常大时,这些算法往往非常低效。而序列最小最优化(sequential minimal optimization:SMO
)算法可以高效求解。
SMO
算法的思路:
若所有变量都满足条件,则最优化问题的解就得到了。
否则,选择两个变量的同时固定其他所有变量,针对这两个变量构建一个二次规划子问题。
这个二次规划子问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。
更重要的是,这个二次规划子问题可以通过解析的方法求解。
此时子问题有两个变量,至少存在一个变量不满足约束条件(否则就是所有变量满足条件了)。
假设其中一个是违反约束最严重的那个,另一个由约束等式自动确定: 。
SMO
算法将原始问题不断地分解为子问题并且对子问题求解,进而达到求解原问题的目的。
整个 SMO
算法包括两部分:
假设选择的两个变量是 , 其他变量 是固定的。
于是 SMO
的最优化问题的子问题为:
其中 为常数, 且目标函数式中省略了不含 的常数项。
的约束条件为:
当 异号时, 位于直线 ,且在矩形范围内。矩形的长为 ,宽为 , 起始点坐标为(0,0)
:
此时 和 的取值范围为:
当 时(上面那条线):
当 时(下面那条线):
当 同号时, 位于直线 ,且在矩形范围内。矩形的长为 ,宽为 , 起始点坐标为(0,0)
:
此时 取值范围为:
当 时:(下面那条线)
假设 的最优解为 ,其初始可行解为 ; 的初始可行解为 。
既然是初始可行解,则需要满足约束条件。因此有
假设 的取值范围为 ,则有:
当 时:
若 ,则 ;若 ,则 。
根据:
则有: 。
当 时:
若 ,则 ;若, 则 。
根据 ,则有:
令 。它表示解得 参数之后,对 的预测值。预测值的正负代表了分类的结果。
令 。
根据 ,将 代入 中。
求解 ,即可得到 的最优解(不考虑约束条件):
其中:
将 截断,则得到 的解析解为:
其中 为初始可行解, 为最终解。
根据 ,以及 ,得到 :
。
其中 为初始可行解, 为最终解。
SMO
算法在每个子问题中选择两个变量进行优化,其中至少一个变量是违反约束条件的。如果都不违反约束条件,则说明已经求解了。第一个变量的选择过程称为外层循环。
外层循环在训练样本中选择违反约束条件最严重的样本点,并将对应的变量作为第一个变量。
具体来讲,就是检验训练样本点 是否满足约束条件(KKT
条件):
其中, 。
检验时:
第二个变量的选择过程称为内层循环。
假设已经在外层循环中找到第一个变量 , 现在要在内层循环中找到第二个变量 。第二个变量选择标准是希望能够使得 有足够大的变化。
由前面式子可知, 依赖于 。一种简单的做法是选择 ,使得对应的 最大。因为 已经确定, 也已经确定。
为了节省计算时间,可以将所有 值保存在一个列表中。
特殊情况下,若内层循环找到的 不能使得目标函数有足够的下降,则采用以下的启发式规则继续选择 :
每次完成两个变量的优化后,都要重新计算 。根据约束条件有:
当 时: 。
代入 的定义式有: 。
同样,当 时有: 。
如果 同时满足 ,则有:
如果 或者为 0,或者为 ,则 区间内的数都可以作为 。此时一个选择是:
每次完成两个变量的优化后,需要更新对应的 值。 的更新要用到 以及所有支持向量对应的 。
SMO
算法:
输入:
输出:近似解
算法步骤:
取初值 ,
选取优化变量 ,解析求解两个变量的最优化问题,求得最优解 ,更新 为 。
若在精度 范围内满足停机条件:
则退出迭代并令 ;否则令 ,继续迭代。
其中 。
支持向量机的优点:
支持向量机的缺点:
SMO
算法时,由于每次都需要挑选一对参数,因此时间复杂度为 ,其中 为 的长度,也就是训练样本的数量。因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。