机器学习——支持向量机(SVM)算法

1、线性SVM算法

1.1 算法引入

首先,我们给定一张图:

基于支持向量机数据表格 支持向量机算法实例_标量


在上的图示中".“代表正例(+1),”。"代表反例(-1),根据两种样本的分布,我们可以设定一条直线wx+b=0作为不同类样本的分割平面,在超平面的上方表示的是正例,超平面的下方表示的是反例。不难发现,我们只要稍微的对超平面的倾斜程度进行改变,就可以生成一条新的超平面来分割样本点。如下图所示:

基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_02

根据图示,我们发现,任何一个超平面都可以将不同类别的样本点100%的进行分割。那么就引出来我们下面的问题,在这些直线中,什么样的分割超平面是最优的呢?

1.2 分类模型的构建

对应上述的例子,我们可以简单的构建出这样一个分类模型:

基于支持向量机数据表格 支持向量机算法实例_反例_03


在上述的模型中,g(z)表示的是模型的输出结果,基于支持向量机数据表格 支持向量机算法实例_标量_04表示的是分割样本的超平面,其中基于支持向量机数据表格 支持向量机算法实例_正例_05表示分割的平面,其中x表示的是样本输入。w表示直线的的法向量,b表示偏置项。

1.3 间隔的计算

根据上面的描述,对于一个线性可分的空间,我们已经定义了一个超平面的模型,继续回到我们最开始的问题,在这些超平面中,什么样的是最优的呢?

1.3.1 SVM中的“最优”思想

基于支持向量机数据表格 支持向量机算法实例_标量_06


在上面的图示中,我们找到红色的线作为基于支持向量机数据表格 支持向量机算法实例_标量_07,我们分别将这条线向左上和右下进行平移,当分别穿过类别1和类别2的样本时停止,也就是两根黄色的线。将两根黄色的线之间的距离定义为d,可以称之为间隔。将黄色的线穿过的样本称之为支持向量。在SVM算法中,认为当间隔d最大的时候,红色的线是最优的

1.3.2 间隔的数学计算

1.相关定义

线性可分:假设存在超平面(w,b),其中w和b都是向量。可以将空间中的样本点分类正确,则对于任意的样本点(基于支持向量机数据表格 支持向量机算法实例_正例_08)∈D,若基于支持向量机数据表格 支持向量机算法实例_标量_09则有基于支持向量机数据表格 支持向量机算法实例_标量_10;同理,若基于支持向量机数据表格 支持向量机算法实例_标量_11则有基于支持向量机数据表格 支持向量机算法实例_反例_12

样本数据集D,D中的任意一个样本表示为(基于支持向量机数据表格 支持向量机算法实例_正例_13),1<=i<=N,其中基于支持向量机数据表格 支持向量机算法实例_标量_14表示的是一个v维度的列向量,基于支持向量机数据表格 支持向量机算法实例_标量_15是一个标量,表示该样本所属的类别。

线性模型:(w,b) ,其中基于支持向量机数据表格 支持向量机算法实例_标量_16,与上面的例子不同,这里面的基于支持向量机数据表格 支持向量机算法实例_标量_16表示的不再是二维空间的一条直线,而是一个高维度的超平面。其中w是一个v维的列向量。b是一个常数(标量)。

2.两个事实

事实1基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_18是同一个平面。

事实2:点到平面的距离公式,其中平面为基于支持向量机数据表格 支持向量机算法实例_标量_19,则基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_20到平面的距离为基于支持向量机数据表格 支持向量机算法实例_正例_21。推广到高维度的空间之后,向量基于支持向量机数据表格 支持向量机算法实例_标量_22到超平面基于支持向量机数据表格 支持向量机算法实例_标量_16的距离为基于支持向量机数据表格 支持向量机算法实例_正例_24,其中||w||表示向量w的模。

3. 目标函数

