机器学习-支持向量机
来源:互联网 发布:淘宝优惠券自动发送 编辑:程序博客网 时间:2024/04/30 16:02
参考网上的SVM和pluskid对支持向量机的讲解,同时也看了Andrew Ng的机器学习视频,自己整理了下,以后好复习。
引文:自支持向量机SVM问世以来,就被推崇为最好的分类算法。神经网络算法也比较流行,但由于神经网络比较复杂,所以很多时候使用的并不是神经网络而是SVM。博主在看paper的时候,很多的paper用到的无非就是SVM,RM之类的。像Adaboost这中算法我还没看到论文里面用过,有时间自己去尝试下,看看效果如何。
对于本章节,会分两个层次来讲
- 线性可分
- 线性不可分
要明白什么是支持向量机 Support Vector Machines(SVM) ,便得从分类说起。
分类作为数据挖掘领域中一项非常重要的任务,它的目的是学会一个分类函数或分类模型(或者叫做分类器),该模型能吧数据库中的数据项映射到给定类别中的某一个,从而可以用于预测未知类别。
而支持向量机是 90 年代中期发展起来的基于统计学习理论的一种机器学习方法,通过寻求结构化风险最小
来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良
好统计规律的目的。
本文将要介绍的支持向量机算法便是一种分类方法。
1.线性可分
对于下面这种二维平面上的线性分类
这种直线可以找到多个,但是哪一个属于最佳的分割线呢?
给出一个类别
假设
图中的直线其实就是
下面先引进两个理论知识,函数间隔与几何间隔。
1.1函数间隔
在数学上,一般而言,一个点距离超平面的远近可以表示为分类预测的确信或准确程度。我们定义函数间隔为
接着,我们定义超平面 (w, b) 关于训练数据集 T 的函数间隔为超平面 (w, b) 关于 T 中所有样本点
然与此同时,问题就出来了。上述定义的函数间隔虽然可以表示分类预测的正确性和确信度,但在选择分类超平面时,只有函数间隔还远远不够,因为如果成比例的改变 w 和 b,如将他们改变为 2w 和 2b,虽然此时超
平面没有改变,但函数间隔的值 yf(x) 却变成了原来的 4 倍。
其实,我们可以对法向量 w 加些约束条件,使其表面上看起来规范化,如此,我们很快又将引出真正定义点到超平面的距离——几何间隔的概念。
1.2 几何间隔
说到几何间隔,先看看下面这幅图:
图中有一个A点和B点,还有一条直线将图中的点分成两类,还有一个向量
图中A到B之间的距离
解这个方程得到
不过这里的
我们需要的是得到最大的几何间隔,那么这里采用的一种思想就是取函数
几何间隔为:
说明:函数间隔
想想二维空间里的点到直线公式:假设一条直线的方程为
那么如果用向量表示,设 w = (a, b), f(x) = wTx + c,分割线的表达式为
1.3 最大间隔分类器
通过上面的分析,得到最小的集合间隔的表达式
我们要的得到的是使最小的间隔最大,座椅定义最大间隔分类器为
上面的
函数间隔:
几何间隔:
所以几何间隔
我们假设函数间隔为
对
到这个形式以后,就可以很明显地看出来,它是一个凸优化问题,或者更具体地说,它是一个二次优化问题——目标函数是二次的,约束条件是线性的。这个问题可以用任何现成的 QP Quadratic Programming 的优化包进行求解可以很快的求得w和b值。
所谓支持向量机,支持向量就是需要求得向量
2.线性不可分情况
2.1 从原始问题到对偶问题
回忆一下之前得到的优化目标的二次优化问题,将s.t稍微的变化下,
虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过 Lagrange 对偶变换到对偶变量 Dual Variable 的优化问题之后,可以找到一种更加有效的方法来进行求解,而且通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。
也就说,除了用解决 QP 问题的常规方法之外,还可以应用Lagrange 对偶性,通过求解对偶问题得到最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。
接下来,你将看到“对偶变量的优化问题”等类似的关键词频繁出现,便是解决此凸优化问题的第二种更为高效的解——对偶变量的优化求解。
至于上述提到,关于什么是 Lagrange 对偶性?简单地来说,通过给每一个约束条件加上一个 Lagrange 乘子,即引入 Lagrange 对偶变量 α,如此我们便可以通过 Lagrange 函数将约束条件融和到目标函数里去(也就是说把条件融合到一个函数里头,现在只用一个函数表达式便能清楚的表达出我们的问题)。
这里的
可以通过该方程组求得相应的
对于我们的模型
可以将限制条件变成
通过拉格朗日乘数法得到
通过求偏导数
最后得到
同样对b求骗到数后得到:
将w带入到
最后得到:
后面的刚好是对b求导后等于的式子,所以整个式子就变成了
最后我们得到的对偶式子为:
而b可以通过下面式子求出来
最后整个决策模型就变成了这样
其中
2.2 核函数
在上文中,我们已经了解到了支持向量机处理线性可分的情况,而对于非线性的情况,支持向量机的处理方法是选择一个核函数 κ(·,·),通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。由于核函数的优良品质,这样的非线性扩展在计算量上并没有比原来复杂多少,这一点是非常难得的。当然,这要归功于核方法——除了支持向量机之外,任何将计算表示为数据点的内积的方法,都可以使用核方法进行非线性扩展。
简而言之:在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射(核函数)将输入变量映射到一个高维特征空间,在这个空间中构造最优分类超平面2.1。我们使用支持向量机进行数据集分类工作的过程首先是同预先选定的一些非线性映射将输入空间映射到高维特征空间。
原来的决策函数时
其中
1. 首先使用一个非线性映射将数据变换到一个特征空间
2. 然后在特征空间使用线性学习器分类。
3.
在上文我提到过对偶形式,而这个对偶形式就是线性学习器的一个重要性质,这意味着假设可以表达为训练点的线性组合,因此决策规则可以用测试点和训练点的内积来表示:
如果有一种方式可以在特征空间中直接计算内积
这里我直接给出一个定义:核是一个函数
简而言之,如果不是用核技术,就会先计算线性映射
通过之前的推导,得到的最终分类函数是这样的
现在通过映射后,得到
而其中的 α 也是通过求解如下的对偶问题而得到的
这样一来问题就解决了吗?似乎是的:拿到非线性可分的数据,就找一个映射 ϕ(·),然后一股脑把原来的数据映射到新空间中,再按照线性可分情况下支持向量机的求解方法来做即可。不过事实上没有这么简单!其实刚才的方法稍想一下就会发现有问题:在最初的例子里,我们对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了五个维度;如果原始空间是三维,那么我们会得到 19 维的新空间,这个数目是呈爆炸性增长的,这给 ϕ(·) 的计算带来了非常大的困难,而且如果遇到无穷维的情况,就根本无从计算了。所以就需要核函数出马了。
不妨还是从最开始的简单例子出发,设两个向量 x1 = (η1, η2) 和 x2 = (ξ1, ξ2),而 ϕ(·) 即是到前面说的五维空间的映射,因此映射过后的内积为:
可以看出
二者有很多相似的地方,实际上,我们只要把某几个维度线性缩放一下,然后再加上一个常数维度,具体来说,上面这个式子的计算结果实际上和映射
之后的内积
1. 一个是映射到高维空间中,然后再根据内积的公式进行计算;2. 而另一个则直接在原来的低维空间中进行计算,而不需要显式地写出映射后的结果。
回忆刚才提到的映射的维度爆炸,在前一种方法已经无法计算的情况下,后一种方法却依旧能从容处理,甚至是无穷维度的情况也没有问题。
我们把这里的计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数 Kernel Function,例如,在刚才的例子中,我们的核函数为:
核函数能简化映射空间中的内积运算——刚好“碰巧”的是,在我们的支持向量机里需要计算的地方数据向量总是以内积的形式出现的。对比刚才我们上面写出来的式子,现在我们的分类函数为:
其中 α 由如下的对偶问题求解而得。
这样一来计算的问题就算解决了, 避开了直接在高维空间中进行计算,而结果却是等价的!当然,因为我们这里的例子非常简单,所以我可以手工构造出对应于 φ(·) 的核函数出来,如果对于任意一个映射,想要构造出对应的核函数就很困难了。
常用的几个核函数
核函数的本质
核函数总结有以下两点:
- 实际中,我们会经常遇到线性不可分的样例,此时,我们的常用做法是把样例特征映射到高维空间中去(映射到高维空间后,相关特征便被分开了,也就达到了分类的目的);
- 如果凡是遇到线性不可分的样例,一律映射到高维空间,那么这个维度大小是会高到可怕的(如上文中 19 维乃至无穷维的例子)此时,核函数就隆重登场了,核函数的价值在于它虽然也是讲特征进行从低维到高维的转换,但核函数绝就绝在它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算。
好了,SVM就写到这里吧,有时间再补充序列最小化算法SMO和添加松弛变量的情况。
Reference
Stanford大学机器学习视频:http://open.163.com/movie/2008/1/C/6/M6SGF6VB4_M6SGJVMC6.html
Pluskid支持向量机系列:http://blog.pluskid.org/?page_id=683
July支持向量机三重境界PDF:http://vdisk.weibo.com/s/zrFL6OXKgnlcp
- 机器学习-支持向量机
- 机器学习--支持向量机
- 机器学习-支持向量机
- 【机器学习】支持向量机
- 机器学习-支持向量机
- 机器学习-学习笔记 支持向量机
- 机器学习作业-支持向量机简介
- 机器学习之支持向量机
- 从机器学习到支持向量机
- 机器学习之支持向量机
- 机器学习 支持向量机(SVM)
- 机器学习到支持向量机
- Stanford机器学习--- 支持向量机SVM
- 机器学习5支持向量机
- 机器学习之支持向量机(svm)
- 机器学习系列之支持向量机
- 【机器学习】支持向量机SVM
- 面试:机器学习--支持向量机
- Red5边源服务器集群部署 《在线视频会议系统》
- Qt on Android Episode 7(翻译)
- 常用的加密 算法
- "opengl编程指南第七版源码(网上下载的)"makefile中的一处错误
- Android_根据字符串获取资源id
- 机器学习-支持向量机
- 11n 11ac aggregation
- git
- Reverse Bits
- 数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )
- LeetCode Contains Duplicate II
- java基础——正则表达式
- Java使用soap调用qq在线状态
- Java基础之Java1.5重要新特性