6 支持向量机
支持向量机(Support Vector Machine)是一种经典的二分类模型,基本模型定义为特征空间中最大间隔的线性分类器,其学习的优化目标便是间隔最大化可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
6.1 间隔与支持向量
间隔
分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同的类别分隔开。直观上看,如在二分类问题中,我们应该去找位于两类训练样本“正中间”的划分超平面,因为它所产生的分类结果是最为鲁棒的,对未见示例的泛化能力越强。
常用的间隔有两个,一种称之为函数间隔,一种为几何间隔。在支持向量机中使用的是几何间隔。
函数间隔:对于给定的训练数据集
,定义超平面 关于样本点 的函数间隔为
定义超平面
显然,对于误分类的样本点
- 几何间隔:在样本空间中,划分超平面可以通过线性方程
来进行描述。其中, 为法向量, 为位移项。样本空间中任意一点 到超平面的距离可写为
此时,为了得到r的绝对值,令r呈上其对应的类别y,即可得到几何间隔的定义:
假设平面
支持向量和最大间隔
- 此时,可以做一次伸缩变换,使得上述等式中的右侧为1。距离超平面最近的这几个训练样本点使得上述等式成立,即
这些训练样本点被称为支持向量(Support Vector)。而两个异类支持向量到超平面的距离之和为
被称为间隔(margin)。
- 支持向量机的学习问题就是求解能够正确划分训练数据集并且使得间隔最大的划分超平面。即
又因为最大化
这是一个凸二次规划问题,可以用现成的优化计算包求解。这就是支持向量机的基本型。
6.2 对偶问题
目标:通过求解上文提及的式子来得到搭建个划分超平面所对应的模型
其中,
为什么要将原问题转化为对偶问题?
- 因为使用对偶问题更容易求解;
- 因为通过对偶问题求解出现了向量内积的形式,从而能更加自然地引出核函数。
对偶问题和拉格朗日乘子法
- 对偶问题,顾名思义,可以理解成优化等价的问题,更一般地,是将一个原始目标函数的最小化转化为它的对偶函数最大化的问题。
- 首先,我们将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数:
其中,
的问题。 3. 由于上述问题是先求最大值再求最小值的问题,而现在我们首先就要面对带有需要求解的参数
这样就将原问题的求最小变成了对偶问题求最大(用对偶这个词还是很形象),接下来便可以先求L对w和b的极小,再求L对α的极大。 4. 首先求
代入
上述求解过程要满足KKT条件(KKT条件是在满足一些有规则的条件下,一个非线性规划问题能有最优化解法的一个必要和充分条件)。
- 然后求
对 的极大:通过SMO算法,可以得到 的解,从而得到 的解,进而得到模型。
- 通过求解上述对偶问题,我们可以得到
的解,从而得到 的解,进而得到模型。
这里实际上只需计算新样本与支持向量的内积,因为对于非支持向量的数据点,其对应的拉格朗日乘子一定为0,根据最优化理论(K-T条件),对于不等式约束
这里,至少有一个的拉格朗日乘子大于0。用反证法可以证明。
SMO算法
SMO(Sequential Minimal Optimization)算法是一种求解支持向量机(SVM)优化问题的有效方法。其基本思想是:如果所有的变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。但是SMO算法并不是一次处理所有变量,而是每次只选择两个变量,固定其他变量,然后针对这两个变量构建一个二次规划问题。这个二次规划问题相对于原始问题要简单很多,可以直接求解,不需要借助于数值优化方法。求解出最优解后,再用这个最优解更新那两个变量,这就完成了一次迭代。SMO算法不断地进行这样的迭代,直到所有变量满足KKT条件为止,这时就找到了原始问题的最优解。
SMO算法的主要步骤如下:
- 选择一对需要优化的变量,这里有一些启发式的方法可以选择违反KKT条件最严重的变量。
- 固定其他变量,只考虑这两个变量,将问题简化为二次规划问题求解。
- 更新这两个变量。
- 检查是否所有变量都满足KKT条件,如果满足,则结束;否则,返回步骤1。
这种方法的优点是每次只需要处理两个变量的优化问题,大大简化了问题的复杂性。
6.3 核函数
线性不可分问题
由于上述的超平面只能解决线性可分的问题,对于线性不可分的问题,例如:异或问题,我们需要使用核函数将其进行推广。
一般地,解决线性不可分问题时,常常采用映射的方式,将低维原始空间映射到高维特征空间,使得数据集在高维空间中变得线性可分,从而再使用线性学习器分类。如果原始空间为有限维,即属性数有限,那么总是存在一个高维特征空间使得样本线性可分。
若
代表一个映射,则在特征空间中的划分函数变为:
按照同样的方法,先写出新目标函数的拉格朗日函数,接着写出其对偶问题,求L关于w和b的极大,最后运用SOM求解α。
- 原始问题的对偶问题为:
- 原分类函数变为:
核函数
- 求解上述问题的关键在于计算
,这个计算量是非常大的,因为它是在高维空间中进行的。为了避免这个问题,我们引入了核函数的概念。我们设想这样一个函数:
其中
- 核函数定理:一个对称函数
是一个合法的核函数的充要条件是,对于任意的 ,其对应的核矩阵
是半正定的。 该定理表明,只要一个对称函数所对应的核矩阵是半正定的,那么这个函数就是一个合法的核函数。事实上,对于一个半正定核矩阵,总能够找到一个与之对应的映射
- 常用的核函数有:
线性核函数:
多项式核函数:
, 为多项式的次数 高斯核函数:
为高斯核的带宽。 Sigmoid核函数:
拉普拉斯核:
此外,还可以通过函数组合得到。
- 线性组合:
- 核函数的直积:
- 若
为核函数,则 也是核函数。
- 线性组合:
6.4 软间隔与正则化
- 前面的讨论中,我们主要解决了两个问题:当数据线性可分时,直接使用最大间隔的超平面划分;当数据线性不可分时,则通过核函数将数据映射到高维特征空间,使之线性可分。
- 然而在现实问题中,对于某些情形还是很难处理,例如数据中有噪声的情形,噪声数据(outlier)本身就偏离了正常位置,但是在前面的SVM模型中,我们要求所有的样本数据都必须满足约束,如果不要这些噪声数据还好,当加入这些outlier后导致划分超平面被挤歪了。