根据上面的“最优”思想可以知道,我们的目标是选择使得间隔d最大的直线。此时,我们可以根据事实1,使用一个正实数a来对超平面进行缩放,使得(w,b)——>(aw,ab)。最终使得在支持向量基于支持向量机数据表格 支持向量机算法实例_标量_22上有基于支持向量机数据表格 支持向量机算法实例_反例_26,则此时,支持向量与平面的距离为:
基于支持向量机数据表格 支持向量机算法实例_标量_27

最终,我们给定目标函数为:

  1. 最小化基于支持向量机数据表格 支持向量机算法实例_反例_28,为了求导方便,最小化基于支持向量机数据表格 支持向量机算法实例_反例_29
  2. 限制条件:基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_30
1.4 软间隔与正则化

上面我们描述的是所有的样本可以通过一个超平面完全分开,那么现实的情况往往是很难实现,例如下面的图:

基于支持向量机数据表格 支持向量机算法实例_正例_31

在上面的图示中,我们可以看到有些“+”数据分布在超平面的右下方,有些“-”数据分布在了超平面的左上方。对于这样的数据分布,我们们能做的就是在最大化间隔的同时使得不满足约束的样本的数量尽可能的少。为了衡量这种不满足的约束的样本,我们引入松弛变量的概念。所谓的松弛变量,我们可以简单的理解为对于不满足约束条件的样本的容忍度。则我们可以修改原有的目标函数和限制条件。
基于支持向量机数据表格 支持向量机算法实例_正例_32
基于支持向量机数据表格 支持向量机算法实例_正例_33
基于支持向量机数据表格 支持向量机算法实例_反例_34
我们将基于支持向量机数据表格 支持向量机算法实例_正例_35称为松弛变量,基于支持向量机数据表格 支持向量机算法实例_标量_36称为正则项,C是一个超参数,目的是为了平衡基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_37基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_38的权重关系。

2 非线性SVM算法

2.1 引入

根据我们上面的描述,我们所确定的目标函数以及限制条件都是在数据是线性可分或者大多数都是线性可分的条件下进行设定的。显然,对于一般数据的分布,其都不是线性的,如下面的图所示:

基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_39


显然,对于上图的数据分布,我们是不可能只是使用一个超平面将数据分开的。我们先给出SVM在处理这种非线性问题的基本思想——将低维度的数据映射到更高的维度,对于原始的数据x而言,我们将其映射到高维的φ(x),在从更高维度的空间中寻找能够划分数据的平面。那么,我们接下来的问题就是如何定义映射φ(x)?

2.2 非线性的映射函数φ

对于函数φ,我们先从一个例子开始,如图所示

基于支持向量机数据表格 支持向量机算法实例_反例_40


其中有:

基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_41

其中基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_42基于支持向量机数据表格 支持向量机算法实例_正例_43。假设存在一个映射函数φ(x),将4个x分别映射成了:

基于支持向量机数据表格 支持向量机算法实例_标量_44

在取w,b为:

基于支持向量机数据表格 支持向量机算法实例_正例_45

则可以将原始的数据在高维度的空间中线性可分。也就是说,通过这种高维的映射,将原始线性不可分的样本变成可分的样本时可行的。那么,我们继续更新目标函数和限制条件:

基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_46

基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_47

基于支持向量机数据表格 支持向量机算法实例_反例_34

为了能够使用高维的超平面来分类数据,φ函数的映射之后应该是无限维度的。这样就造成了两个问题。

  1. 对于原始样本,我们无法确定经过φ函数映射之后的φ(x)的显示表示。
  2. 由于φ(x)是无限维度的,这会引起w也是无限维度的。
2.3、 核函数k

根据,上面的介绍,我们可以确定的是,对于无限维度的φ(x),我们是无法确定其显示表达的。所以在这里,我们再引入核函数的概念。
基于支持向量机数据表格 支持向量机算法实例_正例_49
这里我们知道基于支持向量机数据表格 支持向量机算法实例_正例_50均是无限维度的,但是基于支持向量机数据表格 支持向量机算法实例_反例_51就变成了一个标量。这是可以显示知道的。那么,我们是不是可以通过核函数k来求解后面的目标函数和满足限制条件了。

