Part1-Chapter6-支持向量机(上)

本章书将大部分内容放在了代码上,原理介绍只是一笔带过。但我在似懂非懂地看完原理部分,再看代码时却看得一脸问号。强行记忆也可以,但我觉得没必要,于是上网找了很多介绍svm原理的文章,以下为看完后对算法原理推导的梳理。

当二维平面上有两堆数据时,我们可以画一条直线,将它分为两部分。这条直线可以平行移动,其极限位置为与第一次与数据相交时的两条直线,这两个极限位置间的距离我们称之为间隔。我们可能可以画出很多条这样的直线,但其中一或多条直线具有最大的间隔,因为这样的直线容纳新数据点的能力最强,所以我们称其为最优解。因为这条直线的划分只与与其极限直线相交的数据点相关,因此我们将这两个数据点称为支持向量。

1)决策面方程
对二维平面,直线方程可写为:y=ax + b。进行简单的变化后为ax - y + b = 0,即[a,-1][x,y] + b = 0,即wt * x + b = 0。w即为直线y的法向量。推广到n维,w = [w1,w2…wn] ,x = [x1,x2…xn]。

2)分类间隔方程
我们知道,对 y = ax +b,如果要求其点到直线的距离,有以下公式:
在这里插入图片描述
那么拓展到n维,则有:
在这里插入图片描述
3)约束条件
对二分类问题我们定义类别标签yi,并令y1=1,y2=-1.那么对成功分类的样本点,有:
在这里插入图片描述
若设决策面恰好在间隔的中轴线,且支持向量到其的距离为d,则有:
在这里插入图片描述
这个公式可以两边同除以d,并用新的w,x向量,可得到:
在这里插入图片描述
为了方便我们记为:
在这里插入图片描述
4)线性SVM优化问题基本描述
我们之前得到:
在这里插入图片描述
之前提到,只有支持向量对分类有用,而对于支持向量而言,
在这里插入图片描述
因此,问题化简为:

求d的最大值问题,就变为求W的最小值问题,这个问题又等效于
在这里插入图片描述
这里用平方表示是为了不影响求导,且不影响单调性。
这里有个约束条件:
在这里插入图片描述
为了求最值,我们构造拉格朗日函数:
在这里插入图片描述
其中ai为拉格朗日乘子,其值大于等于0。

然后我们构造一个新函数:
在这里插入图片描述

在这里插入图片描述
时,样本点不符合约束条件,即x在可行解区域外,该函数为正无穷。

在这里插入图片描述
时,样本点在可行解区域内,此时该函数等同于
在这里插入图片描述
也就是说该函数与原函数是等价的。
所以求原函数的最小值,等同于求该函数的最小值:
在这里插入图片描述
但是这一函数的最小值比较难求,为了更方便地进行计算,我们将min和max的顺序对换:
在这里插入图片描述
但进行这一对换需要满足两个条件:问题为凸优化问题且符合kkt条件。

5)对偶问题求解
接下来我们对原问题的对偶问题进行求解。我们先考虑内部最小值。首先令a为定值,分别对w和b求导,并令其导数为0,解得:
在这里插入图片描述
结果代回原式:
在这里插入图片描述在这里插入图片描述
接下来我们求外侧最大值,整体问题描述为:
在这里插入图片描述
6)SMO算法
实际上,我们上面的推导隐含了一个假设,即数据是百分百可分的,然而在实际问题中,我们有时会遇到一些不这么完美的数据。为了处理这样的数据,我们引入松弛变量和惩罚参数C,来允许错误的分类点。
此时的约束条件和目标函数为:
在这里插入图片描述
在这里插入图片描述
对应的拉格朗日函数变为:
在这里插入图片描述
等价于:
在这里插入图片描述
由于约束条件
在这里插入图片描述
我们必须成对地改变ai,设我们改变的ai为a1和a2,则:
在这里插入图片描述
由于同时求两个未知数较难,所以我们可以先求其中一个,再用求出来的值表示另一个。
我们以先求a2为例:
欲求a2的值,我们需要先求出a2的取值范围,设其为L≤a2≤H。那么当y1≠y2时,有:
在这里插入图片描述

在这里插入图片描述
此时
在这里插入图片描述
同理当y1=y2时,有:
在这里插入图片描述
当确定了a2的边界时,我们就可以进行函数推导了:
在这里插入图片描述
这里将a1和a2分离开,因为其它a值在求导时都为0,所以可以视作常数。
因为
在这里插入图片描述
可得a1y1 + a2y2 = B
两边同乘y1得:
在这里插入图片描述
带入原式得:
在这里插入图片描述
此时该函数是一个关于a2的一元函数,我们对其求导并令导数为0,推得:
在这里插入图片描述

在这里插入图片描述
其中Ei为误差项,n为学习效率,
在这里插入图片描述
再由
在这里插入图片描述
推出
在这里插入图片描述
由之前推出的a2的取值范围,我们加上约束条件:
在这里插入图片描述
又:
在这里插入图片描述
推出:
在这里插入图片描述

此时我们已经算出了a1和a2改变后的值,接下来需要求出b的值,因为算出b才能算出f(xi),进而求得误差Ei。当α1 new在0和C之间的时候,根据KKT条件可知,这个点是支持向量上的点。因此,满足下列公式:
在这里插入图片描述
公式两边同时乘y1得:
在这里插入图片描述
因为只有a1和a2有意义,所以提出它们,推出:
在这里插入图片描述
其中:
在这里插入图片描述
所以

同理:

当两个乘子都在边界上,则b阈值和KKT条件一致。当不满足的时候,SMO算法选择他们的中点作为新的阈值:
在这里插入图片描述
于是,我们就求得了更新后的a,b值,重复迭代一定次数后,即得结果。

猜你喜欢

转载自blog.csdn.net/JachinMa/article/details/88882463