有关支持向量机的理解在网上已经有很多了,我在这里写一下我的学习笔记。(主要参考《统计学习方法》以及部分博客)


支持向量机包含线性可分的支持向量机、线性支持向量机、非线性支持向量机,让我们从简单到复杂来学习它。

一、什么是支持向量机

支持向量机(support vector machines, SVM) 是一种二分类模型。它的基本定义是在特征空间上的间隔最大的线性分类器。借助核技巧,支持向量机成为实质上的非线性分类器。基本的学习策略就是寻找最大化的间隔。

让我们先从线性可分的数据集中获取一些基本概念

1. 间隔(函数间隔和几何间隔)

支持向量机模型构建r代码 支持向量机类型_人工智能


如图,这是一个线性可分的二分类(分为{+1, -1}两类)问题,其中有一个超平面分隔了两类。我们可以认为某点距离超平面越远,它为对应的类别的确信度就越高。即:对于给定的超平面支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_02;点支持向量机模型构建r代码 支持向量机类型_svm_03距离该平面的远近可以相对的使用 支持向量机模型构建r代码 支持向量机类型_人工智能_04来表示。而支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_05的符号与类标记的符号y是否一致就可以表示分类的正确性。因此给出函数间隔(functional margin)的概念:

  • 函数间隔:对于给定的训练集支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_06和超平面支持向量机模型构建r代码 支持向量机类型_支持向量机_07,定义超平面关于样本点支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_08的函数间隔为支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_09定义超平面关于数据集T的函数间隔为所有样本点中函数间隔的最小值。支持向量机模型构建r代码 支持向量机类型_svm_10函数间隔可以表示分类预测的准确性以及确信度。

但是我们不难发现若成比例的增长超平面的参数,超平面不会改变,这对我们要优化参数找到最大间隔造成了不便,因此我们可以对参数进行某些8约束,如规范化,使得支持向量机模型构建r代码 支持向量机类型_支持向量机_11(这里视为L2范数)从而使得间隔是确定的。也就是几何间隔(geometric margin):

  • 几何间隔:对于给定的训练集支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_06和超平面支持向量机模型构建r代码 支持向量机类型_支持向量机_07,定义超平面关于样本点支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_08的几何间隔为:支持向量机模型构建r代码 支持向量机类型_人工智能_15定义超平面关于数据集T的几何间隔为所有样本点中几何间隔的最小值。也就是我们直观上理解的点到超平面的距离。
2.(硬)间隔最大化

支持向量机所寻找的就是所有可分割两类的超平面中,几何间隔最大的超平面。
即下面的约束最优化问题:支持向量机模型构建r代码 支持向量机类型_svm_16转换为函数间隔,我们得到支持向量机模型构建r代码 支持向量机类型_svm_17

  • 由于函数间隔的放缩对于最大间隔没有影响,因此我们这里可以认为函数间隔支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_18.
  • 同时,我们可以将最大化支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_19,转化为最小化凸函数支持向量机模型构建r代码 支持向量机类型_人工智能_20两者是等价的。因此,上面的约束优化问题等价于下面这个凸二次规划问题:
    支持向量机模型构建r代码 支持向量机类型_支持向量机_21

注:凸优化问题是指目标函数和约束函数都是连续可微的凸函数,且等式约束是仿射函数。

求解出优化问题的最优解支持向量机模型构建r代码 支持向量机类型_人工智能_22后,我们就可以得到分离超平面,以及决策函数:支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_23

3. 最大间隔的确定性