常见的核函数包括两个:

  1. 高斯核
    基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_52
    其中δ表示的是高斯分布的方差。
  2. 多项式核
    基于支持向量机数据表格 支持向量机算法实例_反例_53
    其中d表示多项式的次数。

对于一个核函数基于支持向量机数据表格 支持向量机算法实例_反例_54而言,其能够写成基于支持向量机数据表格 支持向量机算法实例_反例_51,需要满足一下几个条件:

  1. 基于支持向量机数据表格 支持向量机算法实例_反例_56,也就是满足交换性。
  2. 对于任意的基于支持向量机数据表格 支持向量机算法实例_反例_57有其满足半正定性:
    基于支持向量机数据表格 支持向量机算法实例_正例_58

假设,我们已经能够确定了核函数k,那么我们应该如何优化我们的目标函数和限制条件呢?下面我们引入下一个概念。

2.4 、对偶问题
2.4.1 对偶问题的定义

假设,我们要优化的目标函数为f(w),我们要对f(w)进行最小化(也就是对-f(w)进行最大化)。
我们定义p个g函数和q个h函数,对这些函数有下面的限制条件:
基于支持向量机数据表格 支持向量机算法实例_标量_59
我们先用拉格朗日乘子法对f(w)进行变形有:
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_60
转换成向量表示就是:
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_61
其中g(w)和h(w)都是由基于支持向量机数据表格 支持向量机算法实例_反例_62构成的列向量。

下面,对于上面的最小化f(w)问题,我们来正式的定义对偶函数θ:
基于支持向量机数据表格 支持向量机算法实例_标量_63
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_64
该式的意义是,在限制α,β的条件下遍历所有的w,选择L(w,α,β)的最小值。在确定L的最小值之后再去寻找θ(α,β)的最大值

2.4.2、 原问题和对偶问题的关系
  1. 如果基于支持向量机数据表格 支持向量机算法实例_标量_65是原问题的解,基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_66是对偶问题的解,则有:
    基于支持向量机数据表格 支持向量机算法实例_反例_67

简单的证明一下就是:

a) 根据上面的流程,我们首先是遍历w确定的L的最小值,再在已经确定的最小值中修改α和β来找的θ的最大值,也就是有基于支持向量机数据表格 支持向量机算法实例_标量_68

b)其中有基于支持向量机数据表格 支持向量机算法实例_正例_69

c)再有基于支持向量机数据表格 支持向量机算法实例_正例_70,则有基于支持向量机数据表格 支持向量机算法实例_正例_71

d) 根据b,c有基于支持向量机数据表格 支持向量机算法实例_正例_72

2.4.3、 强对偶问题

定义基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_73,其中基于支持向量机数据表格 支持向量机算法实例_标量_74都是最优解,我们将a称之为原问题和对偶问题的间距。对于某些问题而言,有a=0。

强对偶定理

若f(w)是凸函数,g(w),h(w)是线性函数。其中g(w)=Aw+B和h(w)=Cw+D则原问题和对偶问题的间距为0,也就是说:
基于支持向量机数据表格 支持向量机算法实例_反例_75

根据强对偶定理有:
基于支持向量机数据表格 支持向量机算法实例_正例_76

则有:
基于支持向量机数据表格 支持向量机算法实例_正例_77

也就是说:或者基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_78或者基于支持向量机数据表格 支持向量机算法实例_反例_79。这称为KKT条件

2.4.4 SVM目标函数的对偶

我们在来回顾一下我们的目标函数以及限制条件:
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_46
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_47
基于支持向量机数据表格 支持向量机算法实例_反例_34

我们将目标函数视为一个原函数f(w)。其中目标函数对于w而言是一个凸函数,我们用一个图片来表示:

基于支持向量机数据表格 支持向量机算法实例_正例_83

