1.什么是支持向量机

  支持向量机(Support Vector Machine,SVM)是一种经典的分类模型,在早期的文档分类等领域有一定的应用。了解SVM的推导过程是一个充满乐趣和挑战的过程,耐心的看完整个过程,你会受益良多。所以,小Dream也决定好好讲一讲SVM的推导过程,还是跟此前一样,讲解务必追求通俗易懂,深入浅出。

  首先要说的是,支持向量机最主要是用于分类。假设有一个训练样本集D={(x1,y1),(x2,y2),(x3,y3),...(xn,yn)},支持向量机分类学习最主要的思想就是基于训练集D在样本空间中,找到一个划分超平面,将不同类别的样本分开。

图 一 类别划分超平面

  如图一所示,那些能够将+、-两类样本分开的直线(超平面),都是合理的分类器。那么,哪个分类器是最优的呢?我们可以看到,当一个新的样本(样本可能有扰动)出现在图中4个红色圆圈所在位置时,分类器1,2,4,5就极有可能把他分错。根据图一,肉眼可见,分类器3是图中的最优分类器,因为它忍受样本干扰的能力是最强的,用术语说,就是最鲁棒的。那么怎么从数学上来定义这个最优的超平面呢?

  在样本空间中,假设划分超平面是这样的一个平面:

                   (1)

  称为超平面的法向量,b定义了超平面到空间远点的距离,回忆一下高中的立体几何,我们知道,超平面可以由和b唯一确定。那么。怎么样的一个超平面是最优的呢?

  首先,我问这样一个问题,样本空间中任意一个样本,到该划分超平面的距离应该怎么表示?(赶紧回忆一下,点到平面的距离

     (2)

  我们先假设超平面能够将所有的样本正确的进行分类。对任意如果样本属于正类,则有yi=+1,且;如果样本属于负类,则有yi=-1,且

  我们可以选择合适的b,使得离超平面最近的哪一类点满足如下的条件:,这些点就称为支持向量。那么所有样本可以这样表示:

(3)

  如图二所示,支持向量用圈圈圈住了。两个异类的支持向量的距离可以表示为:   (4)

  图二 支持向量与间隔

  那么选择最优的划分超平面就可以转为成如下的数学表达式:

                                          (5)

  为了计算简便,(5)式等价于如下:

                                          (6)

  怎么样,这就是SVM的基本型了,有没有感受到数学语言的魅力?简洁、明确而又优美。

  

2. 支持向量机如何学习

  

  既然我们明确了SVM是个怎么样的问题,接下来要考虑的就是如何利用数据集D求得上述的超平面。

  我们期望根据式6,获得一个模型:

                                               (7)

  

  式6是一个凸二次规划问题,可能会有相关的优化计算包可以求解。但是SVM有自己的更为高效的求解方式,我们来好好说一下。

  求解这种带限制条件的极值问题,用的最多的应该式拉格朗日乘子法。我们对式6的每个约束条件乘以拉格朗日乘子:

                              (8)

  其中为拉格朗日乘子向量,注意向量的长度和数据集D中样本的数目相同。根据拉格朗日极值法,分别对w和b求偏导,并取极值得到:

                                                (9)

                                                 (10)

  将式(9)(10)带入式(8),可以得到:

                          

  

  参考https://blog.csdn.net/zlsjsj/article/details/80522650

  我们可以得到式6的对偶问题:

                                    (11)

  

  这么多公式,相信大家看到都有点烦了,这里总结一下,理一理思路。

  我们得到式6的SVM基本型之后,想要用一种高效的方式来求解SVM的划分超平面。在限定条件下的极值问题,我们想到了拉格朗日乘子法。通过求偏导、解极值之后,我们消去w和b,问题变成了解决式6的对偶问题式11。这样的话,求解w和b就转化成了求解拉格朗日乘子。将所有拉格朗日乘子求出之后,就得到了模型:

                              

  

  这里我们注意,拉格朗日乘子的个数与数据集样本的个数相同。

  那么,式11该如何高效的求解呢?下面我们SMO(Sequential Minimal Optimization)算法就登场了。

  SMO算法的基本思路是各个击破,逐个参数优化求解。具体来说就是,先选定一个参数,然后固定除之外的所有其他参数,这样就可以根据式11求极值,求得合适的。具体来说,是这样的,先选定两个参数,根据式11的限制条件会有:

                                    (12)

  其中,

  可以用式12将来表示,带入到式11中,得到一个关于的单变量二次规划(二次函数求极值)问题,就可以高效的进行求解了。

  

2. SVM中的核函数

  上述的SVM问题的定义及求解过程中,隐含了一个假设,就是存在一个超平面,能够将两类样本分开,即问题是线性可分的。那么,如果问题不是线性可分的呢?例如,很简答的“异或”问题就是线性不可分的。

  

                                图三 线性不可分问题及其非线性映射

  

  如图三所示,在二维空间中,没有办法找到一条直线,将“异或”问题进行正确的区分。那么如何解决线性不可分的问题呢?在图三中,将四个样本经过一个映射函数,映射到三维空间中,就可以通过一个平面将该问题划分开了。

  这样我们就有了利用SVM去分类线性不可分问题的思路了。我们可以通过一个映射函数,将样本从原空间映射到高维空间,再利用上面章节的SVM原理进行分类就可以了。

  下面我们再简单说一下利用升维的办法用SVM进行分类的过程。

  训练样本集经过进行映射,变成了,那么我们要获得这样一个模型:

                                              (13)

  在如下的限制条件下:

                                            (14)

  同样,得到它的对偶问题:

                                 (15)

  同样,问题的本质并没有改变,我们其实还是可以用SMO算法求解向量。只是多了一步,要计算,当样本空间的维度很大时,这个计算量时很大的。为了简化计算,我们聪明的算法专家提出了核函数的概念,所谓核函数,就是为了简化上述计算而设计出来的函数,它满足如下要求:

                                   (16)

  那么式15就可以改写为:

                                   (17)

  

  我们仔细回顾下抑或问题的映射过程,可以发现,其实映射过程不是唯一的,只要满足一定的性质,映射函数可以很多,同样核函数也可以很多。

  我们先列出来常用的核函数:

    

                                    图四 常用核函数列表

  那么,加入我们使用的高斯核,则式17可以表示为:

                               (18)

  

  我们可以看到加入核函数后,能够顺利解决线性不可分的问题,但是计算过程却并没有因此而变得复杂。

  关于核函数的选择以及过拟合的处理,可以用软间隔的技术,大体的思想就是在最大化间隔的同时,允许一些样本出现在间隔里。感兴趣的同学可以出门百度一下,这里不再详述。

  这篇博客可能没有太多原创的思考,但是都是小Dream根据自己的理解一个字一个字码的,可能在遣词造句上没有教科书那么严谨。但是我觉得技术博客存在意义就在于用一种朴实易懂的语言介绍一些在实际工作中非常实用的技巧、经验和技术。

  

---------------------------------------------------------------------------------------------------------------------------------

分享时刻:

  你要记住,人生聚散起伏太常见。生命太短,铭记那些温暖与真诚吧,倒掉那些凉掉的茶水。

  

NLP自然语言处理系列5-支持向量机(SVM)的更多相关文章

  1. 一步步教你轻松学支持向量机SVM算法之案例篇2

    一步步教你轻松学支持向量机SVM算法之案例篇2 (白宁超 2018年10月22日10:09:07) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  2. 一步步教你轻松学支持向量机SVM算法之理论篇1

    一步步教你轻松学支持向量机SVM算法之理论篇1 (白宁超 2018年10月22日10:03:35) 摘要:支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于 ...

  3. 转:机器学习中的算法(2)-支持向量机(SVM)基础

    机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...

  4. 机器学习第7周-炼数成金-支持向量机SVM

    支持向量机SVM 原创性(非组合)的具有明显直观几何意义的分类算法,具有较高的准确率源于Vapnik和Chervonenkis关于统计学习的早期工作(1971年),第一篇有关论文由Boser.Guyo ...

  5. [白话解析] 深入浅出支持向量机(SVM)之核函数

    [白话解析] 深入浅出支持向量机(SVM)之核函数 0x00 摘要 本文在少用数学公式的情况下,尽量仅依靠感性直觉的思考来讲解支持向量机中的核函数概念,并且给大家虚构了一个水浒传的例子来做进一步的通俗 ...

  6. NLP 自然语言处理实战

    前言 自然语言处理 ( Natural Language Processing, NLP) 是计算机科学领域与人工智能领域中的一个重要方向.它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和 ...

  7. 【IUML】支持向量机SVM

    从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...

  8. 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...

  9. 以图像分割为例浅谈支持向量机(SVM)

    1. 什么是支持向量机?   在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...

随机推荐

  1. Redis在window上安装

    转:https://www.cnblogs.com/M-LittleBird/p/5902850.html 在windows上启动RabbitMQ: 这是Redis的启动,需要制定配置文件,否则连接不 ...

  2. SQL记录-PLSQL记录

    PL/SQL记录   PL/SQL记录就是可以容纳不同类型的数据项的数据结构.记录由不同字段,类似于数据库表的行. 例如,要保留跟踪图书馆中的书籍.可能要跟踪有关每本书下面的属性类似:标题,作者,主题 ...

  3. 启动MyEclipse8.5时未响应

    错误原因: MyEclipse在进行编译时被强行关闭,就会编译内容出错. 解决方法: 1. 换个工作空间. 2.    寻找到工作空间那,访问到H:\javaWork5\.metadata\.plug ...

  4. Linux命令(六)Linux超级用户和管理组

    修改文件目录的所属组

  5. Spring RedisTemplate操作-发布订阅操作(8)

    @Component("sub") public class Sub implements MessageListener{ @Autowired private StringRe ...

  6. scala 基础到高阶

    本文打算对这小段时间学习 scala 以及 spark 编程技术做个小结,一来温故而知新,而来为以后查阅方便 spark scala 入门小例子  文本文件 UserPurchaseHistory.c ...

  7. 思考的乐趣----matrix67数学笔记:最精妙的无字证明

    从<思考的乐趣----matrix67数学笔记>一书中看到这个证明,据说在mathoverflow网站上这个无字证明获得了最多的投票! http://mathoverflow.net/qu ...

  8. javascript沙箱模式

    沙箱模式解决了命名空间模式的如下几个缺点: 1.对单个全局变量的依赖变成了应用程序的全局变量依赖.在命名空间模式中,是没有办法使同一个应用程序或库的2个版本运行在同一个页面中.2.对这种以点分割的名字 ...

  9. PHP删除数组中空值

    array_filter   函数的功能是利用回调函数来对数组进行过滤,一直都以为用回调函数才能处理, 却没有发现手册下面还有一句,如果没有回调函数,那么默认就是删除数组中值为false的项目 代码: ...

  10. redhat本地yum源配置

    /dev/sr0是光驱的设备名,/dev/cdrom代表光驱 /dev/sr0 与/dev/cdrom /dev/cdrom 只是一个到sr0的符号链接 mount /dev/sr0   /mnt   ...