专栏首页自然语言处理一步步教你学SVM

一步步教你学SVM

1 相关概念

  • 支持向量就是数据集中的某些点,位置比较特殊。比如 x+y-2=0 这条直线,直线上面区域 x+y-2>0 的全是 A 类,下面的 x+y-2<0 的全是 B 类,我们找这条直线的时候,一般就看聚集在一起的两类数据,他们各自的最边缘 位置的点,也就是最靠近划分直线的那几个点,而其他点对这条直线的最终位置的确定起不了作用,所以我姑且叫这些点叫 “支持点”(意思就是有用的点).
  • 在最大间隔上的这些点就叫 “支持向量”,因为最后的 classification machine (分类器)的表达式里只含有这些 “支持向量” 的信息,而与其他数据点无关,借助图形理解(支持向量就是图中用紫色框框圈出来的点)如下:
  • 线性可分(linearly separable): 如上图中的两组数据,它们之间已经分的足够开了,因此很容易就可以在图中画出一条直线将两组数据点分开。在这种情况下,这组数据就被称为线性可分数据
  • 分隔超平面(separating hyperplane): 上述将数据集分隔开来的直线称为分隔超平面
  • 超平面(hyperplane): 在上面给出的例子中,由于数据点都在二维平面上,所以此时分隔超平面就只是一条直线。但是,如果所给的数据集是三维的,那么此时用来分隔数据的就是一个平面。显而易见,更高纬度的情况可以依此类推。如果数据是 1024 维的,那么就需要一个 1023 维的某某对象来对数据进行分隔。这个 1023 维的某某对象到底应该叫什么呢? N-1 维呢?该对象被称为超平面,也就是分类的决策边界。分布在超平面一侧的所有数据都属于某个类别,而分布在另一侧的所有数据则属于另一个类别。
  • 间隔(margin): 我们希望能通过上述的方式来构建分类器,即如果数据点离决策边界越远,那么其最后的预测结果也就越可信。既然这样,我们希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。这里所说的点到分隔面的距离就是间隔。我们希望间隔尽可能地大,这是因为如果我们犯错或者在有限数据上训练分类器的话,我们希望分类器尽可能健壮。
  • 支持向量(support vector) : 就是上面所说的离分隔超平面最近的那些点。
  • 分类器 : 分类器就是给定一个样本的数据,判定这个样本属于哪个类别的算法。例如在股票涨跌预测中,我们认为前一天的交易量和收盘价对于第二天的涨跌是有影响的,那么分类器就是通过样本的交易量和收盘价预测第二天的涨跌情况的算法。
  • 特征 : 在分类问题中,输入到分类器中的数据叫做特征。以上面的股票涨跌预测问题为例,特征就是前一天的交易量和收盘价。
  • 线性分类器 : 线性分类器是分类器中的一种,就是判定分类结果的根据是通过特征的线性组合得到的,不能通过特征的非线性运算结果作为判定根据。还以上面的股票涨跌预测问题为例,判断的依据只能是前一天的交易量和收盘价的线性组合,不能将交易量和收盘价进行开方,平方等运算。

2 SVM原理

直观理解

我们在桌子上放置一些不同颜色的球,让小明用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。

于是小明这样放,看起来还不错?

然后我们又在桌上放了更多的球,似乎有一个球站错了阵营。

SVM 就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。

现在即使我们放了更多的球,棍仍然是一个好的分界线。

然后,在 SVM 工具箱中有另一个更加重要的 trick。 我们看到小明已经学会了一个 trick ,于是我们给了小明一个新的挑战。

现在,小明没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。

现在,从我们的角度看这些球,这些球看起来像是被一条曲线分开了。

我们把这些球叫做 「data」,把棍子叫做「classifier」, 最大间隙 trick 叫做「optimization」, 拍桌子叫做「kernelling」, 那张纸叫做「hyperplane」 。到这里,大家对支持向量机有个更加直观的感受了吧,以上引用网络案例。

支持向量机分类

