文章目录
一、间隔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
实际问题中,并不是所有的数据点都可以被一刀切,如图:
实心堆里有空心的,空心堆里有实心的,我们加入一个缓冲参数,惩罚量。
还是拉格朗日乘数法:
转化为
殊途同归,注意这里要小于了。