支持向量机(SVM)——原理篇

支持向量机(SVM)——原理篇

目录

SVM 简介
线性 SVM 算法原理
非线性 SVM 算法原理

SVM 简介

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM 还包括核技巧,这使它成为实质上的非线性分类器。SVM 的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM 的的学习算法就是求解凸二次规划的最优化算法。

SVM 算法原理

SVM 学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示,

img

即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。

img

在推导之前,先给出一些定义。假设给定一个特征空间上的训练数据集

img

其中,

img

img

img

为第

img

个特征向量,

img

为类标记,当它等于 + 1 时为正例;为 - 1 时为负例。再假设训练数据集是线性可分的。

几何间隔:对于给定的数据集

img

和超平面

img

,定义超平面关于样本点

img

的几何间隔为

img

超平面关于所有样本点的几何间隔的最小值为

img

实际上这个距离就是我们所谓的支持向量到超平面的距离。

根据以上定义,SVM 模型的求解最大分割超平面问题可以表示为以下约束最优化问题

img

img

将约束条件两边同时除以

img

,得到

img

因为

img

都是标量,所以为了表达式简洁起见,令

img

img

得到

img

又因为最大化

img

,等价于最大化

img

,也就等价于最小化

img

img

是为了后面求导以后形式简洁,不影响结果),因此 SVM 模型的求解最大分割超平面问题又可以表示为以下约束最优化问题

img

img

这是一个含有不等式约束的凸二次规划问题,可以对其使用拉格朗日乘子法得到其对偶问题(dual problem)。

首先,我们将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数

img

其中

img

为拉格朗日乘子,且

img

。现在我们令

img

当样本点不满足约束条件时,即在可行解区域外:

img

此时,将

img

设置为无穷大,则

img

也为无穷大。

当满本点满足约束条件时,即在可行解区域内:

img

此时,

img

为原函数本身。于是,将两种情况合并起来就可以得到我们新的目标函数

img

于是原约束问题就等价于

img

看一下我们的新目标函数,先求最大值,再求最小值。这样的话,我们首先就要面对带有需要求解的参数

img

img

的方程,而

img

又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:

img

要有

img

,需要满足两个条件:

① 优化问题是凸优化问题

② 满足 KKT 条件

首先,本优化问题显然是一个凸优化问题,所以条件一满足,而要满足条件二,即要求

img

为了得到求解对偶问题的具体形式,令

img

img

img

的偏导为 0,可得

img

img

将以上两个等式带入拉格朗日目标函数,消去

img

img

, 得

img

img

img

img

img

的极大,即是对偶问题

img

img

img

把目标式子加一个负号,将求解极大转换为求解极小

img

img

img

现在我们的优化问题变成了如上的形式。对于这个问题,我们有更高效的优化算法,即序列最小优化(SMO)算法。这里暂时不展开关于使用 SMO 算法求解以上优化问题的细节,下一篇文章再加以详细推导。

我们通过这个优化算法能得到

img

,再根据

img

,我们就可以求解出

img

img

,进而求得我们最初的目的:找到超平面,即” 决策平面”。

前面的推导都是假设满足 KKT 条件下成立的,KKT 条件如下

img

另外,根据前面的推导,还有下面两个式子成立

img

img

由此可知在

img

中,至少存在一个

img

(反证法可以证明,若全为 0,则

img

,矛盾),对此

img

img

因此可以得到

img

img

对于任意训练样本

img

,总有

img

或者

img

。若

img

,则该样本不会在最后求解模型参数的式子中出现。若

img

,则必有

img

,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。

到这里都是基于训练集数据线性可分的假设下进行的,但是实际情况下几乎不存在完全线性可分的数据,为了解决这个问题,引入了 “软间隔” 的概念,即允许某些点不满足约束

img

采用 hinge 损失,将原优化问题改写为

img

img

img

其中

img

为 “松弛变量”,

img

,即一个 hinge 损失函数。每一个样本都有一个对应的松弛变量,表征该样本不满足约束的程度。

img

称为惩罚参数,

img

值越大,对分类的惩罚越大。跟线性可分求解的思路一致,同样这里先用拉格朗日乘子法得到拉格朗日函数,再求其对偶问题。

综合以上讨论,我们可以得到线性支持向量机学习算法如下:

输入:训练数据集

img

其中,

img

img

输出:分离超平面和分类决策函数

(1)选择惩罚参数

img

,构造并求解凸二次规划问题

img

img

img

得到最优解

img

(2)计算

img

选择

img

的一个分量

img

满足条件

img

,计算

img

(3)求分离超平面

img

分类决策函数:

img

非线性 SVM 算法原理

对于输入空间中的非线性分类问题,可以通过非线性变换将它转化为某个维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。由于在线性支持向量机学习的对偶问题里,目标函数和分类决策函数都只涉及实例和实例之间的内积,所以不需要显式地指定非线性变换而是用核函数替换当中的内积。核函数表示,通过一个非线性转换后的两个实例间的内积。具体地,

img

是一个函数,或正定核,意味着存在一个从输入空间到特征空间的映射

img

,对任意输入空间中的

img

,有

img

在线性支持向量机学习的对偶问题中,用核函数

img

替代内积,求解得到的就是非线性支持向量机

img

综合以上讨论,我们可以得到非线性支持向量机学习算法如下:

输入:训练数据集

img

其中,

img

img

输出:分离超平面和分类决策函数

(1)选取适当的核函数

img

和惩罚参数

img

,构造并求解凸二次规划问题

img

img

img

得到最优解

img

(2)计算

选择

img

的一个分量

img

满足条件

img

,计算

img

(3)分类决策函数:

img

介绍一个常用的核函数——高斯核函数

img

对应的 SVM 是高斯径向基函数分类器,在此情况下,分类决策函数为

img

参考

[1]《统计学习方法》 李航

[2]《机器学习》周志华

[3]Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性 SVM Jack-Cui

[4] 深入理解拉格朗日乘子法(Lagrange Multiplier) 和 KKT 条件

[5] 支持向量机通俗导论(理解 SVM 的三层境界)

[6]Support Vector Machines for Classification

posted @ 2020-06-17 09:29  别再闹了  阅读(439)  评论(0)    收藏  举报