先考虑最简单的情况,豌豆和米粒,用晒子很快可以分开,小颗粒漏下去,大颗粒保留。用一个函数来表示就是当直径 d 大于某个值 D ,就判定为豌豆,小于某个值就是米粒。

  • d>D, 豌豆
  • d<D,米粒

在数轴上就是在d左边就是米粒,右边就是绿豆,这是一维的情况。但是实际问题没这么简单,考虑的问题不单单是尺寸,一个花的两个品种,怎么分类? 假设决定他们分类的有两个属性,花瓣尺寸和颜色。单独用一个属性来分类,像刚才分米粒那样,就不行了。这个时候我们设置两个值 尺寸 x 和颜色 y.我们把所有的数据都丢到 x-y 平面上作为点,按道理如果只有这两个属性决定了两个品种,数据肯定会按两类聚集在这个二维平面上。我们只要找到一条直线,把这两类划分开来,分类就很容易了,以后遇到一个数据,就丢进这个平面,看在直线的哪一边,就是哪一类。比如 x+y-2=0 这条直线,我们把数据 (x,y) 代入,只要认为 x+y-2>0 的就是 A 类, x+y-2<0 的就是 B 类。以此类推,还有三维的,四维的,N维的 属性的分类,这样构造的也许就不是直线,而是平面,超平面。 一个三维的函数分类 :x+y+z-2=0,这就是个分类的平面了。有时候,分类的那条线不一定是直线,还有可能是曲线,我们通过某些函数来转换,就可以转化成刚才的哪种多维的分类问题,这个就是核函数的思想。例如:分类的函数是个圆形 x^2+y^2-4=0 。这个时候令 x^2=a ; y^2=b ,还不就变成了a+b-4=0 这种直线问题了。这就是支持向量机的思想。

SVM 工作原理

对于上述的苹果和香蕉,我们想象为2种水果类型的炸弹。(保证距离最近的炸弹,距离它们最远)

  1. 寻找最大分类间距
  2. 转而通过拉格朗日函数求优化的问题
  • 数据可以通过画一条直线就可以将它们完全分开,这组数据叫线性可分(linearly separable)数据,而这条分隔直线称为分隔超平面(separating hyperplane)
  • 如果数据集上升到1024维呢?那么需要1023维来分隔数据集,也就说需要N-1维的对象来分隔,这个对象叫做超平面(hyperlane),也就是分类的决策边界。

SVM学习方法的选择

  • 当训练数据线性可分时,通过硬间隔最大化学习一个线性分类器,即线性可分支持向量机又称为硬间隔支持向量机
  • 当训练数据近似线性可分时,通过软间隔最大化学习一个线性分类器,即线性可分支持向量机又称为软间隔支持向量机
  • 当训练数据线性不可分时,通过核函数及软间隔最大化学习一个非线性支持向量机

3 理解与应用

数据挖掘(DataMining)

做数据挖掘应用的一种重要算法,也是效果最好的分类算法之一。举个例子,就是尽量把样本中的从更高纬度看起来在一起的样本合在一起,比如在一维(直线)空间里的样本从二维平面上可以分成不同类别,而在二维平面上分散的样本如果从第三维空间上来看就可以对他们做分类。支持向量机算法目的是找出最优超平面,使分类间隔最大,要求不但正确分开,而且使分类间隔最大,在两类样本中离分类平面最近且位于平行于最优超平面的超平面上的点就是支持向量,为找到最优超平面只要找到所有支持向量即可。对于非线性支持向量机,通常做法是把线性不可分转化成线性可分,通过一个非线性映射将输入到低维空间中的数据特性映射到高维线性特征空间中,在高维空间中求线性最优分类超平面。

scikit(scikit-learn)

SVM 的基本原理基本上已经说的差不多了,下面咱们就来看看 SVM 在实际应用该如何使用了。幸运的是,sklearn 提供了一个非常好用的机器学习算法,我们调用相关的包就好啦。

4 SVM算法实现

代码过长,具体实现请访问:

