为什么80%的码农都做不了架构师?>>>   

支持向量机(SVM)的基本模型是定义在特征空间上间隔最大的线性分类器,是一种二分类器,使用核函数后可以用于非线性分类。

支持向量机可以分为以下几种类型:

  • 线性可分支持向量机:也称硬间隔支持向量机。
  • 线性支持向量机:也称软间隔支持向量机,当数据近似线性可分时,通过软间隔最大化。
  • 非线性支持向量机:,当书记不可分时,通过核函数及软间隔最大化,获得一个支持向量机

一:线性可分支持向量机:

假设训练集可以在特征空间中找到一个分离超平面,将所有正例划在超平面一边,将所有反例划在超平面另一边,则使用线性可分支持向量机。

首先给出一个非常非常简单的分类例子,我们要用一条直线,将下图中黑色的点和圆圈分开,如图上的线我们可以找到无数条直线划分两类点。

假如说,我们令黑色的点 = -1, 白色的点 =  +1,直线f(x) = w.x + b,这儿的x、w是向量,其实写成这种形式也是等价的f(x) = w1x1 + w2x2 … + wnxn + b。

在二维空间中我们需要一条线来划分,在三维空间中我们需要一个平面来划分,在n维空间中我们需要n-1维超平面进行划分。

定义决策函数为sgn(f(x)),sgn表示符号函数,当f(x) > 0的时候,sgn(f(x)) = +1, 当f(x) < 0的时候sgn(f(x)) = –1。

现在我们需要在无数条划分超平面中获得一个最优的划分f(x)。

样本分类的可靠程度可以用来寻找最优划分,样本距离分类超平面越远,则分类越可靠。

第一种分法:

第二种分法:

因此,上面两种分法第二种的可靠度更高。就像我们平时判断一个人是男还是女,就是很难出现分错的情况,这就是男、女两个类别之间的间隙非常的大导致的,让我们可以更准确的进行分类。在SVM中,称为Maximum Marginal,是SVM的一个理论基础之一。选择使得间隙最大的函数作为分割平面是由很多道理的,比如说从概率的角度上来说,就是使得置信度最小的点置信度最大。

上图被红色和蓝色的线圈出来的点就是所谓的支持向量(support vector)。

注:支持向量时指训练数据集中与超平面距离最近的样本。

上图就是一个对之前说的类别中的间隙的一个描述。Classifier Boundary就是f(x),红色和蓝色的线(plus plane与minus plane)就是support vector所在的面,红色、蓝色线之间的间隙就是我们要最大化的分类间的间隙。

这里直接给出M的式子:(从高中的解析几何就可以很容易的得到了)

另外支持向量位于wx + b = 1与wx + b = -1的直线上,我们在前面乘上一个该点所属的类别y(还记得吗?y不是+1就是-1),就可以得到支持向量的表达式为:y(wx + b) = 1,这样就可以更简单的将支持向量表示出来了。

当支持向量确定下来的时候,分割函数就确定下来了,两个问题是等价的。得到支持向量,还有一个作用是,让支持向量后方那些点就不用参与计算了。这点在后面将会更详细的讲讲。

在这个小节的最后,给出我们要优化求解的表达式:

||w||的意思是w的二范数,跟上面的M表达式的分母是一个意思,之前得到,M = 2 / ||w||,最大化这个式子等价于最小化||w||。

