SVM是数据挖掘十大算法之一,其原理不是很好理解,学习了一些资料之后做一个浅显的笔记,欢迎有机器学习爱好的同仁来交流,和批评指正。
SVM介绍
SVM(Support Vector Machine)指的是支持向量机,是一种分类算法。在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别、分类以及回归分析。在深度学习出现之前,SVM被认为机器学习中近十几年表现最好的算法。
SVM是在一个向量空间内通过找到一个超平面[1],将数据分隔在超平面两侧的算法,从而达到对数据分类,及预测分类的目的。
例子:
区分两个分类哪条线最好?
SVM寻找分类的超平面
SVM寻找区分两类的超平面,使超平面距离支持向量[2]的边际最大
如何选取使边际最大的超平面?
超平面到一侧最近点的距离等于超平面到另一侧最近点的距离,两侧的两个超平面平行
线性可区分和线性不可区分
在上图1给的样本数据中大部分是分布在分隔线两侧的,但是有两个点不是,这样找不到一条直线把样本数据完全分隔开,这时候就是线性不可区分的,图2也是线性不可区分的。这种是比较复杂的情况,我目前只学习了线性可区分的知识。
定义与公式建立
超平面可定义为
以下图为例
这里W和X都是向量,假如平面是二维的,超平面就是一维的,设W向量表示为|w1,w2|,向量X表示为|x1,x2|,超平面公式等价于
w1*x1 + w2*x2 + b = 0
x2 = -w1/w2 * x1 - b/w2
斜率 = -w1/w2
截距 = - b/w2
所以在超平面上方的点满足
w1*x1 + w2*x2 + b > 0
在超平面下方的点满足
w1*x1 + w2*x2 + b < 0
调整b的值,使得超平面到两边支持向量的距离都为1,有
超平面上方的点满足
w1*x1 + w2*x2 + b >= 1
超平面上方边际方程:
w1*x1 + w2*x2 + b = 1
超平面下方的点满足
w1*x1 + w2*x2 + b <= -1
超平面下方边际方程:
w1*x1 + w2*x2 + b = -1
下图超平面的算法
即绿色斜线方程的算法
理解:
第一步 寻找支持向量
一类是(1,1)、(2,0),另一类是(2,3),支持向量点是(1,1)和(2,3),如果如果样本特征向量比较多,寻找支持向量需要计算
第二步 寻找能分隔两类,且距两类点都最远的线
这条线应该满足以下两点:
1、与(1,1)和(2,3)为顶点的线段d垂直
2、能平分线段d
求解过程如下:
为了阅读和理解的方便,将X1 写成 x ,X2 写成y
设斜线方程为:ax+2ay + b = 0
(1,1) 在斜线下方,(2,3)在斜线上方,假使上下边际都是1的情况下,有
1a+2a+b=-1,2a+6a+b=1两个方程成立
得:a = 2/5,b = -11/5
斜线方程:x+ 2y - 5.5 = 0
SVM如何找到边际最大的超平面
其实我也不知道这个公式是怎么推到出来的,涉及到凸优化、KTT条件、拉格朗日公式
超平面:在几何体中,超平面是一维小于其环境空间的子空间,三维空间的超平面是二维,二维空间的超平面就是一维的。
支持向量:就是离分隔超平面最近的那些点。接下来要试着最大化支持向量到分隔面的距离,需要找到此问题的优化求解方法。