https://bainingchao.github.io/2018/10/16/%E4%B8%80%E6%AD%A5%E6%AD%A5%E6%95%99%E4%BD%A0%E8%BD%BB%E6%9D%BE%E5%AD%A6%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BASVM%E7%AE%97%E6%B3%95%E4%B9%8B%E6%A1%88%E4%BE%8B%E7%AF%872/

5 SVM 开发流程

收集数据:可以使用任意方法。
准备数据:需要数值型数据。
分析数据:有助于可视化分隔超平面。
训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优。
测试算法:十分简单的计算过程就可以实现。
使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二类分类器,对多类问题应用SVM需要对代码做一些修改。

6 SVM 算法特点

优点:泛化(由具体的、个别的扩大为一般的,就是说:模型训练完后的新样本)错误率低,计算开销不大,结果易理解。
缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适合于处理二分类问题。
使用数据类型:数值型和标称型数据。

7 参考文献

[1] scikit中文社区:

http://sklearn.apachecn.org/cn/0.19.0/

[2] ApacheCN

[3] GitHub:

https://github.com/BaiNingchao/MachineLearning-1

[4] 图书:《自然语言处理理论与实战》

9 完整代码下载

源码请进【机器学习和自然语言QQ群:436303759】文件下载

本文分享自微信公众号 - 机器学习和自然语言处理(datathinks)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 朴素贝叶斯一步步轻松学2

    构建一个快速过滤器来屏蔽在线社区留言板上的侮辱性言论。如果某条留言使用了负面或者侮辱性的语言,那么就将该留言标识为内容不当。对此问题建立两个类别: 侮辱类和非侮...

    伏草惟存
  • 程序员眼中的统计学2

    均值有两种计算方法:第一种计算方式是:将所有的数字加起来,然后除以数字的个数 。可用记为:µ=∑x/n。另一种计算方法是把每个数的频数考虑进去了的,它表示如下:...

    伏草惟存
  • Python 和 Elasticsearch 构建简易搜索

    Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,可以快速地储存、搜索和分析海量数据。可以用于搜索各种...

    伏草惟存
  • 量化投资之机器学习应用——基于 SVM 模型的商品期货择时交易策略(提出质疑和讨论)

    2016年在东证期货的量化报告里,读到一篇文章,关于量化投资策略之机器学习应用——基于 SVM 模型的期货择时交易策略 。就顺手算了一下,发现了一些问题,因此和...

    量化投资与机器学习微信公众号
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)

    阅读目录: 1.开篇介绍 2.Model与View的使用关系(数据上下文DataContext与View呈现) 3.Metadata元数据驱动设计(如何使用中间...

    王清培
  • SVM原理详细图文教程来了!一行代码自动选择核函数,还有模型实用工具

    然而,每一次老板让你讲解SVM,或每一次面试被问到SVM,却总是结结巴巴漏洞百出。

    OpenCV学堂
  • 元数据(MetaData)

    元数据是用来描述数据的数据(Data that describes other data)。单单这样说,不太好理解,我来举个例子。 下面是契诃夫的小说《套中人》...

    ruanyf
  • 孟昭莉博士:大数据大道之行

    image.png 大数据似乎在一夜之间迅速走红,它势不可挡地冲击着金融、零售等各个行业。云计算将如何改变计算的世界?未来将有怎样的应用前景?如何解决“...

    腾讯研究院
  • 行业 | 数据团队该为公司的AI转型负责吗?花五分钟时间换个答案

    数据驱动时代,数据团队作为一家公司的核心竞争力所在,正在受到越来越多高管、从业者和投资人的关注。而目前,相对公司中的财务、运营等已经规模化的组成,数据团队还是不...

    大数据文摘
  • 大数据时代来临,这七个关键词告诉你下一波红利在哪

    人人都快把大数据当做口头禅,但“知其然而不知其所以然”者甚多,甚至有很多人把大数据与数据库之间划等号。在信息技术飞速发展的移动互联网时代,究竟该如何理解大数据?...

    华章科技

扫码关注云+社区

领取腾讯云代金券