Dual SVM

上一章的内容中介绍到非线性的SVM可以利用一个不大的VC dimension来刻画比较复杂的边界。但是如果当这个VC dimension变得比较大的时候,计算就比较费时了。

这一章将会介绍非线性SVM的另一种理解和解决方法。

在这里,我们将左边的约束条件转化成为利用拉格朗日乘数法表示成为右边的式子,接下去证明右边的式子可以完全表示出左边的约束条件

当yn(wTzn+b)>=1时,max之后的表达式就可以得到一个收敛的值。

相反,当yn(wTzn+b)<1时,max之后的表达式就会发散到正无穷。

因此,我们通过这个max的求解过程就可以把之前的约束条件包含了进来。

这里,交换了min和max的次序,得到了之前式子的一个下界限,事实上,如果求解的问题满足强对偶的三个条件,左边的式子可以和右边的式子等同起来,这三个条件就是

1. 凸函数

2. 问题是有解的(对应到SVM这里要解决的问题就是两类点可以被直线或曲线区分开来)。

3. 约束条件是线性的。

所以最后可以找到同一组的解(b,w,a)对左边和右边的式子同样适用。

所以问题就转换成为如下的形式

这样处理的好处就是我们将一个先处理an的问题转化成为了一个先处理b和w的优化问题。

先对b进行求导,那么得到一个约束条件,然后把它代进去,可以消去一项

再对w进行求导,那么得到一个约束条件,然后把它代进去,可以化简

KKT条件:

最后,求解的问题化简成为的形式如下:

这里有一个KKT条件(只有满足KKT条件的情况下,上述问题才有解)

这里最后一个条件尤为重要,在最优解的时候,要有最优解存在,那么就要使得an=0或者后面的一项等于0,这样拉格朗日项才会消去。

于是,最终我们就可以用下面的式子对最优的an进行求解。目前该问题中就包含了N个变量,N+1个约束。

接下来就是利用QP Solver 求解问题的过程了。这里略去。

这里需要注意到的问题是当前的问题规模是由进行训练的数据集大小决定的,当进行训练的数据很大的时候QP Solver解问题的过程就很慢了。所以最好使用专门为SVM设计的Solver进行问题的求解。

我们得到了an,之后就可以利用KKT条件,对w,b进行求解,上图方框中的式子就可以得到w,之后我们利用primal-inner条件,如果an不为0,那么后面的一项就可以解出来了,事实上,当an>0的时候,这些点就是落在margin 边界上的那些点。

所以我们在求解的时候只是用到了在边界上的那些点,对于不在边界上的点都没有采用,SV去计算w和b的时候也是只有采用了在边界上的那些点。

对比SVM和PLA,我们都是使用了zn来表示w,所以w是由训练使用的数据来表示的,只是SVM只用到了落在边界上的SV来表示w。

对比两种SVM的求解方式,当训练的数据量比较少的时候,我们可以采用Dual SVM,当数据的边界不太复杂,VC dimension不高的时候我们可以采用Primal SVM的方式。

但是,最终我们希望在求解SVM问题的时候,我们不希望考虑 VC dimension的维度,但是采用Dual SVM的时候,我们在qn,m中还是使用了zn,zm,这种受到VD dimension约束的数据,所以接下去会讲到不受VC dimension约束的求解方法。

时间: 2024-08-06 07:56:51

Dual SVM的相关文章

机器学习基石--学习笔记02--Hard Dual SVM

背景 上一篇文章总结了linear hard SVM,解法很直观,直接从SVM的定义出发,经过等价变换,转成QP问题求解.这一讲,从另一个角度描述hard SVM的解法,不那么直观,但是可以避免feature转换时的数据计算,这样就可以利用一些很高纬度(甚至是无限维度)的feature转换,得到一些更精细的解. ? 拉格朗日乘子式 首先,回顾一下SVM问题的定义,如下: 线性约束很烦,不方便优化,是否有一种方法可以将线性约束放到优化问题本身,这样就可以无拘无束的优化,而不用考虑线性约束了.拉格朗

