SVM熟练到精通2:SVM目标函数的dual优化推导
文章引自pluskid于2010年发表于“Machine Learning”板块,本文仅做编辑。
1.SVM的数学原理
上一次介绍支持向量机,结果说到 Maximum Margin Classifier ,到最后都没有说“支持向量”到底是什么东西。不妨回忆一下上次最后一张图:
很显然,由于这些 supporting vector 刚好在边界上,所以它们是满足: yi(wx+b)=1
当然,除了从几何直观上之外,支持向量的概念也会从其优化过程的推导中得到。其实上一次还偷偷卖了另一个关子就是虽然给出了目标函数,却没有讲怎么来求解。现在就让我们来处理这个问题。回忆一下之前得到的目标函数:
这个问题等价于(为了方便求解,我在这里加上了平方,还有一个系数,显然这两个问题是等价的,因为我们关心的并不是最优情况下目标函数的具体数值):
到这个形式以后,就可以很明显地看出来,它是一个凸优化问题,或者更具体地说,它是一个二次优化问题——目标函数是二次的,约束条件是线性的。这个问题可以用任何现成的 QP (Quadratic Programming,二次规划) 的优化包进行求解。所以,我们的问题到此为止就算全部解决了,于是我睡午觉去了~
啊?呃,有人说我偷懒不负责任了?好吧,嗯,其实呢,虽然这个问题确实是一个标准的 QP 问题,但是它也有它的特殊结构,通过 Lagrange Duality 变换到对偶变量 (dual variable)的优化问题之后,可以找到一种更加有效的方法来进行求解——这也是 SVM 盛行的一大原因,通常情况下这种方法比直接使用通用的 QP 优化包进行优化要高效得多。此外,在推导过程中,许多有趣的特征也会被揭露出来,包括刚才提到的 supporting vector 的问题。
关于 Lagrange duality我没有办法在这里细讲了,可以参考 Wikipedia 。简单地来说,通过给每一个约束条件加上一个 Lagrange multiplier,我们可以将它们融和到目标函数里去:
然后我们令
容易验证,当某个约束条件不满足时,例如 yi(wTxi+b)<1,那么我们显然有 θ(w)=∞ (只要令 αi=∞ 即可)。而当所有约束条件都满足时,则有 θ(w)=12∥w∥2 ,亦即我们最初要最小化的量。因此,在要求约束条件得到满足的情况下最小化 12∥w∥2 实际上等价于直接最小化 θ(w) (当然,这里也有约束条件,就是αi≥0,i=1,…,n),因为如果约束条件没有得到满足,θ(w)
这里用 p∗ 表示这个问题的最优值,这个问题和我们最初的问题是等价的。不过,现在我们来把最小和最大的位置交换一下:
当然,交换以后的问题不再等价于原问题,这个新问题的最优值用 d∗ 来表示。并,我们有 d∗≤p∗ ,这在直观上也不难理解,最大值中最小的一个总也比最小值中最大的一个要大吧!总之,第二个问题的最优值 d∗ 在这里提供了一个第一个问题的最优值 p∗ 的一个下界,在满足某些条件的情况下,这两者相等,这个时候我们就可以通过求解第二个问题来间接地求解第一个问题。具体来说,就是要满足 KKT 条件,这里暂且先略过不说,直接给结论:我们这里的问题是满足 KKT 条件的,因此现在我们便转化为求解第二个问题。
带回 L 得到:
此时我们得到关于 dual variable α 的优化问题:
2.SVM是如何完成分类的?
如前面所说,这个问题有更加高效的优化算法,不过具体方法在这里先不介绍,让我们先来看看推导过程中得到的一些有趣的形式。首先就是关于我们的hyper plane ,对于一个数据点 x进行分类,实际上是通过把 x 带入到 f(x)=wTx+b 算出结果然后根据其正负号来进行类别划分的。前面的推导中我们得到 w=∑ni=1αiyixi ,因此
这里的形式的有趣之处在于,对于新点 x 的预测,只需要计算它与训练数据点的内积即可(这里 ⟨⋅,⋅⟩ 表示向量内积),这一点至关重要,是之后使用 Kernel 进行非线性推广的基本前提。此外,所谓 Supporting Vector 也在这里显示出来——事实上,所有非 Supporting Vector 所对应的系数 α 都是等于零的,因此对于新点的内积计算实际上只要针对少量的“支持向量”而不是所有的训练数据即可。
为什么非支持向量对应的 α 等于零呢?直观上来理解的话,就是这些“后方”的点——正如我们之前分析过的一样,对超平面是没有影响的,由于分类完全有超平面决定,所以这些无关的点并不会参与分类问题的计算,因而也就不会产生任何影响了。这个结论也可由刚才的推导中得出,回忆一下刚才通过 Lagrange multiplier 得到的目标函数:
注意到如果 xi 是支持向量的话,上式中红颜色的部分是等于 0 的(因为支持向量的 functional margin 等于 1 ),而对于非支持向量来说,functional margin 会大于 1 ,因此红颜色部分是大于零的,而 αi 又是非负的,为了满足最大化,αi 必须等于 0 。这也就是这些非 Supporting Vector 的点的悲惨命运了。
嗯,于是呢,把所有的这些东西整合起来,得到的一个 maximum margin hyper plane classifier 就是支持向量机(Support Vector Machine),经过直观的感觉和数学上的推导,为什么叫“支持向量”,应该也就明了了吧?当然,到目前为止,我们的 SVM 还比较弱,只能处理线性的情况,不过,在得到了 dual 形式之后,通过 Kernel 推广到非线性的情况就变成了一件非常容易的事情了。不过,具体细节,还要留到下一次再细说了。
SVM熟练到精通2:SVM目标函数的dual优化推导相关推荐
- SVM熟练到精通4:偏离点与松弛变量
文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.回顾 在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以 ...
- SVM熟练到精通1:初识SVM
文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.啥是支持向量机 支持向量机即 Support Vector Machine ...
- SVM熟练到精通5:MATLAB实例
1.源代码 clc; clear all; close all; load fisheriris; %matlab自带分类数据集fisheriris,来源于http://archive.ics.uci ...
- SVM熟练到精通3:核函数与非线性分类
文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.回顾 前面我们介绍了线性情况下的支持向量机,它通过寻找一个线性的超平面来达到对 ...
- 6.支持向量机(SVM)、什么是SVM、支持向量机基本原理与思想、基本原理、课程中关于SVM介绍
6.支持向量机(SVM) 6.1.什么是SVM 6.2.支持向量机基本原理与思想 6.2.1.支持向量机 6.2.2.基本原理 6.3.课程中关于SVM介绍 6.支持向量机(SVM) 6.1.什么是S ...
- SVM学习笔记-对偶形式的SVM
SVM学习笔记第二篇 SVM学习笔记-线性支撑向量机 SVM学习笔记-对偶形式的SVM SVM学习笔记-核函数与非线性SVM SVM学习笔记-软间隔SVM 0 - 回顾 上一篇笔记讲述了一个模型:线性 ...
- ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注
ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注 目录 输出结果 实现代码 输出结果 实现代码 import numpy as np import matplotlib.pyp ...
- 机器学习:SVM代码实现,朴素实现基础上的优化
SVM代码实现,朴素实现基础上的优化: 因为二次凸优化已经把解析结果明白表现出来了,所以优化只能体现在两个变量的选择上,或者说是两个样本的选择上: 1.第一个变量的选择:这次实现也并不是选择最不满足K ...
- 简历中对技术的描述词汇:了解,熟悉,掌握,熟练,精通
我认为简历中对技术的描述词汇有5个:了解,熟悉,掌握,熟练,精通. 了解: 就是你知道有这么一个东西,大概能用来干嘛 熟悉: 就是你经常在使用,但是未必有很多的了解,也没深入的学习. 举个例子就是:你 ...
最新文章
- 六年磨一剑,全时发布音视频会议平台TANG,多款新品亮相
- 从0梳理1场NLP赛事!
- 雷军哽咽:我愿押上人生全部声誉,为小米汽车而战!
- PIL实现两张图片合成一张,和图片加文字
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
- 面试题01(C++)
- 多除了1次100的FM BAPI_CURRENCY_CONV_TO_INTERN_9
- 欧拉公式cos_对复数,复数平面以及欧拉公式的理解
- python异常处理优点_python自测100题(下)
- java pem,如何验证Java中的PEM格式证书
- 定制Spring Data JPA存储库
- StudentManager-java+mysql学生管理系统
- 训练日志 2019.1.12
- .NET下一种简单的调试诊断方法
- 机器学习与深度学习常见面试题
- K均值算法(K_means)
- android 如何把图片设置成圆,Android 设置圆形图片 设置圆角图片
- 网络游戏外挂制作(3)
- Parcel打包React
- 配置远程GPU服务器