这个式子有还有一些限制条件,完整的写下来,应该是这样的:(原问题

s.t的意思是subject to,也就是在后面这个限制条件下的意思,这个词在svm的论文里面非常容易见到。这个其实是一个带约束的二次规划(quadratic programming, QP)问题,是一个凸问题,凸问题就是指的不会有局部最优解,可以想象一个漏斗,不管我们开始的时候将一个小球放在漏斗的什么位置,这个小球最终一定可以掉出漏斗,也就是得到全局最优解。s.t.后面的限制条件可以看做是一个凸多面体,我们要做的就是在这个凸多面体中找到最优解。

二、转化为对偶问题,并优化求解:

这个优化问题可以用拉格朗日乘子法去解,使用了KKT条件的理论,这里直接作出这个式子的拉格朗日目标函数:

求解这个式子的过程需要拉格朗日对偶性的相关知识(另外pluskid也有一篇文章专门讲这个问题),并且有一定的公式推导,如果不感兴趣,可以直接跳到后面蓝色公式表示的结论,该部分推导主要参考自plukids的文章。

首先让L关于w,b最小化,分别令L关于w,b的偏导数为0,得到关于原问题的一个表达式

将两式带回L(w,b,a)得到对偶问题的表达式

新问题加上其限制条件是(对偶问题):

这个就是我们需要最终优化的式子。至此,得到了线性可分问题的优化式子

求解这个式子,有很多的方法,比如SMO等等,个人认为,求解这样的一个带约束的凸优化问题与得到这个凸优化问题是比较独立的两件事情,所以在这篇文章中准备完全不涉及如何求解这个话题,如果之后有时间可以补上一篇文章来谈谈:)。

二、转化为对偶问题,并优化求解:

这个优化问题可以用拉格朗日乘子法去解,使用了KKT条件的理论,这里直接作出这个式子的拉格朗日目标函数:

求解这个式子的过程需要拉格朗日对偶性的相关知识(另外pluskid也有一篇文章专门讲这个问题),并且有一定的公式推导,如果不感兴趣,可以直接跳到后面蓝色公式表示的结论,该部分推导主要参考自plukids的文章。

首先让L关于w,b最小化,分别令L关于w,b的偏导数为0,得到关于原问题的一个表达式

将两式带回L(w,b,a)得到对偶问题的表达式

新问题加上其限制条件是(对偶问题):

这个就是我们需要最终优化的式子。至此,得到了线性可分问题的优化式子

求解这个式子,有很多的方法,比如SMO等等,个人认为,求解这样的一个带约束的凸优化问题与得到这个凸优化问题是比较独立的两件事情,所以在这篇文章中准备完全不涉及如何求解这个话题,如果之后有时间可以补上一篇文章来谈谈:)。

三、线性不可分的情况(软间隔):

接下来谈谈线性不可分的情况,因为线性可分这种假设实在是太有局限性了:

下图就是一个典型的线性不可分的分类图,我们没有办法用一条直线去将其分成两个区域,每个区域只包含一种颜色的点。

要想在这种情况下的分类器,有两种方式,一种是用曲线去将其完全分开,曲线就是一种非线性的情况,跟之后将谈到的核函数有一定的关系:

另外一种还是用直线,不过不用去保证可分性,就是包容那些分错的情况,不过我们得加入惩罚函数,使得点分错的情况越合理越好。其实在很多时候,不是在训练的时候分类函数越完美越好,因为训练函数中有些数据本来就是噪声,可能就是在人工加上分类标签的时候加错了,如果我们在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出错了(假如老师给你讲课的时候,某个知识点讲错了,你还信以为真了,那么在考试的时候就难免出错)。这种学习的时候学到了“噪声”的过程就是一个过拟合(over-fitting),这在机器学习中是一个大忌,我们宁愿少学一些内容,也坚决杜绝多学一些错误的知识。还是回到主题,用直线怎么去分割线性不可分的点:

我们可以为分错的点加上一点惩罚,对一个分错的点的惩罚函数就是这个点到其正确位置的距离:

在上图中,蓝色、红色的直线分别为支持向量所在的边界,绿色的线为决策函数,那些紫色的线表示分错的点到其相应的决策面的距离,这样我们可以在原函数上面加上一个惩罚函数,并且带上其限制条件为:

公式中蓝色的部分为在线性可分问题的基础上加上的惩罚函数部分,当xi在正确一边的时候,ε=0,R为全部的点的数目,C是一个由用户去指定的系数,表示对分错的点加入多少的惩罚,当C很大的时候,分错的点就会更少,但是过拟合的情况可能会比较严重,当C很小的时候,分错的点可能会很多,不过可能由此得到的模型也会不太正确,所以如何选择C是有很多学问的,不过在大部分情况下就是通过经验尝试得到的。

