学习SVM(四) 理解SVM中的支持向量(Support Vector)

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/chaipp0607/article/details/73716226

学习SVM(一) SVM模型训练与分类的OpenCV实现 
学习SVM(二) 如何理解支持向量机的最大分类间隔 
学习SVM(三)理解SVM中的对偶问题 
学习SVM(四) 理解SVM中的支持向量(Support Vector) 
学习SVM(五)理解线性SVM的松弛因子

我们在开始接触SVM时肯定听到过类似这样的话,决定决策边界的数据叫做支持向量,它决定了margin到底是多少,而max margin更远的点,其实有没有无所谓。 
然后一般会配一张图说明一下哪些是支持向量(Support Vector),这个图在之前的学习SVM(二) 如何理解支持向量机的最大分类间隔里面就有,这里不在重复贴了。

但是问题的关键是,这些Support Vector是怎么被确定的呢? 
在学习SVM(三)理解SVM中的对偶问题计算得到新的优化目标

 

注意这里的约束条件有n+1个,之后只需要根据Data(x),Label(y)求解出满足条件的拉格朗日系数a,并将a带回求得w和b,于是就有了最后的决策边界。(w,b,x,y,a都是向量) 
 
注意:在上面b的公式中,i=1,2,…,n。但是j却没有给值,这是因为j是任意一个支持向量都可以。

在这里对w和b的公式的推导做一个简短说明,w是通过拉格朗日求偏导后推出的;在学习SVM(二) 如何理解支持向量机的最大分类间隔中我们知道最大间隔为: 
 
那么支持向量到决策边界的距离为: 
, 
同时根据点到直线的距离公式有: 
 
超平面(w,b)能够将训练样本正确分类,即对于,因此去掉绝对值可以得到关于b的公式。

而非支持向量的数据就在求解参数a,w,b的过程中,前面的参数w求得的结果会为0,这样就满足了之前的说法,只有支持向量在影响着决策边界的确定,举个例子:

上图中有3个点,x1(3,3),x2(4,3),x3(1,1),对应的:y1=y2=1,y3=-1。 
很显然x1和x3是两个支持向量,在决策平面的两侧,我们带入到上面的公式求解一下: 
由于两个求和公式(n=3),所以括号里面的是项会有9个,可以理解为两个for循环嵌套啊(哈~哈~),但是显然这9项里面是有重复的,因为a1*a2 = a2*a1,所以最后会剩下6项: 
a1*a1,a2*a2,a3*a3,2*a1*a3,2*a1*a2,2*a2*a3,举个例子确定前面的系数: 
C*a1*a2 = [(x1)(x2)*y1*y2]a1*a2 
C=2*[(3,3)(4,3)](1)(1)=2(12+9)=42

所以最后的结果如下: 

由约束条件得到:a3=a1+a2,带入到min中可以求得一个关于a1 
和a2的函数:

要求它的最小值,求偏导啊~

最后求解得到: 
a1 = 1.5 
a2 = -1

而a2 = -1的点不满于a2>0的条件,所以最小值在边界上取得。边界情况要么是a1=0,要么是a2=0,于是: 
a1=0时,我们应该把a1的值往s对a2的偏导里面带入: 
a2=2/13 (满足条件) 
此时: 

a2=0时,我们应该把a2的值往s对a1的偏导里面带入: 
a1=1/4 (满足条件) 
此时: 
 
显然后面的结果更小,所以: 
a1 = 1/4 
a2 = 0 
a3 = 1/4

到这里就能验证上面的结论了,a1和a3是x1和x3的系数,x1和x3是支持向量,而x2不是,所以前面的系数是0。因为根据w求解公式,a2=0,所以x2对w权的最后取值没有影响,所以x2不是支持向量。

最后一步,带到上面的式子中求w,b: 
 
w1=w2=0.5 
对于支持向量x1,计算b的值: 

对于非支持向量x2,计算b的值: 

显然,由于b的公式由支持向量与决策平面的距离推导得到,所以x2的计算结果是错误的。 
于是得到最后的决策边界为: 
0.5x1+0.5x2+2=0

