支持向量机(Support Vector Machine),一般简称SVM,它是个二分类的分类模型,即给定一个包含正例和反例的样本集合(有监督的机器学习算法),支持向量机的目的是寻找一个超平面来将样本中的正例和反例用分开,其原则是使正例和反例之间的间隔最大。

最优分类超平面

什么是超平面?

  • 在一维空间,超平面是一个点
  • 在二维空间,它是一条线
  • 在三位空间,它是一个面
  • 在更高维度上,你能够称它为超平面

什么是最优分类超平面?

最优超平面将是拥有最大边距的那个超平面。

什么是间隔?

给定一个超平面,我们能够计算出超平面到最近的一个点的距离。一旦我们算出这个值,如果我们将距离乘以2我们就可以得到间隔(margin)。

什么是支持向量?

支撑向量本质是向量,而这些向量却起着很重要的作用,如果做分类,他们就是离分界线最近的向量,也就是说分界面是靠这些向量确定的,他们支撑着分类面;就是离最优分类平面最近的离散点,也可以称为向量。

支持向量机的目标是找出能够最大化训练集数据间隔(margin)的最优分类超平面。学习的目标是在特征空间中找到一个分类超平面wx+b=0,分类面由法向量w和截距b决定。分类超平面将特征空间划分两部分,一部分是正类,一部分是负类。法向量指向的一侧是正类,另一侧为负类。给定一个二分类问题的训练样本集如下:

由于这些数据是线性可分的,所以可以用一条直线将这两类数据分开,这条直线就相当于一个超平面,超平面一边的数据点所对应的 y 全是-1 ,另一边所对应的 y 全是1,我们的目标是找到一条分界线/超平面来将两类区分开,如下图:

在样本空间中,超平面可以通过以下线性方程来描述:

其中,w=()为法向量,决定了超平面的方向;b为位移项,决定了超平面与原点的距离,如果一个超平面能够将训练样本正确分类,则我们希望这个超平面具有的性质是,对于()∈D,有:

这个式子也是我们在得到超平面之后预测一个新样本的判决条件。显然,上图中有5个超平面都满足要求。但是,哪一个是最好的呢?直观上看,应该去找位于两类训练样本“正中间”的超平面,即上图中最粗的分界线。因为这条线能够在最大程度上容忍两类的数据波动和噪声。因此,为了能够得到“正中间”位置的超平面,我们将上述条件变得更加严格:

显然,条件严格后,靠近样本边缘的一些超平面可能会不符合要求,最后会剩下比较靠中间的几个超平面。那么,如何选出最“正中间”的那个超平面呢?我们可以给一个具体的量化目标:让超平面与最近的样本的距离最大。如下图所示,距离超平面最近的这几个样本点可以使得公式 (1) 的等号成立,它们被称为“支持向量”(Support Vector)

所以,样本空间中任意点x到超平面的距离的计算公式为:

因此,两类的支持向量到超平面的距离之和为2w,这就是“间隔”(margin),如果想找到具有“最大间隔”(maximum margin)的超平面,那么需要最小化。因此,最后需要求解的问题为:

这就是支持向量机(Support Vector Machine,SVM)的基本型。

对偶问题

因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。

