支持向量机(SVM)是一种两类分类模型,基本模型是定义在特征空间上的间隔最大的线性分类器。它还包括核技巧,这使它成为实质上的非线性分类器。SVM的学习策略就是间隔最大化。假设给定一个特征空间上的训练数据集T={(x1,y1),(x2,y2),......(xN,yN)}, N 为特征数目,yi为标记。(xi,yi)为样本点。学习的目标是在特征空间中找到一个超平面,能够将实例分到不同的类。
一、 线性可分支持向量机
线性可分支持向量机针对于训练数据集线性可分,利用间隔最大化求最优分离超平面。
图 1
考虑如图所示的二维特征空间中的分类问题。图中“o”白表示正例,“+”表示反例。训练数据集线性可分时,可以找到一条直线将两类数据正确划分,并且间隔最大。
1、 函数间隔和几何间隔
图1所示,有A,B,C三个点,表示3个实例,均分离在超平面的反例的一侧,预测他们的类,点A离分离超平面较远,若预测该点为反例,则比较可信,点C离分离超平面较近,若预测该点为反例,则不太可信,点B在A,C之间,可信度在点A,C之间。
一般来说,一个点距离分离超平面的远近可以表示分类预测的确信程度。在超平面w*x+b=0确定的情况下,|w*x+b|能够相对的表示点x距离超平面的远近。而 w*x+b 的符号与类标记 y的符号是否一致能够表示分类是否正确,所以可以用 y(w*x+b)来表示分类的正确性和确信度。
函数间隔: 对于给定的训练数据集 T 和超平面 (w, b),定义超平面 (w, b)关于样本点 (xi,yi)的函数间隔为:
函数间隔可以表示分类预测的正确性和确信度。但是选择超平面时,成比例的改变 w 和b的值,超平面没有变化,但是函数间隔确变为原来的2倍。将超平面的 w加些约束,如规范化,||w||=1,使得间隔是确定的,函数间隔成为几何间隔。
几何间隔:对于给定的训练数据集 T 和超平面 (w, b),定义超平面 (w, b)关于样本点 (xi,yi)的几何间隔为:
定义超平面 (w,b)关于训练数据集 T 的几何间隔 为所有样本点的几何间隔最小值。
从上述定义可知,
如果超平面参数w 和 b 成比例的改变,函数间隔也按此比例改变,几何间隔不变。
2、间隔最大化(硬间隔最大化)
间隔最大化的直观解释:对训练数据集找到集合间隔最大的超平面意味着以充分大的确信度对训练数据进行分类,不仅可以将正负实例点分开,而且对最难分的实例点也有足够大的确信度分开。可以表示为下面的约束最优化问题。
根据函数间隔和几何间隔的关系式,可将上述上述问题写为
等价于
这是一个凸二次规划问题。
3. 支持向量和间隔边界
在线性可分情况下,训练数据集的样本点中与分离超平面最近的实例成为支持向量,支持向量是使约束条件 yi(w*xi+b)-1=0成立的点。
对 yi=+1的正例点,支持向量在超平面 H1:w*x+b=1
对 yi= -1的负例点,支持向量在超平面 H2:w*x+b=-1
H1和H2成为间隔边界
在决定分离超平面时只有支持向量起作用,而其他实例点不起作用,如果移动支持向量将改变所求的解,但是如果在边界以外移动其他实例点,解是不会变的,由于支持向量在确定分离超平面中起着决定性的作用,所以将这种分类模型称为支持向量机。支持向量机的个数一般很少,所以支持向量机由很少的重要的训练样本决定。
4. 学习的对偶算法
应用拉格朗日对偶性求解对偶问题得到原始问题的最优解。
定义拉格朗日函数:
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:
二、线性支持向量机
之前讲述的线性可分支持向量机针对的是训练数据集是线性可分的。对于训练数据集是线性不可分的情况,就要修改硬间隔最大化为软间隔最大化。
为了解决这个问题,就是对每个样本点引进一个松弛变量,使函数间隔加上松弛变量大于等于1
线性不可分的支持向量机的问题变为
原始问题也是一个凸二次规划问题。利用拉格朗日对偶求解对偶问题的最优解。
三、非线性支持向量机和核函数
一般来说。对于一个给定的训练数据集 T={(x1,y1),(x2,y2),......(xN,yN)}, N为特征数目,yi为标记, (xi,yi)为样本点,如果不能用一条直线将正负实例正确分开,可以用一个超曲面将正负实例分开,则称这个问题为非线性可分问题。分类问题是非线性的,可以使用非线性支持向量机。主要利用非线性变换,将非线性问题转换为线性微调,通过解决变换后的线性问题的方法求解原来的非线性问题。
设原空间 x=(x(1),x(2)),新空间 z==(z(1),z(2)),定义从原空间到新空间的变换:
经过变换,原空间变换为新空间,原空间中的点相应的变换为新空间的点,原空间的曲线
变换为新空间的直线:
用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间用线性分类学习方法从训练数据中学习分类模型。核技巧就是属于这样的方法。
常用的核函数有:
1、多项式核函数
2、高斯核函数
3.字符串函数