svm和svr区别--摘自其它博客
学习笔记:SVM柔性边界的补充和SVR(支持向量回归)
上一个笔记对于SVM不能完美分类的情况,之前并没有搞得很透彻。在学习SVR的时候,我又重新思考了一下关于SVM对于不能完美分类的情况,搞清楚SVM不可完美分类的情况之后,也就更容易理解SVR的美妙了。
SVM柔性边界
所谓柔性边界,就是会允许分类问题的不完美,能够包容一部分分类出现误差的情况,因为现实中往往会存在一些特例,或者我们不可能考虑到所有的影响因素,导致虽然满足了我们研究条件,但是依然输出不同于我们预测的情况。
SVM柔性边界的表达式:
![](http://upload-images.jianshu.io/upload_images/208816-13fe112299df74b5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
与完美可分情况的SVM表达式:
![](http://upload-images.jianshu.io/upload_images/208816-d1b90749a4b4ea4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们通过下图来说明柔性边界到底想要达到什么目的:
![](http://upload-images.jianshu.io/upload_images/208816-98e1537ba337a156.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
可以看到,支持向量机真正确定的并不是一个超平面,而是沿着这个超平面的带状区间
(在二维中,更高维就更抽象了,我也不知道长什么样,你们脑补吧)。而这个带状区间的宽度,在完美可分的情况下,就是两倍的几何距离
,柔性边界呢就是把这个距离放大了,本来这个带状区域中没有训练样本,现在我允许可以有一些训练样本了,不等式中的1就是缩放后的带状区间的边界,现在训练样本满足的公式可以比这个边界小了,自然就是允许一部分训练样本点在带状区域里面了。
接下来我们通过来看拉格朗日乘子式来分析为什么这个方法是合理的,天才的,并来理解各个参数变量和KKT条件。
![](http://upload-images.jianshu.io/upload_images/208816-8f67376fde570fe4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我们对拉格朗日乘子式中各个变量求偏导:
至此关于SVM柔性边界的一些补充讨论就完成了,接下来说一下支持向量回归(SVR)
支持向量回归(SVR)
由支持向回归就是一种回归方法,就像最小二乘法,岭回归,梯度下降法一样,是一种方法,就像支持向量机也是一种方法,所以它们都不叫做模型,而是叫做支持向量机和支持向量回归。
支持向量回归是在我们做拟合时,采用了支持向量的思想,和拉格朗日乘子式的方式,来对数据进行回归分析的。相对于经济学领域常用的最小二乘法而言,它有诸多好处:
- 最小二乘法只能用于线性回归,对于非线性模型则不再适用;而支持向量回归并没有这个限制
- 最小二乘法对于具有多重共线性的变量之间的回归效果很差;而支持向量回归并不需要担心多重共线性问题
- 支持向量回归对虽然不会在过程中直接排除异常点,但会是的由异常点引起的偏误更小。
所以,支持向量回归十分值得学习。下面上公式:
![](http://upload-images.jianshu.io/upload_images/208816-82bb8432eb292da3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
问题转化:
![](http://upload-images.jianshu.io/upload_images/208816-7e250fa31b68249f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
其实上式就是表示出了回归函数和实际训练点之间的函数距离,对于式中定义的cost function
,表述意义是允许模型由一定误差,误差范围内的点都认为是模型上的点,而只有那些在误差范围外,边界上的点才是确定模型的支持向量。由于存在SVM中类似柔性边界的考虑,于是引入松弛变量,得到支持向量回归如下:
转化成SVM求解问题
这里出现了两个不等式,因为我们没有分类结果{-1,1}来用乘积表示正负距离了,只能用绝对值,拆开绝对值符号之后,就会有两个不等式的约束条件。
以上便构成了支持向量回归的KKT条件,从条件中不难看出,我们选出的支持向量都是在认为符合回归情况范围之内的,和尽可能少的一部分超过边界的点,这样就排除了一部分的训练样本中的奇异点。
然后带入求解得到[2]:
![](http://upload-images.jianshu.io/upload_images/208816-2ce505bfc622e936.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
求得回归方程:
![](http://upload-images.jianshu.io/upload_images/208816-88ea7a63f7809978.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
回归方程中出现的K(xi,x)
就是核(kernel)
了,会有一些总结的比较好用的kernel
,当然你的回归形式如果自己比较清楚,也可以换成你的回归方程。kernel
可以使无限维特征向量的计算极大的简化,无论是线性还是非线性的问题满足一定条件就可以找到相应的kernel
。不过这里并不会介绍kernel
,因为kernel
也是一个内容丰富的知识点,并且我也还没学习。
一直没写怎么求得最终结果,求解过程涉及到的都是启发式的算法,基本这些问题也是结合计算机使用的。这里提供一个r包的链接e1071,需要用到的可以去看看帮助。
支持向量机暂时写完了,我想其实这个过程中收获最大的是自己,逼着自己把各个条件推了一遍,写的过程中又发现本来以为理解其实并没理解的地方,又再思考了,以后会坚持写学习笔记的。
[1]:由于简书里不好编辑公式,所以这里我现在word上编辑好,再通过插入图片的方式以方便表达。 ↩
[2]:我在中间引用自己在word上编辑的内容时,可能公式中对应的符号有所变化,我相信这并不会给大家带来什么困扰:) ↩