机器学习——支持向量机(SVM)算法
1、线性SVM算法
1.1 算法引入
首先,我们给定一张图:
在上的图示中".“代表正例(+1),”。"代表反例(-1),根据两种样本的分布,我们可以设定一条直线wx+b=0作为不同类样本的分割平面,在超平面的上方表示的是正例,超平面的下方表示的是反例。不难发现,我们只要稍微的对超平面的倾斜程度进行改变,就可以生成一条新的超平面来分割样本点。如下图所示:
根据图示,我们发现,任何一个超平面都可以将不同类别的样本点100%的进行分割。那么就引出来我们下面的问题,在这些直线中,什么样的分割超平面是最优的呢?
1.2 分类模型的构建
对应上述的例子,我们可以简单的构建出这样一个分类模型:
在上述的模型中,g(z)表示的是模型的输出结果,表示的是分割样本的超平面,其中表示分割的平面,其中x表示的是样本输入。w表示直线的的法向量,b表示偏置项。
1.3 间隔的计算
根据上面的描述,对于一个线性可分的空间,我们已经定义了一个超平面的模型,继续回到我们最开始的问题,在这些超平面中,什么样的是最优的呢?
1.3.1 SVM中的“最优”思想
在上面的图示中,我们找到红色的线作为,我们分别将这条线向左上和右下进行平移,当分别穿过类别1和类别2的样本时停止,也就是两根黄色的线。将两根黄色的线之间的距离定义为d,可以称之为间隔。将黄色的线穿过的样本称之为支持向量。在SVM算法中,认为当间隔d最大的时候,红色的线是最优的。
1.3.2 间隔的数学计算
1.相关定义:
线性可分:假设存在超平面(w,b),其中w和b都是向量。可以将空间中的样本点分类正确,则对于任意的样本点()∈D,若则有;同理,若则有。
样本数据集D,D中的任意一个样本表示为(),1<=i<=N,其中表示的是一个v维度的列向量,是一个标量,表示该样本所属的类别。
线性模型:(w,b) ,其中,与上面的例子不同,这里面的表示的不再是二维空间的一条直线,而是一个高维度的超平面。其中w是一个v维的列向量。b是一个常数(标量)。
2.两个事实
事实1:是同一个平面。
事实2:点到平面的距离公式,其中平面为,则到平面的距离为。推广到高维度的空间之后,向量到超平面的距离为,其中||w||表示向量w的模。
3. 目标函数
根据上面的“最优”思想可以知道,我们的目标是选择使得间隔d最大的直线。此时,我们可以根据事实1,使用一个正实数a来对超平面进行缩放,使得(w,b)——>(aw,ab)。最终使得在支持向量上有,则此时,支持向量与平面的距离为:
最终,我们给定目标函数为:
- 最小化,为了求导方便,最小化
- 限制条件:
1.4 软间隔与正则化
上面我们描述的是所有的样本可以通过一个超平面完全分开,那么现实的情况往往是很难实现,例如下面的图:
在上面的图示中,我们可以看到有些“+”数据分布在超平面的右下方,有些“-”数据分布在了超平面的左上方。对于这样的数据分布,我们们能做的就是在最大化间隔的同时使得不满足约束的样本的数量尽可能的少。为了衡量这种不满足的约束的样本,我们引入松弛变量的概念。所谓的松弛变量,我们可以简单的理解为对于不满足约束条件的样本的容忍度。则我们可以修改原有的目标函数和限制条件。
我们将称为松弛变量,称为正则项,C是一个超参数,目的是为了平衡和的权重关系。
2 非线性SVM算法
2.1 引入
根据我们上面的描述,我们所确定的目标函数以及限制条件都是在数据是线性可分或者大多数都是线性可分的条件下进行设定的。显然,对于一般数据的分布,其都不是线性的,如下面的图所示:
显然,对于上图的数据分布,我们是不可能只是使用一个超平面将数据分开的。我们先给出SVM在处理这种非线性问题的基本思想——将低维度的数据映射到更高的维度,对于原始的数据x而言,我们将其映射到高维的φ(x),在从更高维度的空间中寻找能够划分数据的平面。那么,我们接下来的问题就是如何定义映射φ(x)?
2.2 非线性的映射函数φ
对于函数φ,我们先从一个例子开始,如图所示
其中有:
其中,。假设存在一个映射函数φ(x),将4个x分别映射成了:
在取w,b为:
则可以将原始的数据在高维度的空间中线性可分。也就是说,通过这种高维的映射,将原始线性不可分的样本变成可分的样本时可行的。那么,我们继续更新目标函数和限制条件:
为了能够使用高维的超平面来分类数据,φ函数的映射之后应该是无限维度的。这样就造成了两个问题。
- 对于原始样本,我们无法确定经过φ函数映射之后的φ(x)的显示表示。
- 由于φ(x)是无限维度的,这会引起w也是无限维度的。
2.3、 核函数k
根据,上面的介绍,我们可以确定的是,对于无限维度的φ(x),我们是无法确定其显示表达的。所以在这里,我们再引入核函数的概念。
这里我们知道均是无限维度的,但是就变成了一个标量。这是可以显示知道的。那么,我们是不是可以通过核函数k来求解后面的目标函数和满足限制条件了。
常见的核函数包括两个:
- 高斯核
其中δ表示的是高斯分布的方差。 - 多项式核
其中d表示多项式的次数。
对于一个核函数而言,其能够写成,需要满足一下几个条件:
- ,也就是满足交换性。
- 对于任意的有其满足半正定性:
假设,我们已经能够确定了核函数k,那么我们应该如何优化我们的目标函数和限制条件呢?下面我们引入下一个概念。
2.4 、对偶问题
2.4.1 对偶问题的定义
假设,我们要优化的目标函数为f(w),我们要对f(w)进行最小化(也就是对-f(w)进行最大化)。
我们定义p个g函数和q个h函数,对这些函数有下面的限制条件:
我们先用拉格朗日乘子法对f(w)进行变形有:
转换成向量表示就是:
其中g(w)和h(w)都是由构成的列向量。
下面,对于上面的最小化f(w)问题,我们来正式的定义对偶函数θ:
该式的意义是,在限制α,β的条件下遍历所有的w,选择L(w,α,β)的最小值。在确定L的最小值之后再去寻找θ(α,β)的最大值。
2.4.2、 原问题和对偶问题的关系
- 如果是原问题的解,是对偶问题的解,则有:
简单的证明一下就是:
a) 根据上面的流程,我们首先是遍历w确定的L的最小值,再在已经确定的最小值中修改α和β来找的θ的最大值,也就是有。
b)其中有。
c)再有,则有。
d) 根据b,c有。
2.4.3、 强对偶问题
定义:,其中都是最优解,我们将a称之为原问题和对偶问题的间距。对于某些问题而言,有a=0。
强对偶定理:
若f(w)是凸函数,g(w),h(w)是线性函数。其中g(w)=Aw+B和h(w)=Cw+D则原问题和对偶问题的间距为0,也就是说:
根据强对偶定理有:
则有:
也就是说:或者或者。这称为KKT条件
2.4.4 SVM目标函数的对偶
我们在来回顾一下我们的目标函数以及限制条件:
我们将目标函数视为一个原函数f(w)。其中目标函数对于w而言是一个凸函数,我们用一个图片来表示:
也就是,在中间的点的函数值≤。下面,我们将限制条件1稍微的进行一下修改有:
其中
下面我们将目标函数作为f(w),限制条件作为g(w)和h(w)构造出对偶函数:
其中我们要注意到对偶问题的描述和SVM中的问题描述:
- 对偶问题的w 对应于 SVM的(w,ξ_i,b)。
- 对偶问题的α对应着SVM的()。
- 对偶问题中的β没有在SVM的对偶问题中出现。
2.5 对偶问题求解原问题
根据上面的介绍,我们已经将SVM的原问题变成了对偶问题:
我们利用该对偶问题对参数进行求导有:
则有:
将结果带入到θ函数之后有:
则综上过程,我们可以确定最终的对偶函数目标为:
到这里,我们在明确一下参数;均是训练样本,这是我们已知的。未知的参数是,根据之前的叙述,我们知道w是无限维度的,我们不能知道w的具体表示,但是我们已经确定了
这样我们就可以进行对的代换,那么下一个就是要确定b,这里在代换和b都确定之后,我们就可知道x对应的分类了。
下面,我们采用KKT条件来确定b,根据KKT中的强对偶条件,我们可以知道:
- 要么,要么
- 要么,要么
我们取,则有,则此时,,则求解出:
至此,我们就可以确定b了。
在我们确定了w和b后,实际上我们就可以进行分类任务了。
3、 SVM过程描述
- 输入
- 解最优化问题:最大化:
限制条件包括,。 - 计算b的值,
- 测试:输入测试样本x
- 若
- 若
4、SVM处理多分类
一般情况下,SVM处理多分类包括以下几种方式:
- 改造目标函数。使其能够适应多分类。
- 确定一个分类,其他的分类算作一个分类。
- 每两个分类构建一个SVM分类器。
5、文献参考
- 《机器学习》 周志华
- 《机器学习》浙江大学