支持向量机(Support Vector Machine,简称SVM)是Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。SVM是我们常用的一种机器学习的分类器,其中的数据设涉及拉格朗日方程,等式优化,梳数理统计等很多问题,但是我这里并不想多说数学的问题,只是想理解其后的原理。

SVM(support vector machine)简单的说是一个分类器,并且是二类分类器。

  • Vector:通俗说就是点,或是数据。
  • Machine:也就是classifier,也就是分类器。

实际上((support vector)支持向量是在SVM中关键的概念,概念上说决定决策边界的数据叫做支持向量,实际上我们使用SVM就是找到一个超平面,将不同类别的数据分割开来,而那个超平面就是所谓的支持向量。下面的两个图就是例子。

  

在寻找这个超平面的时候,当然遵循的规则是最大分类间隔,对于一个包含 n 个点的数据集,就像例子中所示的,我们可以很自然地找到很多可以分割如下点的线但是我们肯定很容易知道不同线的分类效果是不一样的,比如红线靠近下半段,而蓝线几乎是在中间的,如果一个新的数据点来了之后根据红线的判断它是属于差类别的,而从蓝线看来他是属于圈类别的,这就出现了如何优化得到最佳分界面的问题。

SVM中,如果存在两类数据,我们举例最简单的二维数据,那么我们就可以把数据画在一个二维平面上,此时我想找到一个决策面(决策边界)去将这两类数据分开。如下图所示:

  

我们可以发现存在多个决策面可以划分两类数据,但是其中必然存在一个面使得对两类数据的距离最远也就我们所说的分类效果最佳,这对我们以后的预测工作使用积极作用的。实际的计算中,分类器通过不断的调整直线的参数,而后通过计算直线到点距离不断比较当前直线对分类的影响,最终找到符合要求的最佳的直线。

最大分类间隔

那么这里的最佳要求是什么,什么样的直线才是符合要求的,那就是

SVM 通过使用最大分类间隙Maximum Margin Classifier 来设计决策最优分类超平面,而为何是最大间隔,却不是最小间隔呢?因为最大间隔能获得最大稳定性与区分的确信度,从而得到良好的推广能力(超平面之间的距离越大,分离器的推广能力越好,也就是预测精度越高,不过对于训练数据的误差不一定是最小。

我们可以看到分界面的直线是有一定斜率的,我们寻找距离该直线最近的两个类别中的点,也就是粉色和蓝色线所标记出来的点,在这种情况下分界面到两侧最近的距离是等长度的,也是多种情况中距离最大的,可以最清晰的将二者进行分类。

支持向量

前面也说过支持向量,实际上从名字上就能听出来,支持向量的意思就是支撑我们分界面的向量,  可以看到两个支撑着中间红线的蓝线和粉线,它们到中间的红线的距离相等,即我们所能得到的最大的分类间隔 。即可以明白,在分类中一定会有这样的数据点,根据他们来找到符合我们要求的超平面,它们用来计算距离并“支撑”我们得到的哪个超平面,而这些“支撑”的点便叫做支持向量Support Vector。

线性分类器

实际上就是上边举的例子。支持向量机算法如何实现最大分类间隔的任务呢?我们可以先从线性分类器开始理解它,支持向量在没有引入核函数的时候就是一个线性的分类器。而实际的通俗的来说,一个二维平面的分割距离的计算依靠两个东西:

1.将数据尽量的分割在平面的两侧,如果难以分割那么也要尽量减少分割错误的数据点。

2. 存在多个平面时,需要使用一个就算距离的算法来衡量平面的好坏。

线性不可分

线性不可分,则可以理解为自变量和因变量之间的关系不是线性的。实际上,线性可不分的情况更多,我们可以通过将原始空间映射到一个高维空间,如果高维空间中数据集是线性可分的,那么问题就可以解决了。

可以看出来它们实际山就是计算距离的式子。

实际上举个简单的例子就是下面这个图,在平面上看来确实很难分辨,但是映射到高维空间之后我们可以看到数据点变为稍微可以分割的了

matlab中的libsvm

关于来历不想多说,在matlab下这是一个非常好用的svm工具,不过安装的时候可能需要编译一下才能使用,使用的方法十分简单,在以前做东西的使用用过一段时间,并且现在涉及svm的也都是用的MATLAB的这个工具。

具体的安装可以参考下:

https://blog.csdn.net/forever__1234/article/details/78148108

libsvm参数意义

在最初使用的时候最不能理解的就是模型训练出来之后有一堆的参数,以前也没有在意,后来有一段时间觉得了解一下还是有必要的,所以当时就整理了一下。

model =
Parameters: [5x1 double]
nr_class: 2
totalSV: 259
rho: 0.0514
Label: [2x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [259x1 double]
SVs: [259x13 double]
>> model.Parameters
ans =
0
2.0000
3.0000
2.8000
0

model.Parameters参数意义从上到下依次为:

  • -s svm类型:SVM设置类型(默认0)
  • -t 核函数类型:核函数设置类型(默认2)
  • -d degree:核函数中的degree设置(针对多项式核函数)(默认3)
  • -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数) (默认类别数目的倒数)
  • -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)

即在本例中通过model.Parameters我们可以得知 –s 参数为0;-t 参数为 2;-d 参数为3;-g 参数为2.8(这也是我们自己的输入);-r 参数为0。

nr_class 总分类类别  Label 表示标签
>> model.Label
ans =
1
-1
>> model.nr_class
ans =
2
model.totalSV model.nSV
>> model.totalSV
ans =
259
>> model.nSV
ans =
118
141

重要知识点:
model.totalSV代表总共的支持向量的数目,这里共有259个支持向量;
model.nSV表示每类样本的支持向量的数目,这里表示标签为1的样本的支持向量有118个,标签为-1的样本的支持向量为141。

model.ProbA model.ProbB

关于这两个参数这里不做介绍,使用-b参数时才能用到,用于概率估计。

最后我想截取一下一位师傅的描述 真的是很有意思

武功大侠接受别人的挑战,要求是用一张木板将不同颜色的求分开。可是一看这根本不可能啊现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起木板,插到了两种球的中间。

现在,从空中的魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。现实一般的数据是线性不可分的,这个时候,我们就需要像大侠一样,将小球拍起,用木板将小球进行分类。想要让数据飞起,我们需要的东西就是核函数(kernel),用于切分小球的木板,就是超平面。

http://blog.sina.com.cn/s/blog_6646924501018fqc.html

https://blog.csdn.net/hx14301009/article/details/79762666

https://blog.csdn.net/u014433413/article/details/78427574

https://www.cnblogs.com/spoorer/p/6551220.html

https://blog.csdn.net/chaipp0607/article/details/73662441

https://blog.csdn.net/chaipp0607/article/details/73716226

https://www.zhihu.com/question/21094489/answer/86273196、

https://www.cnblogs.com/berkeleysong/articles/3251245.html

人工智能-SVM 支持向量机相关推荐

  1. 网格向量必须包含特征点。_【专题研究】基于SVM支持向量机模型的选股策略

    研究过集成学习中的随机森林和XGBoost后,本文将介绍一种更传统的机器学习方法:SVM支持向量机.SVM由于其较高的准确度,并且能够解决非线性分类问题,曾一度成为非常流行的机器学习算法.本文分别介绍 ...

  2. SVM支持向量机、BP神经网络

    SVM支持向量机 [[五分钟机器学习]向量支持机SVM--学霸中的战斗机-哔哩哔哩] [机器学习-白板推导系列(六)-支持向量机SVM(Support Vector Machine)-哔哩哔哩] BP ...

  3. 机器学习(18)-- SVM支持向量机(根据身高体重分类性别)

    目录 一.基础理论 二.身高体重预测性别 1.获取数据(男女生身高体重) 2.数据处理(合并数据) 3.设置标签 4.创建分类器(支持向量机) 4-1.创建svm分类器 4-2.设置分类器属性(线性核 ...

  4. R语言SVM支持向量机模型数据分类实战:探索性数据分析、模型调优、特征选择、核函数选择

    R语言SVM支持向量机模型数据分类实战:探索性数据分析.模型调优.特征选择.核函数选择 目录 R语言SVM支持向量机模型数据分类实战:探索性数据分析.模型调优.特征选择.核函数选择 ​ #SVM基本原 ...

  5. SVM -支持向量机原理详解与实践之五

    SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性 ...

  6. ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)

    ML:基于自定义数据集利用Logistic.梯度下降算法GD.LoR逻辑回归.Perceptron感知器.支持向量机(SVM_Linear.SVM_Rbf).LDA线性判别分析算法进行二分类预测(决策 ...

  7. ML之SVM:基于SVM(支持向量机)之SVC算法对手写数字图片识别进行预测

    ML之SVM:基于SVM(支持向量机)之SVC算法对手写数字图片识别进行预测 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 X_train = ss.fit_transform(X ...

  8. SVM支持向量机详解

    支持向量机 支持向量机 优化目标 大边界 大边界分类背后的数学 核函数 使用SVM 什么时候使用SVM 支持向量机(Support Vector Machine)是一个广泛应用于工业界和学术界的算法. ...

  9. SVM支持向量机(上)

    参考https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/9683835?fromtitle=SVM&a ...

  10. OpenCV SVM支持向量机和KNearest数字识别的实例(附完整代码)

    OpenCV SVM支持向量机和KNearest数字识别的实例 OpenCV SVM支持向量机和KNearest数字识别的实例 OpenCV SVM支持向量机和KNearest数字识别的实例 #inc ...

最新文章

  1. java web项目优化记录:优化考试系统
  2. PS5 发布,揭秘真假难辨的虚拟和现实
  3. ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-中)
  4. 颜值当道,画风为王——桌游美术风格漫谈
  5. 图形图像技术在手游中的潜在应用
  6. VForum 2008系列之六:分论坛视频-虚拟世界中的应用
  7. 您不能在64-位可执行文件上设置DEP属性?
  8. 电脑运行卡顿怎么处理_【众点学】电脑运行PS卡顿?可能是你的虚拟内存没设置好!...
  9. 为什么vacuum后表还是继续膨胀?
  10. CW3 Clarifications
  11. django中搜索表单
  12. Delphi Invalidate的用法
  13. 2019厦门大学计算机复试,2019年厦门大学考研复试分数线已出现
  14. JDBC获取数据库(mysql)四种连接方式(connection)
  15. 6大智慧电厂关键技术,三维可视化仅是基础
  16. Java第一周练习题
  17. 印度软件和中国软件工程师_印度的软件公司类型
  18. 杰理之IIC sclk时钟【篇】
  19. 经纬度转小数格式 java_经纬度格式转换工具
  20. 一本通1527欧拉回路

热门文章

  1. c语言选择题题及答案,C语言选择题练习及答案.doc
  2. 小程序开发流程详细,小程序开发教程
  3. C#控制Bartender自动列印的2种方法(附源码)
  4. nRF52840学习-初识1-1
  5. Excel导入txt数据乱码
  6. (二)Latex编译与xelatex编译
  7. 笔记本BIOS启动项中找不到新装的固态硬盘解决
  8. BDTC2016: 中航信 昆仑数据 兮易控股 宝信议题公布
  9. OpenCV 常用网址和基础知识
  10. Ubuntu20.04下opencv的安装