支持向量机(SVM)原理与实践(一)
来源:互联网 发布:naim muso淘宝假货 编辑:程序博客网 时间:2024/06/04 18:42
最近学习了一些机器学习方面的知识,想写一些相关的东西,首先想到的就是先把支持向量机(Support Vector Machine)写下来,倒不是它有多重要,当然确实也挺重要,最重要的原因是我认为它所代表的思想以及一些处理技巧非常的巧妙。所以第一篇相关的文章我想来尽量的写下来它的原理,另外再花一篇文章的篇幅来记录一下在scikit-learn这个机器学习的常用Python库中,SVM的主要使用方法。对于支持向量机网上有非常多的资源,有的文章介绍的非常详细,所以我这篇文章不准备深入到推导中,我觉得这也没必要,所以我主要的目标就是介绍SVM的思想,但是能力有限,如有错漏还请指正。
线性分类器
SVM的起源可以说还是线性分类器,也就是说对于样本集
我们怎样用一个超平面
不用SVM的话我们可以使用Logistic回归(有的也叫对数几率回归),线性回归同样也是找到这样一个超平面,然后,对于超平面上的点来说
将
那么作为SVM,他的目标也是求出一个线性分类器,也就是一个超平面,那它和上面的Logistic回归有什么区别么?我认为主要是求解思路不一样,Logistic我们看到了,是利用最优化极大似然函数,求出w,它利用了所有的样本点(也是极大似然法的思想所在,就是让已发生的事情的概率极大化),而SVM我们将要看到,它的出发点是找出一个“间隔“最大的超平面,它实际上只利用了少数几个点,也就是所谓的”支持向量“,这也是支持向量机这个名称的来源,上面有些名词后面会解释,并且这只是最基本的支持向量机,在后面随着功能的不断改进,它的能力会越来越强大。
SVM推导
在这一小节我试着推导一下SVM。不过在那之前先引入几个概念,
函数间隔:对于给定的训练数据集T和超平面
可以看出函数间隔只是可以用来预测分类的正确性,如果分类正确的话,即
几何间隔:一方面如果高中的解析几何还没忘的话,我们记得一个点到平面的距离公式
从另一个角度来说,我们利用w的范数
那么我们的问题就转化为了一个求出最大几何间隔的超平面的最优化问题。根据上面我们对几何间隔的描述,我们就是要求一个所有样本点到超平面的距离最大化的超平面。
将函数间隔改换成几何间隔
前面已经说过了函数间隔的绝对数值是没有什么意义的,所以这里我们不妨令
以上是我从李航的《统计学习方法》中看到的,也是我看到的最合理地推导方式,有的地方的推导总有些不太对的地方
这里先不考虑求解方法,我们来看上面的图,中间的黑色即为超平面,观看右边的部分,虚线的两条刚好经过几个样本点,而两条虚线之间没有样本点,这两个虚线之间的距离就是间隔(margin),而最大化间隔就是支持向量机的主要目的。其实就是对于超平面,我们沿着超平面的法线方向“前后”移动,直到碰到一个样本点,这个可以“挪动”的空间就是间隔。而这些限制了超平面“挪动”的样本点就是“支持向量”。
另外支持向量也是使约束条件等号成立的点即
对于
综上我们就从最大化间隔的目的推出了最终的最优化问题。下面我们稍微讲一下这个最优化问题的解法。
SVM解法简述
SVM解法使用的时拉格朗日乘子法,然后将原始问题转化为对偶问题,这个对偶问题以后会讲到。之所以转化为对偶形式,一是因为可以减少参数,是问题更容易求解,第二个原因也非常重要,就是可以引入核函数,核函数的引入可以更好地解决非线性分类的问题。不过,我在学习的时候发现我基本忘记了拉格朗日乘子法,所以我下面稍微介绍一下
* 拉格朗日乘子法
1
对于等式约束比较好理解,等式约束的基本形式是:
以前学习的时候就直接引入了拉格朗日函数,
椭圆的虚线代表
2
对于含有不等式约束的情况,要麻烦一点,此时的主要形式为
此时再引入一种拉格朗日函数
其中一个很重要的一点是
之后由于
该问题的对偶问题为极大极小问题
实际上原始问题和对偶问题的最优值不一定一样,但是在满足一定条件下是可以想等的,也就是KKT条件:
其中第一个求梯度代表对所有参量求导,包括a,b。具体的KKT条件是怎么来的就不证明了
求解SVM
上面推导的最终的SVM优化问题是不等式约束的所以引入拉格朗日函数
其中很重要的是
先求
这里需要提醒的一句话是对矩阵和向量的求导最好直接参考The Matrix Cookbook直接查公式就好了,这里对向量范数的平方求向量本身的导数刚好就是向量本身
之后把上面推导出的
这是一个关于
对于求
软间隔支持向量机
实际之中很少有完全可以线性可分的数据样本,经常会出现你中有我,我中有你的情况
这是我们要根据情况对支持向量机作出调整。
前面我们说过函数间隔的数值是没有意义的,但是支持向量不同,因为他们在
目标函数的意义为我们想办法尽可能使间隔最大(和原来的一样),同时使误分类点数最小(误分类点数越少惩罚项越小)。最后可以证明w的解是唯一的,但是b的解不唯一,b的解存在于一个区间
对于这个我们依然采用拉格朗日参数法来求解,原始优化问题的拉格朗日函数为:
其中要注意的依然是
可以看出软间隔支持向量机与上面的硬间隔的支持向量机基本类似,具体的符号上有所不同,唯一的区别就是对参数
从另一个角度看SVM
有些时候我们可以将目标函数写成更一般的形式:
其中第一项称为经验风险,第二项称为结构风险,其中
以这个角度看待SVM首先对于经验风险,我们用的是合页(hinge)函数:
在SVM中z就是函数间隔
此时的目标函数为
非线性SVM
有了线性的SVM无论是软间隔还是硬间隔,对于解决线性可分问题都是非常有效的,但是有些问题就是线性不可分的,或者即使使用软间隔的SVM效果也很不好,这个时候,我们如果把数据映射到更高的维度(也叫特征空间)就有可能可以分开。看起来不好理解,我们看一张图:
左边的红蓝两类样本被圆分隔开,这个面用线性SVM无论如何都是得不到的,我们将每一维度映射为他们的平方
应用了核技巧之后SVM的对偶问题就化为了如下形式:
其中
有了核函数之后SVM的目标函数就可以改写成如下的形式:
常用的核函数为
以上几个为常用的核函数。我们再回头看一下核函数,以高斯核为例,我们计算核函数是很简单的,但是此时特征空间的维度是多少?答案是无穷维!因为高斯函数按照泰勒展开可以得到无穷多项,并且我们不需要知道这个到特征空间的映射的具体形式,可以说是很强大了。实际中很多时候使用高斯核就可以得到很好的结果,但是具体情况仍应该具体分析,选择合适的核函数。
综上,为支持向量机的主要内容,在下一篇博客中我将主要介绍在scikit-learn中SVM的主要用法。
主要参考
[1]周志华,《机器学习》
[2]李航,《统计学习方法》
[3]袁博,《数据挖掘:理论与算法》课程
(不少图片是从袁博老师的ppt里面截的)
- 支持向量机(SVM)原理与实践(一)
- SVM -支持向量机原理与实践之实践篇
- 支持向量机原理与实践(二):scikit-learn中SVM的使用
- SVM-支持向量机原理详解与实践之一
- SVM-支持向量机原理详解与实践之二
- SVM -支持向量机原理详解与实践之四
- SVM-支持向量机原理详解与实践之三
- 支持向量机(SVM)算法原理
- SVM(支持向量机)原理
- SVM-支持向量机算法(一)
- 支持向量机SVM(一)
- 支持向量机SVM(一)
- 支持向量机SVM(一)
- SVM支持向量机一(入门)
- 支持向量机SVM(一)
- 支持向量机SVM(一)
- 支持向量机SVM(一)
- 支持向量机SVM(一)
- 是什么使一名好程序员变得伟大
- springrain
- dedecms 如何修补XSS跨站脚本攻击
- 3361 数据结构实验之图论四:迷宫探索
- zoj2838 &&倍增法
- 支持向量机(SVM)原理与实践(一)
- 2017年乌镇互联网大会嘉宾分享要点实录
- 【Learning】Link-Cut Tree
- java.lang.NullPointerException(日志)(171204
- 小米5S刷机认真看一眼就能会的简单详细教图文
- 微信小程序开发-五星评价
- Raspbian Ubuntu下安装OpenCV2.4.9的详细过程及碰到的问题和第一次程序的编译调试
- centos7配置jdk环境
- 1.4 硬件概念入门