[DM]分类-支持向量机

文章目录

一、间隔margin最大化

二、线性问题求解

三、非线性问题求解

四、matlab实现

五、Soft Margin

支持向量机(support vector machines,SVM)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则间隔最大化最终转化为一个凸二次规划问题来求解

分割的前提是样本已经进行过分类,有各自的样本标签。SVM处理线性不可分问题时,将数据点从低维度空间向高维度空间进行映射,然后再利用超平面进行分类。有点类似于神经网络(从原始空间映射到新空间)。

图片


一、间隔margin最大化

SVM是线性分类器,通过形成一个超平面来对样本划分。如下图,虽然每条分割线都能将数据完美分隔开,但很明显并不是每一种划分方式都是最好的。

我们引入margin的概念,如下图:

如上图,正好卡住分界面的点叫做支持向量

margin指用于分割的超平面能够在不同类支持向量间平移的距离margin越大,表示用于分割的超平面容错的能力越强

中间margin这部分是没有点的。很明显如果上图中分割线旋转一些角度,margin就减少了。SVM问题的目标就是找到使margin最大的分割面

如下图样本的红点,蓝点,分割线处。其中,w方向和分割超平面垂直。

所以为求解SVM问题,我们需先知道点到分割面的距离怎么求。

表示投影到分割面上的点。

图片

点到直线的距离为图片的绝对值比w的模。

图片

因为支持向量到分割面的图片差的绝对值都是1,

图片

所以margin的长度为:

图片


二、线性问题求解

我们把分割面以上点称为+1类(y=+1),以下的点称为-1类(y=-1)(没有明确规定)。

图片


求margin最大:

图片

等同于求下式最小:

图片

约束条件:

图片

拉格朗日乘数法:

把(2)、(3)式代回(1)式

我们的目标函数可以转化为求下式的最小值:

其中

对于式(4)的求法我们可以直接调用matlab中的二次规划函数quadprog求解。所以虽然看起来上述的公式推导很繁琐,但在matlab代码里表示的却很简单。

根据求解出的α值代入式(2),我们就得到了向量w。

因为每一个支持向量都满足:

其中下标s表示支持向量。我们把w代入随便一个支持向量,就求解出了b值。

分割超平面:

也就求出来了。


三、非线性问题求解

对于无法通过线性划分来分类的问题,我们最容易想到的是将数据点映射到新的维度空间。如图所示。

数据就可以被线性划分了。

将原始数据向高维度空间投影无疑会帮助我们对问题的求解,但也带来了运算维度高,计算量大的问题。

SVM通过使用核函数巧妙的解决了巨额运算量的问题。

如下图,我们把某m维的向量x映射到高维空间,对应的新向量:

新向量的维度大概为m平方的数量级:

将两个高维向量做内积,维度仍为m平方数量级:

式子很繁琐,但我们惊喜地发现上式和相等:

所以我们取核函数

式子就简单多了。

通过引入核函数,把m平方数量级维度的运算转化为m数量级维度的运算。这就是大名鼎鼎的Kernel Trick

所以对于线性不可分SVM问题,我们还是求

只不过要对H做一点转换:

划分超平面为

在解决实际问题中,除上述核函数外我们还有其他核函数可以选择:


四、matlab实现

1.线性SVM(画圈的点为支持向量):

图片

2.非线性SVM(画圈的点为支持向量):

图片


五、Soft Margin

实际问题中,并不是所有的数据点都可以被一刀切,如图:

图片

实心堆里有空心的,空心堆里有实心的,我们加入一个缓冲参数,惩罚量

图片

还是拉格朗日乘数法:

图片图片

图片

转化为

图片

殊途同归,注意这里图片要小于图片了。


猜你喜欢

转载自blog.51cto.com/15057852/2671190