这里主要解释证明一下为什么支持向量机有如下定理:

  • 最大间隔分离超平面的存在唯一性:若训练数据集线性可分,则可将数据集中的样本点完全正确分开的最大间隔分离超平面存在且唯一。
  1. 存在性:由于数据集线性可分,则根据最优化问题,我们一定可以找到可行解。又由于目标函数有下界,因此最优化问题一定有解。 由于正负两类的存在,最优解支持向量机模型构建r代码 支持向量机类型_人工智能_24一定不为0。综上我们可以得出分离超平面的可行性。
  2. 唯一性:
  • 运用反证法,假设最优化问题存在两个最优解支持向量机模型构建r代码 支持向量机类型_支持向量机_25支持向量机模型构建r代码 支持向量机类型_支持向量机_26。显然由目标函数,我们得到支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_27.
  • 支持向量机模型构建r代码 支持向量机类型_svm_28。有支持向量机模型构建r代码 支持向量机类型_svm_29,即支持向量机模型构建r代码 支持向量机类型_svm_30,由此我们推知支持向量机模型构建r代码 支持向量机类型_人工智能_31
  • 对于两个最优解支持向量机模型构建r代码 支持向量机类型_机器学习_32,对于训练集中所有的负类支持向量机模型构建r代码 支持向量机类型_人工智能_33,假设支持向量机模型构建r代码 支持向量机类型_机器学习_34是使得约束函数等号成立的点,同样假设支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_35为正类中使得约束函数等号成立的点。根据约束函数,我们可以解出支持向量机模型构建r代码 支持向量机类型_svm_36:支持向量机模型构建r代码 支持向量机类型_支持向量机_37又因为根据不等式约束支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_38两式可以推出支持向量机模型构建r代码 支持向量机类型_支持向量机_39,同理,支持向量机模型构建r代码 支持向量机类型_svm_40.因此我们最终得到:支持向量机模型构建r代码 支持向量机类型_机器学习_41
  • 支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_42,最大分割超平面的唯一性得证。
4. 支持向量和间隔边界

支持向量就是使不等式约束等号成立的点,即:支持向量机模型构建r代码 支持向量机类型_机器学习_43因此对于所有正类和负类,所有都支持向量在超平面支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_44上。如图所示,

支持向量机模型构建r代码 支持向量机类型_机器学习_45


两个超平面之间形成一条长带,分离超平面位于它们中央。长带的宽度,称为间隔。间隔大小为支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_46。同时两个支持向量超平面称为间隔边界。

5. 软间隔

对于线性不可分的数据集,通常情况下,训练数据中有一些特异点,将这些特异点去除后,剩下大部分的样本点组成的集合是线性可分的。

  • 为了解决某些样本点不能满足函数间隔大于1的约束条件,我们可以对每个样本点引入一个松弛变量支持向量机模型构建r代码 支持向量机类型_人工智能_47,使函数间隔加上松弛变量大于等于1.即约束条件变为:支持向量机模型构建r代码 支持向量机类型_机器学习_48与此同时,对于每个松弛向量,我们都支付一个代价。即把目标函数变为:支持向量机模型构建r代码 支持向量机类型_svm_49这里支持向量机模型构建r代码 支持向量机类型_svm_50称为惩罚参数,由具体应用决定。支持向量机模型构建r代码 支持向量机类型_svm_51值很大时对于误分类的惩罚增大。因此对于线性不可分的训练数据集,我们的学习策略是软间隔最大化。
  • 线性不可分的支持向量机的学习问题变为如下凸二次规划问题:支持向量机模型构建r代码 支持向量机类型_支持向量机_52
  • 注意:此时可以证明支持向量机模型构建r代码 支持向量机类型_svm_53的解是唯一的,但支持向量机模型构建r代码 支持向量机类型_人工智能_54的解不唯一,而是存在于一个区间。
  • 此优化问题就是线性支持向量机的通用定义。

二、怎么求解支持向量机

1. 线性可分支持向量机

对于线性可分支持向量机的凸二次规划问题,我们可以构造广义拉格朗日函数:
支持向量机模型构建r代码 支持向量机类型_支持向量机_55其中支持向量机模型构建r代码 支持向量机类型_人工智能_56为拉格朗日乘子向量。
对于原始问题:支持向量机模型构建r代码 支持向量机类型_机器学习_57,由于这是一个凸二次规划问题,因此我们可以运用拉格朗日的对偶性,求解对偶问题来得到原始问题的最优解:支持向量机模型构建r代码 支持向量机类型_svm_58
具体求解过程如下:

  1. 支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_59:
    对拉格朗日函数求梯度并令其等于零:
    支持向量机模型构建r代码 支持向量机类型_机器学习_60得到:
    支持向量机模型构建r代码 支持向量机类型_svm_61代入函数中,得到:

支持向量机模型构建r代码 支持向量机类型_机器学习_62

具体推导见图:

支持向量机模型构建r代码 支持向量机类型_支持向量机_63


由此我们求出了支持向量机模型构建r代码 支持向量机类型_机器学习_64

  1. 求对偶问题支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_65根据拉格朗日对偶问题与原始问题等价的条件成立(KKT条件):
    支持向量机模型构建r代码 支持向量机类型_机器学习_66由此得支持向量机模型构建r代码 支持向量机类型_人工智能_67因此至少有一个支持向量机模型构建r代码 支持向量机类型_人工智能_68,对于此点,有支持向量机模型构建r代码 支持向量机类型_svm_69。由此我们可以求出支持向量机模型构建r代码 支持向量机类型_支持向量机_70从而得到了我们的分离超平面:支持向量机模型构建r代码 支持向量机类型_机器学习_71也就是说,分类只依赖于输入支持向量机模型构建r代码 支持向量机类型_机器学习_72和训练样本输入的内积。

以上就是线性可分的支持向量机学习的基本算法。

2. 线性支持向量机

同之前一样,我们构造广义拉格朗日函数:支持向量机模型构建r代码 支持向量机类型_人工智能_73其中支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_74
首先,我们求支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_75,对支持向量机模型构建r代码 支持向量机类型_人工智能_76求梯度并令其为零。其中前两个与之前一样。
支持向量机模型构建r代码 支持向量机类型_机器学习_77
代入函数中,会发现得到与之前一样的形式:
支持向量机模型构建r代码 支持向量机类型_svm_78因此对偶问题为:
支持向量机模型构建r代码 支持向量机类型_机器学习_79
将约束条件合并,我们可以得到支持向量机模型构建r代码 支持向量机类型_svm_80

对于原始问题和对偶问题等价性的证明,也与之前类似,证明其满足KKT条件即可。
分离超平面:支持向量机模型构建r代码 支持向量机类型_支持向量机_81

在决定分离超平面时,只有支持向量起作用,而其他实例点不起作用。由于支持向量在确定分离超平面中起到决定性作用,所以将这种分类模型成为“支持向量机”。

三、核技巧及非线性SVM

上面只是介绍了线性支持向量机,对于非线性的分类问题,我们可以使用非线性支持向量机,它使用了核技巧。核技巧适用于很多统计学习问题,是十分重要的方法。

1. 非线性分类问题

支持向量机模型构建r代码 支持向量机类型_人工智能_82


非线性问题是指利用非线性模型才能很好分类的问题,如左图所示,我们无法用直线将正负实例分开,但可以用一条椭圆曲线分开。一般来说,对于给定的数据集,其中,实例支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_83,对应的标记有两类支持向量机模型构建r代码 支持向量机类型_人工智能_84。如果能用支持向量机模型构建r代码 支持向量机类型_svm_85中的一个超曲面将正负例正确分开,则称这个问题为非线性可分问题。

但是如果我们将数据集重新映射到一个高维的空间,如右图,我们可以发现有一个超平面将两个类别正确分类。因此我们对于非线性的分类问题,我们往往采用将其重新映射到更高维的空间,以使非线性的问题变换为线性分类问题。然后我们就可以在新空间里用线性分类学习方法从训练数据中学习分类模型。

2. 核函数