也就是,在基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_84中间的点基于支持向量机数据表格 支持向量机算法实例_标量_85的函数值≤基于支持向量机数据表格 支持向量机算法实例_正例_86。下面,我们将限制条件1稍微的进行一下修改有:

基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_87
其中基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_88

下面我们将目标函数作为f(w),限制条件作为g(w)和h(w)构造出对偶函数:
基于支持向量机数据表格 支持向量机算法实例_反例_89

其中我们要注意到对偶问题的描述和SVM中的问题描述:

  1. 对偶问题的w 对应于 SVM的(w,ξ_i,b)。
  2. 对偶问题的α对应着SVM的(基于支持向量机数据表格 支持向量机算法实例_正例_90)。
  3. 对偶问题中的β没有在SVM的对偶问题中出现。
2.5 对偶问题求解原问题

根据上面的介绍,我们已经将SVM的原问题变成了对偶问题:
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_91

我们利用该对偶问题对参数进行求导有:

基于支持向量机数据表格 支持向量机算法实例_反例_92
基于支持向量机数据表格 支持向量机算法实例_正例_93
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_94
则有:
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_95
基于支持向量机数据表格 支持向量机算法实例_正例_96
基于支持向量机数据表格 支持向量机算法实例_反例_97

将结果带入到θ函数之后有:
基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_98

则综上过程,我们可以确定最终的对偶函数目标为:

基于支持向量机数据表格 支持向量机算法实例_反例_99
基于支持向量机数据表格 支持向量机算法实例_反例_100
基于支持向量机数据表格 支持向量机算法实例_正例_101

到这里,我们在明确一下参数;基于支持向量机数据表格 支持向量机算法实例_正例_102均是训练样本,这是我们已知的。未知的参数是基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_103,根据之前的叙述,我们知道w是无限维度的,我们不能知道w的具体表示,但是我们已经确定了基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_95
基于支持向量机数据表格 支持向量机算法实例_正例_105
这样我们就可以进行对基于支持向量机数据表格 支持向量机算法实例_正例_106的代换,那么下一个就是要确定b,这里在代换和b都确定之后,我们就可知道x对应的分类了。

下面,我们采用KKT条件来确定b,根据KKT中的强对偶条件,我们可以知道:

  1. 要么基于支持向量机数据表格 支持向量机算法实例_标量_107,要么基于支持向量机数据表格 支持向量机算法实例_标量_108
  2. 要么基于支持向量机数据表格 支持向量机算法实例_正例_109,要么基于支持向量机数据表格 支持向量机算法实例_反例_110

我们取基于支持向量机数据表格 支持向量机算法实例_正例_111,则有基于支持向量机数据表格 支持向量机算法实例_标量_112,则此时基于支持向量机数据表格 支持向量机算法实例_正例_113基于支持向量机数据表格 支持向量机算法实例_标量_114,则求解出:
基于支持向量机数据表格 支持向量机算法实例_正例_115
基于支持向量机数据表格 支持向量机算法实例_正例_116
至此,我们就可以确定b了。

在我们确定了w和b后,实际上我们就可以进行分类任务了。

3、 SVM过程描述

  1. 输入基于支持向量机数据表格 支持向量机算法实例_反例_117
  2. 解最优化问题:最大化:基于支持向量机数据表格 支持向量机算法实例_正例_118
    限制条件包括基于支持向量机数据表格 支持向量机算法实例_标量_119基于支持向量机数据表格 支持向量机算法实例_反例_97
  3. 计算b的值,基于支持向量机数据表格 支持向量机算法实例_正例_116
  4. 测试:输入测试样本x
  5. 基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_122
  6. 基于支持向量机数据表格 支持向量机算法实例_基于支持向量机数据表格_123

4、SVM处理多分类

一般情况下,SVM处理多分类包括以下几种方式:

  1. 改造目标函数。使其能够适应多分类。
  2. 确定一个分类,其他的分类算作一个分类。
  3. 每两个分类构建一个SVM分类器。

5、文献参考

  1. 《机器学习》 周志华
  2. 《机器学习》浙江大学