此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量 (dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法,这样做的优点在于:一者对偶问题往往更容易求解;二者可以自然的引入核函数,进而推广到非线性分类问题。

那什么是拉格朗日对偶性呢?简单来讲,通过给每一个约束条件加上一个拉格朗日乘子(Lagrange multiplier),定义拉格朗日函数(通过拉格朗日函数将约束条件融合到目标函数里去,从而只用一个函数表达式便能清楚的表达出我们的问题):

简单总结:和感知机的对偶求解类似,SVM也是通过样本的线性加权和来求解w和b,进而得到SVM的最优解。我们注意到,在利用对偶求解的过程中,是要利用两个样本的内积来求解的,这就为核函数的使用埋下了伏笔。

核函数

左图为原始空间,很明显的圆圈内是一类,圆圈是一类,此时单纯用线性分类器是无法有效分类的,因此有没有办法找到一个非线性分类器让两类可以分开。

核函数(kernel functions)是机器学习里的一个常用技巧,它接收两个样本的特征向量,给出一个标量;这个标量可以理解成把两个特征向量通过一个「隐藏的映射」变换到一个高维空间之后,再做内积的结果。核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。

用 x , y 表示两个特征向量,K 表示核函数,φ 表示从特征空间到高维空间的隐藏映射,则有:

K ( x , y )  =  < φ(x) , φ(y) >

其中 K ( x,y ) 就是一个kernel函数, < φ(x) , φ(y) >表示向量做内积,其中

此时可以经由简单的推导得到投影函数(φ),如下

此时已经将特征从2维空间转换到3维空间。

很明显只要一个Hyperplane(线性分类)就可以完美分类,如下左图(水蓝色的平面),而其对应到原始空间(下右图)则是中间分类的那个圆圈。

核函数和映射没有关系。核函数只是用来计算映射到高维空间之后的内积的一种简便方法。

核函数包括线性核函数、多项式核函数、高斯核函数等,其中高斯核函数最常用,可以将数据映射到无穷维,也叫做径向基核函数(Radial Basis Function 简称 RBF),具体有:

使用SVM算法的思路:

(1)简单情况,线性可分情况,把问题转化为一个凸优化问题,可以用拉格朗日乘子法简化,然后用既有的算法解决;

(2)复杂情况,线性不可分,用核函数将样本投射到高维空间,使其变成线性可分的情形,利用核函数来减少高纬度计算量。

参考链接:http://www.devtalking.com/articles/machine-learning-14/
参考链接:https://baijiahao.baidu.com/s?id=1618526683185169455&wfr=spider&for=pc
参考链接:https://www.cnblogs.com/guoyaohua/p/8855636.html
参考链接:http://www.devtalking.com/articles/machine-learning-14/
参考链接:https://murphypei.github.io/blog/2019/02/svm-kernel.html

模型算法-支持向量机SVM相关推荐

  1. 机器学习中的算法-支持向量机(SVM)基础

    机器学习中的算法-支持向量机(SVM)基础 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处 ...

  2. 支持向量机分类示例python_分类算法-支持向量机 SVM

    SVM(Support Vector Machine) 指的是支持向量机,是常见的一种判别方法.在机器学习领域,是一个有监督的学习模型,通常用来进行模式识别.分类及回归分析.与其他算法相比,支持向量机 ...

  3. 机器学习模型3——支持向量机SVM

    前置知识 拉格朗日乘子法 支持向量机SVM SVM:SVM全称是supported vector machine(⽀持向量机),即寻找到⼀个超平⾯使样本分成两类,并且间隔最⼤. SVM能够执⾏线性或⾮ ...

  4. 分类算法-支持向量机(SVM)

    支持向量机(Support Vector Machine,SVM)是Corinna Cortes和Vapnik等于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出许多特有的优势,并能 ...

  5. [机器学习算法]支持向量机SVM原理简介

    一.问题和超平面描述 给定训练集 分类学习最基本的想法就是基于训练集在样本空间中找到一个划分超平面,将不同类别的样本分开,但能将训练样本分开的划分超平面可能有很多,如下图所示: 直观来看,应该去找位于 ...

  6. matlab中svm算法实现,svm算法matlab实现

    svm算法简介解析_中职中专_职业教育_教育专区.svm svm(support... 2008-10-31 19:32 支持向量机 Matlab 示例程序四种支持向量机用于函数拟合与模式识别的 Ma ...

  7. 算法模型---支持向量机(SVM)

    来源:JerryLead 支持向量机的特点 支持向量机的用途 SVM一般是用来分类的(一般先分为两类,再向多类推广) 支持向量机的适用范围 数据类型 自变量可以数值型和标称型数据 因变量是二分类,通过 ...

  8. ML之mlxtend:基于iris鸢尾花数据集利用逻辑回归LoR/随机森林RF/支持向量机SVM/集成学习算法结合mlxtend库实现模型可解释性(决策边界可视化)

    ML之mlxtend:基于iris鸢尾花数据集利用逻辑回归LoR/随机森林RF/支持向量机SVM/集成学习算法结合mlxtend库实现模型可解释性(决策边界可视化) 目录 相关文章 ML之mlxten ...

  9. 支持向量机SVM算法原理及应用(R)

    支持向量机SVM算法原理及应用(R) 2016年08月17日 16:37:25 阅读数:22292更多 个人分类: 数据挖掘实战应用 版权声明:本文为博主原创文章,转载请注明来源. https://b ...

最新文章

  1. 数据oem 操作手册_海口电销外呼系统oem-河南爱聊科技
  2. VC使用编译时间作为版本号
  3. php公交查询系统源代码,基于Smarty公交查询系统的设计与实现(PHP,MySQL)
  4. MATLAB教程(1) MATLAB 基础知识(2)
  5. docker fdfs修改storage ip
  6. LeedCode篇:876. 链表的中间结点
  7. MyEclipse 2015 运行tomcat 内存溢出的解决方法
  8. scala学习笔记三----scala函数式编程风格学习
  9. lunix入侵别人电脑_记录一次Linux的实战入侵过程
  10. Linux下iwconfig权限,Linux系统中iwconfig命令使用详解
  11. erroe C1083:无法打开包括文件(源文件)
  12. UE4中文汉字字体制作
  13. MySQL必知必会——第十四章使用子查询
  14. 百度版ChatGPT:文心一言发布会盛大召开!
  15. 粒子群算法Particle Swarm Optimization超详细解析+代码实例讲解
  16. Python KPM算法
  17. 【Unity】Unity在运行时崩溃了怎么办?别害怕,还有救!
  18. 电视升级鸿蒙系统,网友升级了鸿蒙系统,各项体验都很不错,终于有了自己的系统...
  19. [黑客讲坛]互联网公司的蛋疼 7
  20. html js 图片跑马灯,jquery跑马灯 图片不间断滚动效果

热门文章

  1. SpringMVC 的使用映射路径 mvc:resources
  2. iOS 向下取整、向上取整、四舍五入
  3. Nexus 私服 3rd party 库被误删怎么办
  4. Linux文件与目录的rwx权限
  5. loadrunner 的脚本语言
  6. 从考研说起:大学、职场、个人选择
  7. 写代码这条路,能走多远?工程师能力模型告诉你
  8. Spring Cloud构建微服务架构(五)服务网关
  9. JEECMS自定义标签开发步骤
  10. Java洛谷P5461 赦免战俘讲解