软间隔
- 缓解该问题的一个办法是允许支持向量机在一些样本上出错。为此,要引入 “软间隔”(soft margin)的概念:
- 允许某些数据点不满足约束
; - 同时又使得不满足约束的样本尽可能少。
- 允许某些数据点不满足约束
于是,优化目标变为:
其中,
- 替代损失:然而,上述的损失函数的数学性质不佳。(非凸、非连续),人们使用其他的一些函数来代替上述函数,称为替代损失。替代损失函数一般都有较好的数学性质。以下是常用的替代损失函数:
- hinge 损失:
- 指数损失:
- 对率损失:
- 在支持向量机中,我们所使用的是hinge损失函数。引入松弛变量,则目标函数和约束条件可以改写为
这就是常用的软间隔支持向量机。
- 这仍然是一个二次规划的问题。类似上述内容,我们通过拉格朗日乘数法得到对应的拉格朗日函数:
其中,
代入拉格朗日函数,得到对偶问题:
这是一个凸二次规划问题,可以通过现有的优化算法求解。
- 对于软间隔支持向量机,KKT条件为:
于是,对任意训练样本,总有
正则化
问题:是否可以使用其他的损失函数来替代呢?
- 以使用对率损失为例,我们可以得到对应的优化目标:
这是一个非凸优化问题,一般使用梯度下降等方法求解。 对率回归的优势主要在于其输出具有自然的概率意义,而支持向量机的输出是一个符号。此外,对率回归能直接用于多分类问题,而支持向量机需要进行一些变换。但是,对率损失是光滑的单调递减函数,不能导出类似支持向量的概念,因此对率回归的解依赖于更多的训练样本,其预测开销也更大。
- 正则化:我们可以用更一般的形式来表示支持向量机的优化目标:
其中,
范数正则化:它是常用的正则化项,其中, 范数正则化可以使得模型更稀疏, 范数正则化可以使得模型更平滑。 范数正则化可以用于特征选择, 范数正则化可以用于防止过拟合。
6.5 支持向量回归
现在我们来看看支持向量机的回归版本,支持向量回归(Support Vector Regression,SVR)。SVR是SVM的一个应用,用于回归问题。SVR的目标是找到一个函数f(x)使得预测值与真实值之间的误差最小。
对于回归问题,给定训练数据
对样本
于是,SVR问题为:(此处已经引入松弛变量
引入拉格朗日乘子
后求偏导数,得到:
代入并整理,得到SVR的对偶问题:
KKT条件为:
SVR的解如下:
其中
SVR的优化问题与SVM的优化问题类似,但是SVR的目标是最小化预测值与真实值之间的误差,而SVM的目标是最大化分类间隔。
实践中,我们采用更加鲁棒的方法:选取多个或所有满足条件
同样也可以引入核技巧,把
其中
6.6 核方法
- 回顾前文可以发现,若给定训练样本
,且不考虑偏移项b,则无论是SVM还是SVR,学得得模型总能表示成核函数 的线性组合。不仅如此,事实上,我们有一个更一般的结论: - 表示定理:令
为核函数 对应的再生核希尔伯特空间, 表示 空间中关于h的范数, 中的任意函数 都可以表示成核函数 的线性组合,即:
其中
- 表示定理对损失函数没有限制,对正则化项
仅要求单调递增,甚至不要求其是凸函数,意味着对于一般的损失函数和正则化项,优化问题的最优解都可以表示为核函数 的线性组合;这显示出核函数的巨大威力。 - 核方法:核方法是指通过核函数将输入空间映射到一个更高维的特征空间,从而使得原本线性不可分的问题在新的特征空间中变得线性可分。核方法的基本思想是利用核函数
来隐式地定义一个高维特征空间,而不需要显式地计算出映射后的特征向量,从而避免了维度灾难问题。 - 核线性判别分析:核线性判别分析(Kernel Linear Discriminant Analysis,KLDA)是核方法的一个典型应用。KLDA是线性判别分析(LDA)的核化扩展,通过核函数将输入空间映射到一个更高维的特征空间,从而使得原本线性不可分的问题在新的特征空间中变得线性可分。