转载自https://blog.csdn.net/chaipp0607/article/details/73662441
SVM算法在在1995年正式发表,在针对中小型数据规模的分类任务上有着卓越的效果,同时有着完整的理论证明,在20世纪末的几年和21世纪初的10年完胜神经网络,吴恩达在其2003年的《Machien learning》公开课上用两节课的时间对其进行讲解,而神经网络讲解了20min左右。就是这个算法把神经网络按在地上摩擦了大概15年的时间,直到深度学习的兴起。但即便这样,现在SVM算法依旧被广泛的使用。
SVM大概的可以不确切的分为三个程度理解:
(1)线性可分情况下的线性分类器,这是最原始的SVM,它最核心的思想就是最大的分类间隔(margin maximization);
(2)线性不可分情况下的线性分类器,引入了软间隔(soft margin)的概念;
(3)线性不可分情况下的非线性分类器,是SVM与核函数(kernel function)的结合。
什么是最大分类间隔
SVM最大分类间隔的灵感来自于一个非常符合直觉的观察,如果存在两类数据,数据的特征是二维的,那么我们就可以把数据画在一个二维平面上,此时我想找到一个决策面(决策边界)去将这两类数据分开。如下图所示:
理论上这个决策边界有无数种选择,就像图中画出的四条黑色的线,都能实现分类,但是哪一种是最好的分类方式呢?SVM算法认为在上图中靠近决策平边界的点(正负样本)与决策边界的距离最大时,是最好的分类选择:
上图中红色的线就是要优化的目标,它表征了数据到决策边界的距离,这个距离就是所谓的最大分类间隔。同时在上面的几个数据,如果靠近两侧的数据少了几个(除了红色框住的数据,其他数据的多少完全不影响),也不会影响决策边界的确定,而被红色框框出来三个数据才决定了最终的决策边界,所以这三个数据被称之为支持向量。
线性分类器
支持向量机算法如何实现最大分类间隔的任务呢?我们可以先从线性分类器开始理解它,支持向量在没有引入核函数的时候就是一个线性的分类器,我们假设与决策边界垂直的向量(决策面的法向量)为V:
黑色的线是假设的决策边界,X1和X2是决策边界两侧的两个点,Xt1和Xt2是两个点在法向量V上面的投影,那么可以很直观看到,原点到Xt1的距离<原点到Xt2的距离,而且可以推广延伸到只要数据点在决策边界的两侧,那么在决策边界左侧的数据点在法向量上面的投影距离永远比右侧的距离短,这就是支持向量机实现分类预测的依据。那么怎么用公式表征出这个点到直线投影的距离呢?
如上图中的情况所示:要求向量b在向量a上的投影距离d,向量的内积可以表示为:
于是角度的余弦为:
距离d可以表示为:
而在SVM的特征空间中,a是决策边界的法向量,那么a为单位法向量的时候其模为1,所以就有:
最后我们把a和b换成上面设定的值就会有:
有了这个东西,我们总能找到一个常数C分开两类数据,也就是说:
到了上面的公式后,问题就非常的清晰了,法向量V其实就是决策边界的系数(这是解析几何里面的知识),那么大家肯定见过一种和它非常像的公式,叫做样本空间下的超平面线性方程:
线性分类器就是这个样子!!!
不经过sigmoid函数的Logistic模型也是这个样子!!
不激活的神经网络中的单个神经元还是这个样子!!
如何实现最大分类间隔
从上面可以看到,此时的支持向量机(没有加核函数)就是个线性的分类器,它的卓越性能就体现在在线性分类器基础上的最大分类间隔。
所以本质上SVM要训练的参数只有w和b,关键就在于SVM如何在优化中体现最大分类间隔的思想!
针对所有的训练数据(traindata),SVM都希望:
这里的正负1就体现的最大分类间隔,这里是选择用正负1是为了计算方便,因为无论间隔是多少,都可以依靠伸缩w和b约为1。上述公式就是SVM的最大间隔假设。如下图:
在这个图中,决策边界两边的线之间的距离(最大间隔)为:
它是这样求出来的,数据中的支持向量在影响着最大间隔,那么假设两个支持向量x1和x2分别为正负,最大间隔就应该是x2-x1在法向量上的投影:
所以求取d的过程为:
这就是SVM的优化目标,它想要找到max(d),然后大家可能发现了,这个目标里面没有b,之和w有关,那么是不是任意的b都可以呢?
显然不是的,这个优化有一个约束条件,因为推导的过程就有假设条件是两个支持向量要求在两侧,所以这个约束条件可以写成:
所以最终的目标为:
或者为:
需要注意的是,约束条件中的i=1…….n,n为样本的个数。
其中约束条件为n个,这是一个关于w和b的最小值问题。
根据拉格朗日乘子法:就是求函数f(x1,x2,…)在g(x1,x2,…)=0的约束条件下的极值的方法。其主要思想是将约束条件函数与原函数联系到一起,使能配成与变量数量相等的等式方程,从而求出得到原函数极值的各个变量的解。即可以求得:
其中a就是拉格朗日乘子法进入的一个新的参数,也就是拉格朗日乘子。
那么问题就变成了:
所谓的对偶问题就是:
做这种转换是为了后面的求解方便,因为最小值问题,求导就可以啦!!
下面对w和b分别求偏导(这里是纯数学计算,直接给结果了):
在这里求出了两个结果,带入到L(w,b,a)中:
所以问题被转化成为:
注意这里的约束条件有n+1个,之后只需要根据Data(x),Label(y)求解出满足条件的拉格朗日系数a,并将a带回求得w和b,于是就有了最后的决策边界。(w,b,x,y,a都是向量)
注意:在上面b的公式中,i=1,2,…,n。但是j却没有给值,这是因为j是任意一个支持向量都可以。
在这里对w和b的公式的推导做一个简短说明,w是通过拉格朗日求偏导后推出的;在学习SVM(二) 如何理解支持向量机的最大分类间隔中我们知道最大间隔为:
那么支持向量到决策边界的距离为:
,
同时根据点到直线的距离公式有:
超平面(w,b)能够将训练样本正确分类,即对于,
因此去掉绝对值可以得到关于b的公式。
而非支持向量的数据就在求解参数a,w,b的过程中,前面的参数w求得的结果会为0,这样就满足了之前的说法,只有支持向量在影响着决策边界的确定。
转载自https://blog.csdn.net/chaipp0607/article/details/73662441
https://blog.csdn.net/chaipp0607/article/details/73716226