通俗易懂的支持向量机SVM

SVM 的原理和目标

几个基本概念

线性可分SVM——线性 SVM——非线性 SVM
1、线性可分SVM,表示可以用一根线非常清晰的划分两个区域;线到支持向量的距离 d 就是最小的。

2、线性 SVM,表示用一根线划分区域后,可能存在误判点,但还是线性的;线到支持向量的距离不一定是最小的,但忽略其他非规则的支持向量。

3、非线性 SVM,表示使用核函数之后,把低维的非线性转换为高维线性

复习下函数和向量

假如有个方程

《通俗易懂的支持向量机SVM》 image

y=x/2-1可以变化为 -x+2y+2=0
f(x,y)=-x+2y+2,其中红色的就是他的法向量
写成向量的形式:

《通俗易懂的支持向量机SVM》 image

改写下

《通俗易懂的支持向量机SVM》 image

前面的系数项可以令其为
《通俗易懂的支持向量机SVM》 image

x,y 的那一项,其实可以演变为 n行,所以可以简化为
《通俗易懂的支持向量机SVM》 image

后面的2是常数项,用 b 代替

这样处理完,我们的式子可以修改为

《通俗易懂的支持向量机SVM》 image

其中 w 就是我们的法线方向,x 是我们的参数,b 是截距项。

此时如果有个
《通俗易懂的支持向量机SVM》 image

带入式子得到是正值,那么就在法线的同方向;否则在法线的逆方向。如果等于0,那么该点就在线上。

f(x1,x2)代表一个线,f(x1,x2,x3)代表一个面,如果是 n 维的,那么给他一个牛逼的名称“超平面”,由于这个名字太牛逼,所以低维的也叫超平面。

计算过程和算法步骤

接入给定一个特征空间上的训练数据集,

《通俗易懂的支持向量机SVM》 image

其中

《通俗易懂的支持向量机SVM》 image

《通俗易懂的支持向量机SVM》 image

这里为什么 y 取值+1和-1?
因为这样取值方便后面的推导,如果非要把+1和-1换为+3和-8什么的,其实没有什么不同。后面推导不受影响。

写成+1和-1的话,那么我们的
《通俗易懂的支持向量机SVM》 image ,那么
《通俗易懂的支持向量机SVM》 image ,两边同时乘以 yj,得到
《通俗易懂的支持向量机SVM》 image

,这样我们就可以很方便的得到两个标记相乘等于两个标记相除。如果选择不同的值,就得不到上面的式子。

推导目标函数

分割平面:

《通俗易懂的支持向量机SVM》 image

训练集:x1,x2,x3……

目标集:y1,y2,y3…… y属于1和-1的集合

新数据的分类:sign(y(x))

根据题设

《通俗易懂的支持向量机SVM》 image

其中
《通俗易懂的支持向量机SVM》 image 就是一个映射,
《通俗易懂的支持向量机SVM》 image 就是原封不动一阶映射,二阶映射的例子如下:

{1,x1,x2,x3}==>{1,x1,x2,x3,x1
2,x22,×3^2,x1x2,x2x3,x1x3}把原来的四维转换成10维。

接下来就有

《通俗易懂的支持向量机SVM》 image

其中:y(x)为预测值,y 为真实值,他们互为推导。最终他们的乘积大于0.

从而可以得到下面的公式(其实是点到直线的距离)

《通俗易懂的支持向量机SVM》 image

我们的目标函数:

《通俗易懂的支持向量机SVM》 image

解释:对于所有的样本到平面的距离求最近,也就是最小值,然后得到的这些平面里面根据 w 和 b再求 最大值。

如何优化

转换等价问题,直接来解决的确棘手。先来看
线性可分的这个图

《通俗易懂的支持向量机SVM》 image

可以看出,有3个支持向量。

上虚线五角星的那个点到红线的距离是一个值,而且是最近的一个距离,假如该距离为 d=3,那么也就是
《通俗易懂的支持向量机SVM》 image

两边同时除以3

《通俗易懂的支持向量机SVM》 image

也就是范数 w 乘以3,但是对整个方程来说位置是不发生变化的。(其实 w 是我们要求的,可以随便设置,总能得到右边为1)

打个比方,假如有个方程 f(x,y)=ax+by+c=0,有个点到该线的距离为d,那么我们可以除以 d,使得到改线的距离为1,可以认为是距离归一处理。那么同理我们总能得到一个 w,使得五角星那个点到红线的距离为1,就得有个约束条件就是
《通俗易懂的支持向量机SVM》 image ,好了,现在这个值要求取最小值,而且又是大于等于1,那么就直接取1就是最小值。

那么新的目标函数就变化为

