SVM算法学习之旅,首先介绍一下SVM概念。

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本非线性高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
         支持向量机方法是建立在统计学习理论的VC维理论结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力)。

以上是经常被有关SVM 的学术文献引用的介绍,有点八股,我来逐一分解并解释一下。

Vapnik是统计机器学习的大牛,这想必都不用说,他出版的《Statistical Learning Theory》是一本完整阐述统计机器学习思想的名著。在该书中详细的论证了统计机器学习之所以区别于传统机器学习的本质,就在于统计机器学习能够精确的给出学习效果,能够解答需要的样本数等等一系列问题。与统计机器学习的精密思维相比,传统的机器学习基本上属于摸着石头过河,用传统的机器学习方法构造分类系统完全成了一种技巧,一个人做的结果可能很好,另一个人差不多的方法做出来却很差,缺乏指导和原则。

所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数)。

结构风险最小听上去文绉绉,其实说的也无非是下面这回事。

机器学习本质上就是一种对问题真实模型的逼近(我们选择一个我们认为比较好的近似模型,这个近似模型就叫做一个假设),但毫无疑问,真实模型一定是不知道的(如果知道了,我们干吗还要机器学习?直接用真实模型解决问题不就可以了?对吧,哈哈)既然真实模型不知道,那么我们选择的假设与问题真实解之间究竟有多大差距,我们就没法得知。比如说我们认为宇宙诞生于150亿年前的一场大爆炸,这个假设能够描述很多我们观察到的现象,但它与真实的宇宙模型之间还相差多少?谁也说不清,因为我们压根就不知道真实的宇宙模型到底是什么。

这个与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险Remp(w)。以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险最小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。

统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。

置信风险与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大。

泛化误差界的公式为:

R(w)≤Remp(w)+Ф(n/h)

公式中R(w)就是真实风险,Remp(w)就是经验风险,Ф(n/h)就是置信风险。统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。 SVM正是这样一种努力最小化结构风险的算法。

SVM其他的特点就比较容易理解了。
          小样本,并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。
          非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓,以后会详细讨论。多说一句,关于文本分类这个问题究竟是不是线性可分的,尚没有定论,因此不能简单的认为它是线性可分的而作简化处理,在水落石出之前,只好先当它是线性不可分的(反正线性可分也不过是线性不可分的一种特例而已,我们向来不怕方法过于通用)。
          高维模式识别是指样本维数很高,例如文本的向量表示,如果没有经过另一系列文章(《文本分类入门》)中提到过的降维处理,出现几万维的情况很正常,其他算法基本就没有能力应付了,SVM却可以,主要是因为SVM 产生的分类器很简洁,用到的样本信息很少(仅仅用到那些称之为“支持向量”的样本,此为后话),使得即使样本维数很高,也不会给存储和计算带来大麻烦(相对照而言,kNN算法在分类时就要用到所有样本,样本数巨大,每个样本维数再一高,这日子就没法过了……)。

下一节开始正式讨论SVM算法。别嫌我说得太详细哦。

转载自:http://www.blogjava.net/zhenandaci/archive/2009/02/13/254519.html

SVM学习(一):SVM概念相关推荐

  1. SVM学习笔记——SVM解决多分类问题的方法

    SVM解决多分类问题的方法 SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器.目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多 ...

  2. 【机器学习】SVM学习(三):线性分类器的求解

    [机器学习]SVM学习(三):线性分类器的求解 2016-10-10 19:56 239人阅读 评论(0) 收藏 举报 本文章已收录于:  机器学习知识库  分类: 机器学习(37)  目录(?)[+ ...

  3. scikit-learn学习之SVM算法

    ====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的 ...

  4. 学习OpenCV——SVM

    OpenCV开发SVM算法是基于LibSVM软件包开发的,LibSVM是台湾大学林智仁(Lin Chih-Jen)等开发设计的一个简单.易于使用和快速有效的SVM模式识别与回归的软件包.用OpenCV ...

  5. 深度学习backbone是什么意思_一场突如其来的讨论:到底什么是深度学习?SVM其实也是深度学习吗?...

    雷锋网 AI 科技评论按:2019 年底.2020 年初,许多机器学习界活跃的教授.研究员们投身参与了一场的突如其来的讨论:深度学习是什么? 在过去十年汹涌而来的深度学习浪潮中,大家对深度学习在应用中 ...

  6. SVM学习笔记-对偶形式的SVM

    SVM学习笔记第二篇 SVM学习笔记-线性支撑向量机 SVM学习笔记-对偶形式的SVM SVM学习笔记-核函数与非线性SVM SVM学习笔记-软间隔SVM 0 - 回顾 上一篇笔记讲述了一个模型:线性 ...

  7. matlab中snapnow命令,SVM学习笔记(一)

    1.SVM用于交易模型的具体算法及模型构建 可见公众号"量化投资与机器学习"发布的文章"量化投资之机器学习应用--基于 SVM 模型的商品期货择时交易策略(提出质疑和讨论 ...

  8. SVM学习(一)SVM模型训练与分类

    SVM模型训练与分类 支持向量机(SVM): 一个能够将不同类样本在样本空间分隔的超平面.换句话说,给定一些标记好的训练本(监督式学习),SVM算法输出一个最优化的超分隔平面.本次利用VS2015+O ...

  9. SVM学习笔记5-SMO

    首先拿出最后要求解的问题:$\underset{\alpha}{min}W(\alpha)=\frac{1}{2} \sum_{i,j=1}^{n}y^{(i)}y^{(j)}\alpha_{i}\a ...

  10. 线性SVM与非线性SVM

    所谓线性SVM与非线性SVM是指其选用的核类型. 用于分类问题时,SVM可供选择的参数并不多,惩罚参数C,核函数及其参数选择.对于一个应用,是选择线性核,还是多项式核,还是高斯核?还是有一些规则的. ...

最新文章

  1. 我看暴库漏洞原理及规律
  2. 57. Insert Interval
  3. android开发 apk文件,android开发中,将数据库文件与APK一起发布?
  4. python脚本设置环境变量_详解如何设置Python环境变量?
  5. oracle10g 克隆安装,克隆Oracle Home(10g2)
  6. java的乐趣_分享java带来的快乐
  7. 计算机视觉论文-2021-06-14
  8. update 没有索引导致业务崩了,老板骂了一个小时
  9. php编写九九乘法表
  10. 使用Maven前夕(Maven项目架构管理工具、配置环境变量、阿里云镜像、本地仓库)
  11. [转]xcode免证书调试
  12. linux设备模型之tty驱动架构分析,linux设备模型之uart驱动架构分析
  13. 翻译Programming WCF Services第二版
  14. python 获取文件大小_Python解决女朋友看电影没字幕的需求
  15. PHP银行卡信息基类大全
  16. 完美收官!Fortinet Accelerate 2022中国站在北京落幕
  17. js pug 代码_Pug 代码 Code
  18. 使用proteus仿真STM32超声波SRF04测距!Code+Proteus
  19. ubuntu合并终端_如何在Ubuntu中安装多个终端以及更改默认终端
  20. LED照明灯具与传感器技术

热门文章

  1. spring aop 如何切面到mvc 的controller--转载
  2. MINA与JMX集成(翻译)
  3. 【ETL】ETL讲解(很详细!!!)
  4. 如何设置、查看以及调试core文件
  5. Hyperledger fabric1.4.0搭建环境
  6. 神经网络反向传播的数学原理
  7. 大数据时代医疗行业爆发 政策壁垒仍是最大障碍
  8. Oracle优化03-Latch和等待
  9. 腾讯面试题 linux下free命令详解
  10. 使用java代码发送电子邮件