学习SVM(四) 理解SVM中的支持向量(Support Vector)相关推荐

  1. 算法工程师面试备战笔记9_支持向量机(SVM)中的支持向量是什么意思

    题目 我们在下面的二元标签的数据集上训练一个线性SVM模型 这个模型中的支持向量是哪些? A. (−1,1),(1,1),(2,1) B. (−1,1),(−1,−1),(2,1) C. (0,1), ...

  2. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters 上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameter ...

  3. vector 赋值_从零开始学习R语言(一)——数据结构之“向量”(Vector)

    本文首发于知乎专栏:https://zhuanlan.zhihu.com/p/59688569 也同步更新于我的个人博客:https://www.cnblogs.com/nickwu/p/125370 ...

  4. Vue学习(四)—— vue中的ajax

    文章目录 第四部分 vue中的ajax 一.axios 1.安装 2.引入 二.vue脚手架配置代理 1.方法一 2.方法二 三.github用户搜索案例 1.接口地址 2.vue 项目中常用的 2 ...

  5. 【Java学习笔记四】Java中的包

    包的声明和引入:在Java语言系统中,Java编译器为每一个类生成一个字节码文件(.class),为了对类文件进行分层和按用途分类管理,同时也为了解决相同类名的文件冲突的问题,Java提供了包机制来管 ...

  6. Maven学习(四)————Eclipse 中的 Maven 工程

    引言 创建一个 Maven 版 Hello World. 一.Eclipse 中 Maven 插件的准备工作 除了 JDK 和必须的 Eclipse 之外,还需要在 Eclipse 中设置Maven ...

  7. COM学习(四)——COM中的数据类型

    上一次说到,COM为了跨语言,有一套完整的规则,只要COM组件按照规则编写,而不同的语言也按照对应的规则调用,那么就可以实现不同语言间相互调用.但是根据那套规则,只能识别接口,并调用没有参数和返回类型 ...

  8. 深度学习(四十二)word2vec词向量学习笔记

    word2vec词向量学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/51564783 个人微博:黄锦池-hjimce 一.使用原版word ...

  9. [深度学习]Part2 支持向量机(SVM)Ch09-1——【DeepBlue学习笔记】

    本文仅供学习使用 本章需要提前学习拉格朗日乘子法.KKT条件.原问题与对偶问题(优化方法) 支持向量机(SVM)Ch09 1. 支持向量机(Support Vector Machine,1995,SV ...

最新文章

  1. Linux-软件包管理
  2. c语言 删除小写字母,c++ - 使用C字符串和指针。 删除除小写字母和空格以外的所有字符 - 堆栈内存溢出...
  3. [转载]明天的数字营销分析工具2
  4. vb.net 设置打印纸张与页边距_文字办公—Word文档如何设置装订线
  5. extjs获取焦点和失去焦点_[NBA夏联]焦点单三连红,NBA夏季联赛同样精彩
  6. python序列类型唯一的映射类型_python2.x学习笔记(8)-映射和集合类型
  7. Linux环境下安装Tigase XMPP Server
  8. mikrotikROS系统的几种安装方法
  9. linux oracle手动启动两个实例
  10. 51单片机如何用c语言位定义,嵌入式编程(一):51单片机如何将函数 定义到指定程序地址...
  11. SSE指令集学习之旅(一)
  12. 第三十讲:Android之Animation(五)
  13. 跳出多重循环_代码里的俄罗斯套娃 | 07 多重循环
  14. 从另一个视角看待逻辑回归
  15. 2019年四月计算机语言排名,2019编程排行榜_编程语言排行榜2019年4月 TIOBE编程语言排行榜2019年最新版...
  16. linux内核中的以太网phy芯片的驱动介绍:以lan8720和ip101作为对比
  17. 140个电脑小知识、小技巧(1)
  18. Mysql8完全卸载教程
  19. angular 万年历_jQuery实现的简单日历组件定义与用法示例
  20. 飞塔防火墙密码恢复。

热门文章

  1. 最优化理论【第二章(凸函数)作业】
  2. pc网页响应式在手机网页宽度980px问题方案
  3. CSS简单的交互动效
  4. python快手虎年跳一跳辅助(点击版)
  5. 800字让你搞懂:掩码,反掩码,通配符。
  6. MFC中关于UINT与USHORT
  7. 易语言多线程大漠多线程模板UI更新
  8. 最新详细的 VM ware 下载 与 安装
  9. el-select 下拉框自定义背景颜色
  10. 【云原生】第十篇--Docker主机集群化方案 Docker Swarm