SVM原理

SVM是机器学习中神一般的存在,虽然自深度学习以来有被拉下神坛的趋势,但不得不说SVM在这个领域有着举足轻重的地位.本文从Hard SVM 到 Dual Hard SVM再引进Kernel Trick,然后推广到常用的Soft Kernel SVM. 一.Hard SVM SVM本身是从感知机算法演变而来,感知机算法是在一个线性可分的数据集中找到一个分类超平面,尽可能的将数据集划分开,理论上这样的超平面有无数多个,但是从直觉上,我们知道离两侧数据都比较远的超平面更适合用于分类,于是我们选择了一个

SVM实践

在Ubuntu上使用libsvm(附上官网链接以及安装方法)进行SVM的实践: 1.代码演示:(来自一段文本分类的代码) # encoding=utf8 __author__ = 'wang' # set the encoding of input file utf-8 import sys reload(sys) sys.setdefaultencoding('utf-8') import os from svmutil import * import subprocess # get the

2.机器学习技法- Dual Support Vector Machine

Lecture 2.  Dual Support Vector Machine 2.1 Motivation of Dual Suppor Vector Machine 将 linear support vector machine 加上 feature transformation 就能得到 nonlinear support vector machine.这样做的好处,我们可以利用 svm 和 feature transformation 的优良特性Q1:较小的 VC Dimension (

【林轩田】SVM

SVM 推导 点到平面的距离(几何距离): 函数距离: |wx+b|,不考虑1/||w||. SVM的优化目标:所有样本点到分离超平面的最小的几何距离最大,可以写成: 这里 限制条件的第一行表示每个样本点都被正确的分类, 第二行表示最大化的目标是样本点到分离超平面的最小几何距离. W,b同步放缩并不影响分离超平面,故放缩至一定比例,使所有样本点到超平面的最小函数距离刚好为1, 那么最大化的目标就很简单了 需要优化的问题的形式为: 注意,既然放缩时使最小的函数间隔为1,那么实际上产生了一个比之前每

Machine Learning Techniques -3-Dual Support Vector Machine

For the naive thought to practise my academic English skill, the rest of my notes will be wrriten in my terrrible English.XD If you have any kind of uncomfortable feel, please close this window and refer to the original edition from Mr. Lin. I will b

【Kernel Logistic Regression】林轩田机器学习技术

最近求职真慌,一方面要看机器学习,一方面还刷代码.还是静下心继续看看课程,因为觉得实在讲的太好了.能求啥样搬砖工作就随缘吧. 这节课的核心就在如何把kernel trick到logistic regression上. 首先把松弛变量的表达形式修改一下,把constrained的形式改成unconstrained的形式. 改成这种'unconstrained' form of soft-margin SVM之后,突然发现很像L2 regularization 如果用regularized mode

【Soft-Margin Support Vector Machine】林轩田机器学习技术

Hard-Margin的约束太强了:要求必须把所有点都分开.这样就可能带来overfiiting,把noise也当成正确的样本点了. Hard-Margin有些“学习洁癖”,如何克服这种学习洁癖呢? 沿用pocket算法的思想,修改一下优化目标函数的形式,补上一个错分点的惩罚项CΣ.... (1)C越大,对错误的容忍度就越小,margin越小 (2)C越小,对错误容忍度就越高,margin越大 因此引入的参数C是在large margin和noise tolerance之间做了一个权衡. 但是上

【Kernal Support Vector Machine】林轩田机器学习技术

考虑dual SVM 问题:如果对原输入变量做了non-linear transform,那么在二次规划计算Q矩阵的时候,就面临着:先做转换,再做内积:如果转换后的项数很多(如100次多项式转换),那么耗费的时间就比较多. 能否在计算Q矩阵这一步的时候,把transform+inner product合成一步呢? 这里就用到了一些kernel trick. 简单来说:某些特殊形式的transfrom,利用kernel trick就是只用计算一次transform之前的输入向量内积(X'X),tr