《通俗易懂的支持向量机SVM》 image

一个数的倒数求最大,也就是这个数求最小,也就是求这个数的平方最小,也就是求这个数平方的一半最小,好了,公式继续演变为:

《通俗易懂的支持向量机SVM》 image

这个就是我们需要求解的目标,假如 n=10000(n 是样本个数),也就是有1万个下面的约束条件下求上式子的最小值,对于这个目标函数如何来求呢?带有约束条件的求极值问题,就想到拉格朗日乘子法。

拉格朗日乘子法和KKT条件

其实拉格朗日乘子法的约束条件是要求等于某个条件,而这里是不等于,也可以这么做。

《通俗易懂的支持向量机SVM》 image

这个式子的暂且放一边,我们来梳理下拉格朗日乘子法。

假设有个函数要求最小值,min f(x),其中有两部分要求,第一部分是不等式部分:

《通俗易懂的支持向量机SVM》 image

《通俗易懂的支持向量机SVM》 image

《通俗易懂的支持向量机SVM》 image

这里所有条件的方向可以修改为

《通俗易懂的支持向量机SVM》 image ,因为可以增加负号来改变方向,不是什么大问题。

最终也就是

《通俗易懂的支持向量机SVM》 image

第二部分是等式部分,记为

《通俗易懂的支持向量机SVM》 image

本科阶段的拉格朗日乘子法只有等式部分,现在这里增加了不等式部分,针对不等式部分,做如下操作。

先设置一系列的
《通俗易懂的支持向量机SVM》 image ,构造一个新的函数

《通俗易懂的支持向量机SVM》 image

这个就是拉格朗日函数。对于这个函数来说,以
《通俗易懂的支持向量机SVM》 image w为变量,对其求导数,可得系数为
《通俗易懂的支持向量机SVM》 image ,在二维坐标上就是一条线,同理
《通俗易懂的支持向量机SVM》 image
《通俗易懂的支持向量机SVM》 image 等。

将他们画在一张坐标系里面,
《通俗易懂的支持向量机SVM》 image

对于这3个线段求取每个 x 点的最小值,得到的是红色的这个区域的线,同理,n 条这样的线也可以得到这样一个凹函数,凹函数必有最大值,并且是全局最大。

那么
《通俗易懂的支持向量机SVM》 image 到底是什么?

继续看下

《通俗易懂的支持向量机SVM》 image

《通俗易懂的支持向量机SVM》 image

因为

《通俗易懂的支持向量机SVM》 image


《通俗易懂的支持向量机SVM》 image ,所以
《通俗易懂的支持向量机SVM》 image

因为
《通俗易懂的支持向量机SVM》 image ,所以无论 lambda 取什么值,
《通俗易懂的支持向量机SVM》 image

,这就是说 G(x)是一个 f(x)加上一个负数,那么也就是说 G(x)的最大也就是 f(x)了。

《通俗易懂的支持向量机SVM》 image ,那么要求 minf(x)也就是求
《通俗易懂的支持向量机SVM》 image

可以找到他的对偶函数 《通俗易懂的支持向量机SVM》 image

再回到我们原来的式子,

《通俗易懂的支持向量机SVM》 image

这个式子比上面的理论要简单点,没有等式约束。那么他的原始极小极大问题
《通俗易懂的支持向量机SVM》 image 他的对偶问题为极大极小问题

《通俗易懂的支持向量机SVM》 image

为了求最小值,我们需要对w 和 b 分别求导,并且使之为0,
其中

《通俗易懂的支持向量机SVM》 image

最终得到

《通俗易懂的支持向量机SVM》 image

也就是

《通俗易懂的支持向量机SVM》 image

接下来,对 b 求偏导数,得到

《通俗易懂的支持向量机SVM》 image

w 不就是法向量嘛,其中包含的 alpha=0的点不是支撑向量,而 alpha 不为0 的才是 SV。pha(x)就是核函数,所有的这些在这里可以体现出来了。
归纳下:

《通俗易懂的支持向量机SVM》 image

继续推导。。。带入 w 和 b,剩下 alpha 的式子。

《通俗易懂的支持向量机SVM》 image

最后得到求 alpha 的式子

《通俗易懂的支持向量机SVM》 image

使用某种方法(SMO)求得 alpha,带入 w 和 b 就可以求得 w。

SMO 算法,由条件可知,
[图片上传失败…(image-ab4eb3-1526290967990)]
我们需要调节2个 alpha 参数,一大一小,使得为0,满足条件后求得 alpha 较大值,然后慢慢调节,再得到一个较大值,这样的按照序列求得最大的优化方法叫 SMO

掉个方向,得到

