卓越源于坚持,努力须有方向。

如上图所示,有一堆训练数据的正负样本,标记为:,假设有一个超平面H:,可以把这些样本正确无误地分割开来,同时存在两个平行于H的超平面H1和H2:

使离H最近的正负样本刚好分别落在H1和H2上,这样的样本就是支持向量。那么其他所有的训练样本都将位于H1和H2之外,样本距离可以是任何值,没必要是正负1.也就是满足如下约束:

写成统一的式子就是:

 (1)

而超平面H1和H2的距离可知为:

SVM的任务就是寻找这样一个超平面H把样本无误地分割成两部分,并且使H1和H2的距离最大。要找到这样的超平面,只需最大化间隔Margin,也就是最小化。于是可以构造如下的条件极值问题:

 (2)

对于不等式约束的条件极值问题,可以用拉格朗日方法求解。而拉格朗日方程的构造规则是:用约束方程乘以非负的拉格朗日系数,然后再从目标函数中减去。于是得到拉格朗日方程如下:

 (3)

其中:

 (4)

那么我们要处理的规划问题就变为:

 (5)

上式才是严格的不等式约束的拉格朗日条件极值的表达式。对于这一步的变换,很多文章都没有多做表述,或者理解有偏差,从而影响了读者后续的推演。在此我将详细地一步步推导,以解困惑。

(5)式是一个凸规划问题,其意义是先对α求偏导,令其等于0消掉α,然后再对w和b求L的最小值。要直接求解(5)式是有难度的,通过消去拉格朗日系数来化简方程,对我们的问题无济于事。所幸这个问题可以通过拉格朗日对偶问题来解决,为此我们把(5)式做一个等价变换:

上式即为对偶变换,这样就把这个凸规划问题转换成了对偶问题:

 (6)

其意义是:原凸规划问题可以转化为先对w和b求偏导,令其等于0消掉w和b,然后再对α求L的最大值。下面我们就来求解(6)式,为此我们先计算w和b的偏导数。由(3)式有:

 (7)

为了让L在w和b上取到最小值,令(7)式的两个偏导数分别为0,于是得到:

 (8)

将(8)代回(3)式,可得:

 (9)

再把(9)代入(6)式有:

 (10)

考虑到(8)式,我们的对偶问题就变为:

 (11)

上式这个规划问题可以直接从数值方法计算求解。

需要指出的一点是,(2)式的条件极值问题能够转化为(5)式的凸规划问题,其中隐含着一个约束,即:

 (12)

这个约束是这样得来的,如果(2)和(5)等效,必有:

把(3)式代入上式中,得到:

化简得到:

 (13)

又因为约束(1)式和(4)式,有:

所以要使(13)式成立,只有令:,由此得到(12)式的约束。该约束的意义是:如果一个样本是支持向量,则其对应的拉格朗日系数非零;如果一个样本不是支持向量,则其对应的拉格朗日系数一定为0。由此可知大多数拉格朗日系数都是0。

一旦我们从(11)式求解出所有拉格朗日系数,就可以通过(8)式的

计算得到最优分割面H的法向量w。而分割阈值b也可以通过(12)式的约束用支持向量计算出来。这样我们就找到了最优的H1和H2,这就是我们训练出来的SVM。

SVM手撕公式的更多相关文章

  1. NN入门,手把手教你用Numpy手撕NN(一)

    前言 这是一篇包含极少数学推导的NN入门文章 大概从今年4月份起就想着学一学NN,但是无奈平时时间不多,而且空闲时间都拿去做比赛或是看动漫去了,所以一拖再拖,直到这8月份才正式开始NN的学习. 这篇文 ...

  2. NN入门,手把手教你用Numpy手撕NN(2)

    这是一篇包含较少数学推导的NN入门文章 上篇文章中简单介绍了如何手撕一个NN,但其中仍有可以改进的地方,将在这篇文章中进行完善. 误差反向传播 之前的NN计算梯度是利用数值微分法,虽容易实现,但是计算 ...

  3. 手把手集成web端手写公式功能

    何为手写公式,很简单,就是在网页上可以写出数学公式,并能够生成Latex格式的字符串.废话不多说,直接走正题. 一.首先大家可以先去官网了解一下myscript这个插件 官方网站:https://de ...

  4. Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上

    前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...

  5. 手撕RPC框架

    手撕RPC 使用Netty+Zookeeper+Spring实现简易的RPC框架.阅读本文需要有一些Netty使用基础. 服务信息在网络传输,需要讲服务类进行序列化,服务端使用Spring作为容器.服 ...

  6. 手撕公司SSO登陆原理

    Single Sign-on SSO是老生常谈的话题了,但部分同学对SSO可能掌握的也是云里雾里,一知半解.本次手撕公司的SSO登陆原理,试图以一种简单,流畅的形式为你提供 有用的SSO登陆原理. 按 ...

  7. NN入门,手把手教你用Numpy手撕NN(三)

    NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...

  8. 手撕代码:统计1到n二进制数中1出现的总次数

    题目描述: 互娱手撕代码题. 统计从1到n这n个数的二进制表示中1出现的次数. 思路分析: 思路一:直接的做法是从1遍历到n,对于每个数和1做与操作,之后,对于这个数不断做右移操作,不断和1做与操作, ...

  9. 手撕ES6--Promise

    手撕ES6--Promise:https://www.jianshu.com/p/0925eae38d2c 手写一个Promise,附源码分析:https://blog.csdn.net/weixin ...

随机推荐

  1. 吴裕雄--天生自然JAVA数据库编程:使用JDBC连接ORACLE数据库

    DROP TABLE person ; DROP SEQUENCE myseq ; CREATE SEQUENCE myseq ; CREATE TABLE person ( id INT PRIMA ...

  2. 吴裕雄--天生自然JAVA数据库编程:PrepareStatement

    import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.SQLException ; import j ...

  3. 使用Vue 和 内网穿透:返回 invalid host header

    原因:新版的webpack-dev-server出于安全考虑,默认检查hostname,如果它不是配置内的,将会中断访问. -------------------------------------- ...

  4. L2-002. 链表去重(模拟)

    题意: 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须被保存在另外一个链 ...

  5. hue中访问impala报错

    hue中访问impala报错:Could not connect to node03:21050 原因:impala服务未启动. 解决方法:在3个节点上都启动impala: 主节点node03启动以下 ...

  6. delphi环境变量

    @SET BDS=C:\Program Files (x86)\Embarcadero\RAD Studio\7.0 @SET BDSCOMMONDIR=C:\Users\Public\Documen ...

  7. 通过虚拟机增加Linux的磁盘(分区容量)

    因为安装oracle设置的磁盘空间不足,所以安装失败.这里总结一下如何添加磁盘挂载 1. 右键虚拟机点击设置,然后点击磁盘,点击添加按钮 2.然后点击下一步下一步,直到安装成功 3.然后输入 fdis ...

  8. Spark 资料整理

    http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ http://blog.csdn.net/aliv ...

  9. eshop3-JDK 安装

    1. 下载软件:http://learning.happymmall.com/ 2. 清理系统默认的JDK rpm  -qa | grep jdk 查看已经安装的JDK,然后卸载 查看的结果:jdk1 ...

  10. Ubuntu1804 双网卡的设置

    在WIFI模式下,既可以使用ping开发板,又可上网.     目标:ubuntu1804下使用两个网卡 网卡(eth0):用于桥接主机的物理网卡 网卡(eth1):用于NAT模式下共享主机IP,用于 ...