定义:设支持向量机模型构建r代码 支持向量机类型_支持向量机_86是输入空间(欧氏空间支持向量机模型构建r代码 支持向量机类型_svm_85的子集或离散集合),又设支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_88为特征空间(希尔伯特空间),如果存在一个从支持向量机模型构建r代码 支持向量机类型_支持向量机_86支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_88的映射支持向量机模型构建r代码 支持向量机类型_人工智能_91使得对所有支持向量机模型构建r代码 支持向量机类型_svm_92,函数支持向量机模型构建r代码 支持向量机类型_svm_93满足条件支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_94则称支持向量机模型构建r代码 支持向量机类型_svm_93为核函数,支持向量机模型构建r代码 支持向量机类型_人工智能_96为映射函数,式中为两函数的内积。

  • 简单来说,可以认为核函数的输入是原空间的两个向量,它的输出是映射到高维空间的两个向量的内积,因此我们不用去求复杂的映射函数支持向量机模型构建r代码 支持向量机类型_机器学习_97而直接获取映射后两个向量的内积。

关于核函数的更通俗的理解,可以看看《关于核函数的一些思考

3. 非线性SVM

之前求解出的对偶问题中,我们发现无论是目标函数还是决策函数都只涉及向量的内积,因此我们考虑可以使用核函数代替,以此来实现非线性支持向量机的学习。

此时对偶问题的目标函数变为支持向量机模型构建r代码 支持向量机类型_人工智能_98

同样,分类决策函数变为支持向量机模型构建r代码 支持向量机类型_人工智能_99

4. 成为核函数的条件

如果我们已知映射函数支持向量机模型构建r代码 支持向量机类型_人工智能_96那么我们就可以通过支持向量机模型构建r代码 支持向量机类型_svm_101直接求得核函数。但实际上我们很难去学习映射函数,那么我们怎样才能不用构造映射函数而直接判断一个给定的函数支持向量机模型构建r代码 支持向量机类型_svm_93是否核函数呢?

我们通常所说的核函数就是正定核函数,对于它的进一步理解,建议看一下这篇教程

  • 正定核的充要条件:设支持向量机模型构建r代码 支持向量机类型_svm_103是对称函数,则支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_104为正定核函数的充要条件是对任意支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_105对应的Gram矩阵:支持向量机模型构建r代码 支持向量机类型_人工智能_106是半正定矩阵。
  • 由此我们可以写出正定核的等价定义:支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_107是定义在支持向量机模型构建r代码 支持向量机类型_支持向量机_108上的对称函数,如果对任意支持向量机模型构建r代码 支持向量机类型_支持向量机_109对应的Gram矩阵是半正定矩阵,则称支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_104是正定核。
    这一定义对于构造核函数时很有用。但对于具体函数我们不容易检验它是否为正定核函数。在实际问题中我们往往应用已有的核函数。
  • 另外,由Mercer定理我们可以得到Mercer核,正定核比它更具有一般性。
5. 常用的核函数
  1. 多项式核函数支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_111对应的支持向量机是一个p次多项式分类器。
  2. 高斯核函数(RBF)支持向量机模型构建r代码 支持向量机类型_机器学习_112对应高斯径向基函数分类器,会将原始空间映射为无穷维空间。通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。

四、支持向量机的进一步理解

1. 支持向量机的另一种解释

支持向量机还有一种解释,就是最小化以下目标函数:支持向量机模型构建r代码 支持向量机类型_支持向量机_113SVM能够同时实现经验风险和结构风险的最小化,从而达到在统计样本量较少的情况下,能获得良好统计规律的目的。

其中第一项是经验风险,称为合页损失函数(hinge loss)即支持向量机模型构建r代码 支持向量机类型_支持向量机模型构建r代码_114当样本点被正确分类且函数间隔大于1时,损失是0,否则会产生损失。目标函数第二项时正则化项,也是结构风险。

2. SMO算法

SMO算法是两变量支持向量机学习的一种快速算法,不断地将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,直到所有变量满足KKT条件位置。证明不在这里详述了,但它具体的学习步骤如图:

支持向量机模型构建r代码 支持向量机类型_svm_115


对于SMO的更深入的理解,请参阅:1、SVM算法实现,2 、SMO优化算法


这里推荐一下July大神的 支持向量机通俗导论(理解SVM的三层境界)说的非常细致且由浅入深。


以上内容如有谬误还请告知。