NO.38.tip: 支持向量机
背景
支持向量机(Support Vector Machine,SVM)的基本模型是定义在特征空间上间隔最大的线性分类器。它是一种二类分类模型,当采用了核技巧之后,支持向量机可以用于非线性分类。不同类型的支持向量机解决不同的问题。
- 线性可分支持向量机(也称为硬间隔支持向量机):当训练数据线性可分时,通过硬间隔最大化,学得一个线性可分支持向量机。
- 线性支持向量机(也称为软间隔支持向量机):当训练数据近似线性可分时,通过软间隔最大化,学得一个线性支持向量机。
- 非线性支持向量机:当训练数据不可分时,通过使用核技巧以及软间隔最大化,学得一个非线性支持向量机。
在本章中,假设输入空间和特征空间是不同的。通常假设输入空间为欧氏空间,特征空间为希尔伯特空间。此时给定某个输入 ,通过某种映射(可能为线性映射,也可能为非线性映射)到特征空间的表示为 。此时在特征空间中学习线性支持向量机(而不是在输入空间中学习线性支持向量机)。欧氏空间与希尔伯特空间的不同如下:
- 欧氏空间是有限维度的,希尔伯特空间是无穷维度的;
- 欧氏空间 希尔伯特空间 内积空间 赋范空间。
越抽象的空间具有的性质越少,在这样的空间中能得到的结论就越少。不过反过来,如果发现了赋范空间中的某些性质,那么前面那些空间也都具有这个性质。我们生活在三维空间,把它拓展到 维空间就是欧氏空间,这是我们比较熟悉的空间,具有一切美好的性质。当我们不局限于有限维度,就来到了希尔伯特空间。从有限到无限是一个质变,很多美好的性质便消失了,一些非常有悖常识的现象会出现。如果再进一步去掉完备性,就来到了内积空间。如果再进一步去掉“角度”的概念,就来到了赋范空间。在这里,起码我们还有“长度”和“距离”的概念。
源与流
线性可分支持向量机
原始问题
给定一个特征空间上的训练数据集 ,其中 ,,。 为第 个实例; 为 的类标记:
- 若 时,则称 为正例;
- 若 时,则称 为负例。
假设训练数据集线性可分,希望在特征空间中找到一个分离超平面,它能将所有的正例划分到超平面的一侧、所有的负例划分到超平面的另一侧。由于超平面可以用方程 表示,它由法向量 和截距 决定,可以用 来表示,于是需要求得分离超平面的参数 。
当训练数据集线性可分时,理论上存在无穷多个分离超平面可以将两类数据正确分开。线性可分支持向量机提出了间隔最大化这样的约束,最终求得的分离超平面只有唯一的一个。
给定线性可分训练数据集 ,假设通过间隔最大化学习得到的分离超平面为:。定义分类决策函数:。该分类决策函数也称为线性可分支持向量机。
对于线性可分支持向量机,通常可以将一个样本距离分离超平面的远近来表示分类预测的可靠程度:一个样本距离分离超平面越远,则该样本的分类越可靠;一个样本距离分离超平面越近,则该样本的分类就不那么确信。
(给定超平面 ,样本 距超平面的距离为:。 的符号与样本标记 的符号是否一致表示分类是否正确。)
- 时,即 位于超平面上方,将 划分为正类。若 ,则分类正确。
- 时,即 位于超平面下方,将 划分为负类。若 ,则分类正确。
所以可以用 来表示分类的正确性以及确信度(符号决定了正确性,范数决定了确信度)。
给定训练数据集 ,给定超平面 ,定义超平面 关于样本点 的函数间隔为:。定义超平面 关于训练集 的函数间隔为超平面 关于 中所有样本点 的函数间隔之最小值:。
是关于某个样本点的间隔, 是关于训练集的间隔。
函数间隔存在一个重要的缺陷:当成比例地改变 和 (比如将它们改变为 和 ,超平面 不变,但是函数间隔却变为原来的 100 倍。)因此我们引入几何间隔。
对于给定的训练数据集 和超平面 ,定义超平面 关于样本点 的几何间隔为:。定义超平面 关于训练集 的几何间隔为超平面 关于 中所有样本点 的几何间隔之最小值:。
是关于样本点的间隔, 是关于训练集的间隔。
支持向量机的目标是:求解能够正确划分训练数据集,且几何间隔最大的分离超平面。这里的几何间隔最大化又称为硬间隔最大化。
这一目标可以用数学语言描述为约束的最优化问题:
根据几何间隔和函数间隔的关系,问题转化为:
函数间隔 并不影响最优化问题的解(假设将 按比例地改变为 ,此时函数间隔变成 。这一变化对求解最优化问题的不等式约束和最优化目标函数都没有影响),因此令 。同时注意到 等价于 。于是最优化问题改写为:
这是一个凸二次规划问题。
下面给出线性可分支持向量机学习算法——最大间隔法的算法。
- 输入:线性可分训练数据集 。
- 输出:最大几何间隔的分离超平面和分类决策函数。
- 算法步骤如下。
- 构造并且求解约束最优化问题: 求得最优解 。
- 由此得到分离超平面:,以及分类决策函数 。
可以证明若训练数据集 线性可分,最大间隔分离超平面存在且唯一。
假设已经求得最大间隔分离超平面为 。把训练数据集中与 距离最近的样本称为支持向量。支持向量就是那些使得约束条件等号成立的样本:即 。
- 支持向量中的正例位于超平面 。
- 支持向量中的负例位于超平面 。
超平面 、 称为间隔边界。、 和最大间隔分离超平面 平行,且没有任何实例点落在 、 之间。在 、 之间形成一条隔离带,隔离带的宽度为 。
在决定分离超平面时,只有支持向量起作用:
- 如果改变了支持向量,则最大间隔分离超平面也随之改变。
- 如果去掉了间隔边界 、 之外的任何数量的样本,则最大间隔分离超平面是不变的。
所以支持向量在确定最大间隔分离超平面中起着决定性作用(如图 7.1 所示)。这也是支持向量机名称的由来。
对偶问题
我们将求解线性可分支持向量机的最优化问题作为原始最优化问题。通过应用拉格朗日对偶性转化为对偶问题,这就是线性可分支持向量机的对偶算法。在这一过程中可以方便地引入核函数,从而将支持向量机算法推广到非线性分类问题。
原始问题:
定义拉格朗日函数:
其中 为拉格朗日乘子向量。
原始问题的对偶问题是极大极小问题:。
先求 。通过拉格朗日函数的偏导数为零,则有:
求得 ,。
再求极大值。将上面得到的 , 代入拉格朗日函数:
于是待求的问题为:
假定已经求得对偶最优化问题的 的解为 ,则
由于 不是零向量(若它为零向量,则 也为零向量,没有实际应用价值)。则存在某个 使得 。根据 (拉格朗日函数极小值条件),此时必有 。同时考虑 ,得到:
于是最大间隔分离超平面为:
分类决策函数为:
上式称为线性可分支持向量机的对偶形式。可以看到 只依赖于 对应的样本点 ,因此我们将训练数据集里面对应于 的样本点对应的实例 称为支持向量。
对于 的样本点,根据 (拉格朗日函数极小值条件),有:,即 一定在间隔边界上。这与原始问题给出的支持向量的定义是一致的。
下面给出线性可分支持向量机学习算法的对偶算法。
- 输入:线性可分训练数据集 。
- 输出:最大几何间隔的分离超平面和分类决策函数。
- 算法步骤如下。
- 构造并且求解约束最优化问题: 求得最优解 。
- 计算
- 同时选择 的一个正的分量 ,计算
- 由此得到最大几何间隔分离超平面:,以及分类决策函数 。
线性支持向量机
对于线性不可分训练数据,线性支持向量机不再适用。但是可以想办法将它扩展到线性不可分问题。
设训练集为 ,其中 ,,。假设训练数据集不是线性可分的。这意味着某些样本点 不满足函数间隔大于等于 1 的约束条件。对每个样本点 引进一个松弛变量 ,修改最优化目标和约束如下。
- 约束条件修改为:。表示函数间隔加上松弛变量大于等于 1。
- 优化目标修改为:。表示对每个松弛变量 ,支付一个代价 ,这里 称为惩罚参数。
- 值大时,对误分类的惩罚增大,此时误分类点显得更重要。
- 值小时,对误分类的惩罚减小,此时误分类点显得不那么重要。
对应于硬间隔最大化,这里称为软间隔最大化。于是线性不可分的线性支持向量机的学习问题就是求解凸二次规划问题:
这称为线性支持向量机的原始问题。可以证明 的解是唯一的, 的解不是唯一的, 的解存在于一个区间内。
假设求解软间隔最大化问题得到的分离超平面为:,相应的分类决策函数为 。 称为线性支持向量机。
对于线性支持向量机的对偶问题,定义拉格朗日函数为:
原始问题是拉格朗日函数的极小极大问题;对偶问题是拉格朗日函数的极大极小问题。
先求 对 的极小。根据偏导数为 0:
得到:
再求极大问题。将上面三个等式代入拉格朗日函数:
于是得到对偶问题:
设 是对偶问题的一个解。若存在 的某个分量 ,,则线性支持向量机的原始问题的解可以按照下式得到:
于是分离超平面为:。分类决策函数为:。
下面给出线性支持向量机学习算法的对偶算法。
- 输入
- 训练数据集 。
- 惩罚参数 。
- 输出:软间隔最大化分离超平面和分类决策函数。
- 算法步骤如下。
-
求解约束最优化问题: 求得最优解 。
-
计算
-
同时选择 的某个分量 ,计算
可能存在多个符合条件的 。这是由于原始问题中,对 的解不唯一。实际计算时,可以取在所有符合条件的样本点上的平均值。
-
由此得到软间隔最大化分离超平面:,以及分类决策函数 。
-
对偶问题的解 中对应于 的样本点 的实例点 称为支持向量(软间隔的支持向量),可能存在下列情形。
- 若 ,则松弛量 ,支持向量恰好落在了间隔边界上。
- 因为根据 ,得到:
- 当 ,则 ,根据拉格朗日函数极值条件,必须有 ;
- 当 ,则 ,于是 可能为任何正数。
- 若 ,且 ,则支持向量落在间隔边界与分离超平面之间,分类正确。
- 若 ,且 ,则支持向量落在分离超平面上。
- 若 ,且 ,则支持向量落在分离超平面误分类一侧。
根据 的定义,它就是使得函数间隔加上 大于等于 1。即线性可分时,支持向量位于间隔边界: 上;现在支持向量位于 上。
非线性支持向量机
对于给定的训练集 ,其中 ,,,如果能用 中的一个超曲面将正负实例正确分开,则称这个问题为非线性可分问题。
设 是输入空间, 为特征空间(希尔伯特空间)。若存在一个从 到 的映射 ,使得所有的 ,函数 ,则称 为核函数。即核函数将输入空间中的任意两个向量 映射为特征空间中对应的向量之间的内积。
通常我们不关心这个映射的具体表达形式,而是直接给出 。
考虑到在线性支持向量机的对偶形式中,只涉及输入实例和实例之间的内积,故将内积 替换成核函数 。则对偶问题的目标函数成为:
分类决策函数变成:
在给定核函数 的情况下,可以利用求解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,这样的技巧称为核技巧。(在实际应用中,往往依赖经验直接选择核函数,然后验证该核函数确实是有效的核函数。)给出常用的一些核函数如下。
-
多项式核函数:
- 对应的支持向量机是一个 次多项式分类器。
- 此时分类决策函数成为
-
高斯核函数:
- 对应的支持向量机是高斯径向基函数分类器(radial basis function)。
- 此时的分类决策函数成为
-
sigmoid核函数:。
最后我们总结非线性支持向量机学习算法。
- 输入
- 训练数据集 。
- 惩罚参数 。
- 输出:分类决策函数。
- 算法步骤如下。
- 选择适当的核函数 ,求解约束最优化问题: 求得最优解 。
- 计算
- 同时选择 的某个合适的分量 ,计算
- 构造分类决策函数 。
当 是正定核函数时,该问题为凸二次规划问题,解是存在的。
支持向量回归
支持向量机不仅可以用于分类问题,也可以用于回归问题。给定训练数据集 ,其中 ,,。对于样本 通常根据模型输出 与真实值 之间的差别来计算损失,当且仅当 时损失才为零。
支持向量回归(Support Vector Regression,SVR)的基本思路是:允许 与 之间最多有 的偏差。仅当 时,才计算损失。当 时,我们认为预测正确。
用数学语言描述 SVR 问题:
其中 为罚项常数, 为损失函数 ,如图 7.2 所示。 定义为:
线性回归中,损失函数为 。
更进一步,引入松弛变量 ,则新的最优化问题为:
这就是 SVR 原始问题。类似地,引入拉格朗日乘子,,定义拉格朗日函数:
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题
先求极小问题:根据 对 偏导数为零可得:
再求极大问题(取负号变极小问题):
KKT 条件为:
由 KKT 条件可得: 当且仅当 时, 非零; 当且仅当 时, 非零。 约束 与 不能同时成立(若同时成立,则得出 ),因此 中至少一个为零。
假设最终解为 ,在 中,找出 的某个分量 ,则有:
更进一步,如果考虑使用核技巧,给定核函数 ,则 SVR 可以表示为:
SVM的优缺点
支持向量机(Support Vector Machine,SVM)本质上是非线性方法,在样本量比较少的时候,容易抓住数据和特征之间的非线性关系(相比线性分类方法如 logistic regression),因此可以解决非线性问题、可以避免神经网络结构选择和局部极小点问题、可以提高泛化性能、可以解决高维问题。
SVM 对缺失数据敏感,对非线性问题没有通用解决方案,必须谨慎选择核函数来处理,计算复杂度高。主流的算法是 ,这样对大规模数据就显得很无力了。不仅如此,由于其存在两个对结果影响相当大的超参数(如果用 RBF 核,是核函数的参数 gamma 以及惩罚项 ),这两个超参数无法通过概率方法进行计算,只能通过穷举试验来求出,计算时间要远高于不少类似的非线性分类器。