支持向量机(一)——完全线性可分
最初学习、理解支持向量机时,有点费劲,参考了一些不错的书籍和博客,这里推荐一下:
1.支持向量机简介
支持向量机(Support Vector Machine,SVM)是一种二类分器,只支持两种类别的分类,不过在一些场合下可以将多个SVM串联起来,达到多分类的目的,下面先从二维情况入手,说明一下SVM如何实现分类。
观察下面这张平面上的图
图 1
蓝色的数据点属于类,绿色的数据点属于类
,中间有一条红色直线将两类数据点分隔开,那么在
平面上可以得到这条直线的方程
,构建SVM模型的过程就是计算参数
、得到这条直线(针对二维的情况而言,多维情况下就是超平面)的过程。分类时,将待分类数据
代入到函数
中,若结果大于0则为类
,小于0则为类
。
2.构建支持向量机
2.1 支持向量
从图1中就可以看到,能将类、类
包含的数据点完全分开的直线实际上有无数条(如红色虚线)
图 2
那么SVM中需要的、要确定的是哪一条呢?SVM的分类方式是计算,如果结果为正/负,那么结果越大/小,我们就越相信为
点属于类
/
,这个概念理解起来比较直观(数学上的证明我也不了解),从几何上看,就是数据点离直线越远,我们越相信其分类的确定性。在图2中,如果直线靠近蓝色点、远离绿色点(直线L1),那么当我们将一个点分类为类
时,会觉得分类结果不那么靠谱,尤其是最靠近直线的数据点,其分类结果最值得怀疑,分类为类
的情况也是如此,如何处理这种情况?找一条直线,让其离类
、类
的点一样远,当然,肯定不是离训练集中所有的数据点一样远,而是离直线距离最近的点的距离,如果我们对这样的点的分类结果也有信心,那么对所有的点的分类结果就更有信心。在下文中,不加强调的话,所说的距离指的就是离直线距离最近的点的距离,具体到图3中就是点
和点
(针对直线L1)。
图 3
在图3中,当采用直线L1作为分类直线时,点和点
离L1最近,当采用直线L2作为分类直线时,点
和点
离L2最近,由此可以看到,是训练集中的数据点决定了分类直线的位置,由于训练集中的数据是有限的,因此一定可以找到这样一条直线:
- 到类
、类
距离相等
- 在满足上面一条条件的直线中,到类
、类
距离最大
构建SVM时需要的直线就是满足这样条件的一条直线,我们确定这样一条直线并不依靠训练集中的所有数据,而是离直线距离最近的点,这些点和原点间形成了一个个向量,称之为支持向量,建模完成后,需要存储的信息就是支持向量的信息。
2.2 寻找最优分类边界
在2.1节中我们已经明白了SVM建模的目标,数据点代入函数 的计算结果可以表示距离,这个距离称为函数距离,等倍数缩放参数
、
时函数距离会改变,但是实际的分类边界超平面
并不会变化,因此 “使函数距离最大化” 作为优化目标并不合适。我们可以采用几何距离,也即是数据点到分类超平面的距离,这里以3维空间中的平面为例,假设某一平面为
其中,为一向量,点
、
为该平面上的两点,则直线
所在向量为
,可得
也即直线上向量与
垂直,由于直线
是任意一条直线,因此
即为法向量
点为待分类数据点,点
为点
在超平面上的投影点,它们之间的距离为
,则可以得到以下等式
(1)
由于点在超平面上,因此
,将上式代入,得到
(2)
我们的目标就是是找到最大的 。 实际上一个平面的法向量有两个方向,也就是说公式(1)、(2)中存在符号正负的问题,为了解决这个问题,可以采用如下方式:由于SVM是一个二分类模型,因此可以将满足
的数据点的类别定为 1,满足
的数据点的类别定为 -1,类别用
表示,然后计算
的值,这样就解决了正负的问题,因为
始终为正
(3)
为什么要将类别 定为1、-1呢? 这还要从SVM建模的目标出发来理解,我们的目的是找到一个使几何距离最大的分类超平面,优化的目标是距离,类别
对优化结果是没有任何影响的,这从公式(2)就可以看出来,我们也可以不用类别
、转而优化
,结果是一样的,类别
取1、-1只是为了方便,当然也可以使类别
取2、-2,是一样的道理。
经过以上的过程,寻找最优分类边界的目标就转化为了计算 的最大值,由于公式(3)中分子和分母项均可变,因此需要约束其中一项,由于
的原因,分子、分母是彼此制约的,约束
为某个值并不容易做到,而且容易做出错误的约束,因此一般约束
为某个固定的值,这里假设约束
,事实上支持向量上的数据点不能保证满足
,不过没关系,可以采用等倍数缩放参数
、
的方式,保证
,超平面位置也不会变化,此时分母
也要乘以相应的系数,公式(3)变为以下形式
式中 为参数参数
、
的缩放倍数,保证支持向量点满足
,这样分子就约束了,现在只需要优化
以保证
最优,由于
为固定值,因此也只需要优化
.我们一般使
取1,原因也是为了方便而已,不影响目标优化,这样一样最终的优化目标就是
(4)
3.小结
第一篇的内容就先到这里,公式(4)的计算放到第二篇中说明。从本篇文章中,可以知道SVM建模的目标,以及如何将建模过程转变为几何与数值计算过程。