《通俗易懂的支持向量机SVM》 image

举个例子看的明白些:
给定3个数据点,正例点x1=(3,3)T,x2=(4,3)T,反例点 x3=(1,1)T, 求解线性可分的SVM。

《通俗易懂的支持向量机SVM》 image

解:目标函数是

《通俗易懂的支持向量机SVM》 image

[图片上传失败…(image-fbc4d6-1526290967990)]
根据

《通俗易懂的支持向量机SVM》 image

可得

《通俗易懂的支持向量机SVM》 image

其中正例就是 x1=(3,3,1) x2=(4,3,1);负例x3=(1,1,-1)
最后是表示 y 的值。x1对应的系数 alpha1,x2对应的系数是 alpha2,x3对应的系数是 alpha3.

将 alpha3=alpha1+alpha2带入式子计算得到关羽 alpha1和 alpha2 的han 函数

《通俗易懂的支持向量机SVM》 image

对 alpha1和 alpha2求偏导令他为0,得到在(1.5,-1)这个点取到极值,但是改点不满足 alpha2>0这个条件,所以最小值在边界上没有达到。
令 alpha1=0,最小值 s(0,2/13)=-2/13=-0.1538
令 alpha2=0,最小值 s(1/4,0)=-1/4=-0.25
所以得到s(alpha1,alpha2)在1/4,0处达到最小,此时 alpha3=alpha1+alpha2=0.25
所以 alpha1=alpha3=0.25对应点 x1和 x3构成支持向量。
带入公式:

《通俗易懂的支持向量机SVM》 image

这里 fai(xi)就是 xi

得到 w1=w2=0.5 b=-2
所以超平面为

《通俗易懂的支持向量机SVM》 image

图形

《通俗易懂的支持向量机SVM》 image

x1的系数和x3的系数是0.25,而x2的系数是0,也就是说 x2没有参与支持向量的构建,不是支持向量。

以上是线性可分,那么线性不一定可分的咋办呢?
如图

《通俗易懂的支持向量机SVM》 image

按照可分那就是实线,貌似虚线应该更好。
若线性不可分,需要加入松弛因子[图片上传失败…(image-8be0f1-1526290967990)]>=0,
此时约束条件变成:

《通俗易懂的支持向量机SVM》 image 当
《通俗易懂的支持向量机SVM》 image =0就是线性可分。

目标函数:

《通俗易懂的支持向量机SVM》 image

这个式子中,当 C 趋向无穷大的时候,
《通俗易懂的支持向量机SVM》 image 只能取0才能保证能取最小值。C 可以认为是允许犯错误的容忍程度,C 太大,表示对错误完全不能容忍,必须要线性可分。从另外角度来说,C 太大,那么不允许犯错误,那么过渡带就会窄。C 小些的话,过渡带会宽些,也就是泛化能力较强。

归纳下:

《通俗易懂的支持向量机SVM》 image

对应的拉格朗日函数(注意符号,ξ>=0的变化)

《通俗易懂的支持向量机SVM》 image

然后对其求偏导数

《通俗易懂的支持向量机SVM》 image

将三个式子带入

《通俗易懂的支持向量机SVM》 image 把 μ消掉了

对上式子求关羽 α 的极大,得到

《通俗易懂的支持向量机SVM》 image

上式右下角的条件限制了α的取值范围是缩小了的。

进一步整理得到对偶问题

《通俗易懂的支持向量机SVM》 image

再进一步构造最优化问题

《通俗易懂的支持向量机SVM》 image

求解得 a^*

然后计算出w 和 b

《通俗易懂的支持向量机SVM》 image

注意:计算 b 的时候需要满足α在(0,C)之间

最终求得超平面:
《通俗易懂的支持向量机SVM》 image

损失函数分析

《通俗易懂的支持向量机SVM》 image

圆圈的点:他们的α=C,他们是有损失的,并且哪些红色线段表示损失值;虽然他们分的是对的。但是已经进入敏感地带。
方块的星:他们的0 < α < C,是支持向量
其他点:α = 0

损失值=1-d;d 是点到超平面的距离,那么过渡带之外的损失值为0,于是得到 SVM 损失函数图(Hindge损失)

《通俗易懂的支持向量机SVM》 image

也就是
《通俗易懂的支持向量机SVM》 image

但得到这个最小的时候,求得新的 w 和 b。

我们再看下
[图片上传失败…(image-faff7c-1526290967990)]
这里出现了损失函数,经过变换得到新的损失函数

《通俗易懂的支持向量机SVM》 image

后面一项是 L2正则

    原文作者:breezedancer
    原文地址: https://www.jianshu.com/p/7d5693d9e2fe
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