浅谈支持向量机
目录
讲支持向量机的文章真的太多了,我觉得讲得最全面的要属这一篇了.我是没有那么深厚的数学功底,写不出那么多理论知识。ok,我是一个崇尚实践的孩子,所以在这里,今天我就以一个实践者的眼光,来浅陋地聊一聊支持向量机,也是为了让自己日后根据这么一种思维来更加方便得理解这个算法。
什么是支持向量机(SVM) #
在《感知机》那篇文章中提到过,感知机是理解支持向量机与神经网络的基础,所以在我看来,支持向量机与其类似,要时刻牢记两个字儿:让分类最优以及让损失最小。
首先如何理解让分类最优。假如一个二维平面中有一些点,我们用一个超平面将这些点分为两类,那么感知机求的是什么,是要求最大间隔,因为只有求出最大间隔,才代表分类效果最好。

如图,浅蓝色线上的拿三个点,就是所谓的支持向量。他们的出现也就代表着间隔最大;中间那条线是最优超平面。当然,现在的数据是线性可分的,如果遇到线性不可分的情况,支持向量机将会如何处理?比如像这样:

此时的数据不能够通过一个一元线性方程来讲数据进行分类,因为现在的数据是一环套一环。说到环,我们想到了圆的方程,于是我们想到了这个方程$$a_1X_1+a_2X_1^2+a_3X_2+a_4X_2^2+a_5X_1X_2+a_6=0$$现在这个方程可以看做是构造了一个五维空间,我们无法想象,但是可以将它映射为三维空间:

看,当将这个立体空间旋转之后,会看到这两簇数据中间能够形成一个超平面将其分为两类。
整理一下我们刚才的思路:我们拿到一份线性不可分的数据,于是将原来的数据映射到了新的空间中,再按照线性可分情况下支持向量机的求解方法来分类。
但是注意,我们刚刚将数据从2维映射成了5维,那么如果我们对一个3维空间做映射,最高会得到一个19维的新空间。看来新空间的维度是成爆炸式增长的,这并不是我们想看到的现象,于是乎这里引出了一个名词:核函数。
核函数 #
对于核函数,可以简单理解为直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果,这样在解决高纬度的问题时也不会出现困难。
核函数主要有以下几种:
-
多项式核
-
高斯核
-
线性核
用一个小故事再次理解一下核函数是如何应用的:
假设现在你是一个农场主,圈养了一批羊群,但为预防狼群袭击羊群,你需要搭建一个篱笆来把羊群围起来。但是篱笆应该建在哪里呢?你很可能需要依据牛群和狼群的位置建立一个“分类器”,比较下图中这几种不同的分类器,我们可以看到支持向量机完成了一个很完美的解决方案。这个例子从侧面简单说明了支持向量机使用非线性分类器的优势,而 Logistic 回归以及决策树都是使用了直线方法。

看到了,用了核函数之后,我们不需要将图形弄成三维的然后换个角度看。
接下来还有个要说的点:使用松弛变量处理离群点的方法
我们在上面讲到,遇到线性不可分的数据,可以讲数据映射到高维空间内。但是有些线性不可分的数据仅仅是因为某些噪音数据造成的,数据本身其实并不是线性不可分的,这些点被成为outlier.
离群点的存在很有可能造成很大的影响,因为超平面本身就是只有少数几个支持向量组成的。

上图中用黑圈圈起来的蓝色点是离群点,它的出现使得求出的最大间隔变小,如果离群点再向右移动一点,就会找不到用于分类的超平面。 看这篇文章
参考 #
[1] http://blog.csdn.net/macyang/article/details/38782399/
[2] http://www.blogjava.net/zhenandaci/archive/2009/03/15/259786.html