接下来就是同样的,求解一个拉格朗日对偶问题,得到一个原问题的对偶问题的表达式:

蓝色的部分是与线性可分的对偶问题表达式的不同之处。在线性不可分情况下得到的对偶问题,不同的地方就是α的范围从[0, +∞),变为了[0, C],增加的惩罚ε没有为对偶问题增加什么复杂度。

四、核函数:

刚刚在谈不可分的情况下,提了一句,如果使用某些非线性的方法,可以得到将两个分类完美划分的曲线,比如接下来将要说的核函数。

    我们可以让空间从原本的线性空间变成一个更高维的空间在这个高维的线性空间下,再用一个超平面进行划分。这儿举个例子,来理解一下如何利用空间的维度变得更高来帮助我们分类的(例子以及图片来自pluskid的kernel函数部分):

下图是一个典型的线性不可分的情况

但是当我们把这两个类似于椭圆形的点映射到一个高维空间后,映射函数为:

用这个函数可以将上图的平面中的点映射到一个三维空间(z1,z2,z3),并且对映射后的坐标加以旋转之后就可以得到一个线性可分的点集了。

用另外一个哲学例子来说:世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维度来让他们最终有所区别,比如说两本书,从(颜色,内容)两个维度来说,可能是一样的,我们可以加上 作者 这个维度,是在不行我们还可以加入页码,可以加入 拥有者,可以加入 购买地点,可以加入 笔记内容等等。当维度增加到无限维的时候,一定可以让任意的两个物体可分了

回忆刚刚得到的对偶问题表达式:

我们可以将红色这个部分进行改造,令:

这个式子所做的事情就是将线性的空间映射到高维的空间,k(x, xj)有很多种,下面是比较典型的两种:

上面这个核称为多项式核,下面这个核称为高斯核,高斯核甚至是将原始空间映射为无穷维空间,另外核函数有一些比较好的性质,比如说不会比线性条件下增加多少额外的计算量,等等,这里也不再深入。一般对于一个问题,不同的核函数可能会带来不同的结果,一般是需要尝试来得到的。

五、一些其他的问题:

1)如何进行多分类问题:

上面所谈到的分类都是2分类的情况,当N分类的情况下,主要有两种方式,一种是1 vs (N – 1)一种是1 vs 1,前一种方法我们需要训练N个分类器,第i个分类器是看看是属于分类i还是属于分类i的补集(出去i的N-1个分类)。

后一种方式我们需要训练N * (N – 1) / 2个分类器,分类器(i,j)能够判断某个点是属于i还是属于j。

这种处理方式不仅在SVM中会用到,在很多其他的分类中也是被广泛用到,从林教授(libsvm的作者)的结论来看,1 vs 1的方式要优于1 vs (N – 1)。

2)SVM会overfitting吗?

SVM避免overfitting,一种是调整之前说的惩罚函数中的C,另一种其实从式子上来看,min ||w||^2这个看起来是不是很眼熟?在最小二乘法回归的时候,我们看到过这个式子,这个式子可以让函数更平滑,所以SVM是一种不太容易over-fitting的方法。

参考文档:

主要的参考文档来自4个地方,wikipedia(在文章中已经给出了超链接了),pluskid关于SVM的博文,Andrew moore的ppt(文章中不少图片都是引用或者改自Andrew Moore的ppt,以及prml

转载于:https://my.oschina.net/clgo/blog/908493

机器学习——支持向量机算法相关推荐

  1. 【白话机器学习】算法理论+实战之支持向量机(SVM)

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法A ...

  2. 古老的spc也可以用机器学习(三)-支持向量机算法

    大家都很清楚SPC的中文叫统计过程控制,它的作用是发现过程数据中的异常行为,SPC有8种以上的判异规则,每一中判异规则对应可能的异常原因,非常实用. 现在大数据.机器学习应用越来越广泛,而机器学习算法 ...

  3. 机器学习之支持向量机算法(二)

    五.SVM求解实例 上面其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值.数据:3个点,其中正例 X1(3,3) ,X2(4,3) ,负例X3(1,1) 如下图所示 我们需要求解下式 ...

  4. SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】

    SVM 支持向量机算法(Support Vector Machine )[Python机器学习系列(十四)] 文章目录 1.SVM简介 2. SVM 逻辑推导 2.1 Part1 化简限制条件 2.2 ...

  5. 机器学习之支持向量机算法

    支持向量机算法 概述 原理 SVC, NuSVC 和 LinearSVC 能在数据集中实现多元分类. 非均衡问题 案例:对数据进行分类. 优势 缺点 svc NuSVC LinearSVC examp ...

  6. Python机器学习算法之支持向量机算法

    支持向量机算法 1.算法起源 2.算法概述 3.算法分类 4.算法思想 5.算法步骤 6.算法相关概念 7.算法实现 7.算法优点 8.算法优化 1.算法起源 1963年,前苏联学者Vladimir ...

  7. 机器学习实践:基于支持向量机算法对鸢尾花进行分类

    摘要:List item使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花进行分类. 本文分享自华为云社区<支持向量机算法之鸢尾花特征分类[机器学习]>,作者:上 ...

  8. 支持向量机算法之鸢尾花特征分类【机器学习】

    文章目录 一.前言 1.1 本文原理 1.2 本文目的 二.实验过程 2.1 支持向量机算法SVM 2.2List item使用scikit-learn机器学习包的支持向量机算法,使用全部特征对鸢尾花 ...

  9. 【数学建模】机器学习预测算法(KNN、随机森林、网格搜索对决策树、支持向量机)(Python代码实现)【2021华为杯】

    目录 1 题目 2 数据集介绍及建模目标 3 问题 4 简化描述 5 Python代码实现 1 题目 乳腺癌是目前世界上最常见,致死率较高的癌症之一.乳腺癌的发展与雌激素受体密切相关,有研究发现,雌激 ...

最新文章

  1. Android draw9patch点九图常识
  2. hibernate教程--关联关系的映射详解
  3. linux中vi大括号enter缩进,格式 – 如何在vi中对齐代码(大括号,括号等)?
  4. 网络研讨室_即将举行的网络研讨会:调试生产中Java的5种最佳实践
  5. 服务器闰秒 linux,闰秒导致部分 Linux 服务器高 CPU 使用率
  6. linux 内核开发_25年Linux内核开发中的9课
  7. 面试真题------hashmap与hashset
  8. uniapp创建电子签名
  9. 1688店铺列表接口-(item_search_seller-搜索店铺列表接口)
  10. 文件处理技巧,如何快速复制并覆盖已存在的文件
  11. Excel如何取消合并单元格并填充空单元格
  12. 一文帮你理解 Google SRE 体系
  13. 20200725 PAT甲级 7-2 The Judger (25分)
  14. 星上SAR实时处理调研1
  15. 关于视频字幕(有无外挂字幕)的提取死磕一天的总结
  16. Android无线WiFi调试项目adbwifi摆脱数据线拔插烦恼无轻松远程调试
  17. LWN:5.17 合并窗口第一部分!
  18. Windows怎么删除多余的右键打开方式
  19. 7-2 凑零钱 (30 分)
  20. 荣获2021 CSDN年度社区之星,PPDE郑博培的成长之旅

热门文章

  1. 为啥一个字节等于八比特
  2. mysql连接密码加密_数据库连接用户名和密码加密
  3. linux查找命令which、whereis、find比较解析
  4. 【HTML】学习笔记——表单、框架
  5. 默哀STAND SILENTLY!
  6. Give root password for maintenace (or press Control-D to continue):解决方法
  7. 什么时候用到全排列_【什么情况下要除以一个全排列?举例说明最好,万分感激,】作业帮...
  8. 手游图片素材提取_如果你想获得心爱手游中的图片素材,可以试试这款软件!...
  9. Keras LSTM对20 Newsgroups数据集进行分类
  10. java button中文乱码_java解决中文乱码的几种写法