关闭

SVM学习笔记-线性支撑向量机

标签: SVM机器学习线性SVM
3544人阅读 评论(1) 收藏 举报
分类:

写在前面

本系列为学习林轩田老师讲解的SVM的笔记整理,共四篇,此为第一篇:

如有理解错误,还望不吝指教!

最大间隔超平面

线性分类器回顾

如下图中有两个类别×,当数据是线性可分的时候,PLA算法可以帮助我们找到能够正确划分数据的超平面hyperplane,即如图所示的那条线。


这里写图片描述

对于一个线性可分的资料,不会只存在一条线可以正确的划分×。如下图中有三条线可以完美的划分两个类别, 但是哪一个是最好的划分呢?


这里写图片描述

  • 对于PLA算法来说,最终得到哪一条线是不一定的,取决于算法scan数据的顺序。
  • VC bound的角度来说,我们所在意的Eout会被EinΩ(H)控制住,其中的Ein指的是分类器在看过的资料上的表现,显然上述的三条线的Ein都是0Ω(H)是指复杂度, 因为都是线性的分类器,所以都等于d+1
    Eout(w)Ein0+Ω(H)dvc=d+1

但是直观上来看,最右边的线应该会是比较好的hyperplane为什么最右边的分隔面最好呢?这里先给出一个简单直观的解释,因为最右边的线对于测量误差的容忍度是最好的。例如对于每张图片中左下角的样本点,当未来要判定与该点非常接近的点(有可能它们的feature本来就是一样的,就是同样的一个样本,只不过因为测量的误差的存在,所以feature变得有点不同了)的label的时候,最右边的hyperplane对这些误差会有最大的容忍度。这也是其最大的不同于左边两条线的地方。

从下面的图可以更加直观的看出,我们想要找一个离每一个样本点都很远的分隔线。这样对测量误差有更大的容忍度,就能更加避免过拟合的情况出现。(tolerate more noise more robust to overfitting)或者说,我们想找这样的一个超平面,离这个超平面最近的点的到这个超平面的距离也是很大的。


这里写图片描述

或者从另一角度来看, 我们想要找的是“最胖”的那条线。有“多胖”是根据离该线最近的点距离它有多远来定义的。


这里写图片描述

最大间隔分类超平面

所以我们可以使用如下的稍微带点数学形式的表达方式来描述我们的需求:


maxwsubject to fatness(w)w classifies every (xn,yn) correctlyfatness(w)=minn=1,,N  distance(xn,w)

即我们要找一条线w,首先这条线要正确的划分每一个样本(w classifies every (xn,yn) correctly)。其次这条线要是所有能正确划分样本点的线中最”“的(maxw fatness(w))。线w的”胖”的衡量方法是:到所有的点中距离最近的点的长度作为该wfatness(胖瘦程度)。
一句话:找能正确划分数据的最胖的线。

在大多数的资料中,线的胖瘦fatness被称为是margincorrectness其实就是要求ynwTxn>0

所以上述的表达可以进一步数学化为:


maxwsubject to     margin(w)  every   ynwTxn>0margin(w)=minn=1,,N distance(xn,w)

GOAL:找最大间隔(margin)的分类超平面。


最大间隔问题

点到超平面的距离

上一小节给出了一个最优化问题,如果能够解决那个问题就可以得到最佳的线在哪里。我们把最终想要找到的那条线称为分隔超平面。该分隔超平面由w,b决定, 接下来所有的工作都是在找最佳的w,b,从而得到最终的模型:h(x)=sign(wTx+b)

下面开始来一点一点的变换上面的问题直到我们可以求解。
首先我们关注distance(xn,w)。也就是分隔超平面和样本点之间的距离。怎么算一个点x到平面wTx+b=0的距离呢? wTx+b=0就是我们最终想要的分隔超平面。


这里写图片描述

考虑在平面上的两个点x,x′′, 那么有

wTx=b,   wTx′′=b

两式相减:
wT(x′′x)vector on hyperplane=0

所以可以得到w是该平面的法向量x′′xw)。

那么一个任意点x到平面(w,b)的距离即是xxw上投影的长度,其中x为平面上的任意一个点。根据公式可以计算如下(投影):

distance(x,b,w)=|wT||w||(xx)|=1||w|||wTx+b|

其中,b,w代表平面。第二步化简用到wTx=b。这样我们就会求解点到平面的距离了。

需要注意的是,由于是分隔超平面,针对每一个样本(xn,yn),都有yn(wTxn+b)>0,利用这一点,样本点到分隔超平面的距离计算公式可以变为:

distance(xn,b,w)=1||w||yn(wTxn+b)

之所以可以这样做是因为我们只考虑那些能够正确分类的线。

即我们最初的目标变为:


maxw.bsubject to    margin(w,b)  every   yn(wTxn+b)>0margin(w,b)=minn=1,,N  1||w||yn(wTxn+b)

还是不会求解,所以需要进一步简化。我们最终想要找的是一个hyperplane,也就是wTx+b=0(我们现在在选择它的系数wb)。情况是这样的: wTx+b=03wTx+3b=0是没有什么差别的,只是进行了系数的放缩,其实是一个超平面,在二维就表示同一条直线。既然这些系数的放缩是不会影响结果的, 那么我们可不可以考虑一些比较特别的放缩使得问题变的简单一点呢? 出于这样的考虑,在这里我们使用一个特别的放缩使得

minn=1,,N  yn(wTxn+b)=1

通过调节w,b,这样的放缩总是可以做到的。这样做的目的是为了使得
margin(w,b)=1||w||

原来的问题变为:


maxw.bsubject to    1||w||  every   yn(wTxn+b)>0minn=1,,N  yn(wTxn+b)=1

分析一下这个问题相较于上一次来说有什么变化:我们不再需要计算margin了, margin就等于1||w||, 但是为了保证margin=1||w||,我们又多了一个条件, 就是要把w缩放成恰好满足minn=1,,Nyn(wTxn+b)=1, 直观上可以理解为得分最少的样本的分数(wTxn+b)与其label的乘积为1
进一步可以变为:


maxw.bs.t.   1||w||    minn=1,,N  yn(wTxn+b)=1


因为条件minn=1,,N  yn(wTxn+b)=1包括every   yn(wTxn+b)>0,并且比其更为严格, 所以后者可以去掉。

我们进一步得到了看起来描述比较简单的间隔最大化问题的需求:最大化1||w||,并且满足最小的yn乘以分数的值为1。

maxw.bs.t.   1||w||    minn=1,,N  yn(wTxn+b)=1

虽然经过了很多的变换,使用了很多技巧,但是这个问题还是不会解。(接下来的变换的主要思想是,因为在上述最优化的问题的条件中有个min的操作,我们希望把这个min去掉,把条件放宽,然后在一个比较宽松的条件下求解原来的最优化问题,这样可能简单点,当然我们要保证在这个宽松的条件下求得的解依然满足原来比较严格的条件,不然是不可以这样做的。)
现在的目标是要把条件中的min操作去掉。我们将条件minn=1,,N  yn(wTxn+b)=1放宽至:for all n都有yn(wTxn+b)1现在我们担心的问题是:原来的最优化问题的条件要求最小的yn(wTxn+b)等于1, 而现在要求所有的yn(wTxn+b)大于等于1。那么在新的条件下求解原来的问题得到的最佳解w会不会使得所有的yn(wTxn+b)都大于1了,这样我们放宽条件就出了问题,因为求得的解不在满足原来的条件了。
以下将证明,即使放宽了条件,最佳解依然满足原来的条件minn=1,,N  yn(wTxn+b)=1
反证法:
如果最佳解是(w,b)并且该解使得所有的yn(wTxn+b)都是大于1的, 例如yn(wTxn+b)1.126, 那么我们进行一下缩放可知(w1.126,b1.126)也是放松后问题的解。但是此时w1.126显然比w会有更大的1||w||,与假设(w,b)是最佳解矛盾,也就是说不可能有最佳解使得所有的yn(wTxn+b)都是大于1的。

新的问题变成:

maxw.bs.t.   1||w||      yn(wTxn+b)1 for all n

变为最小化问题:

minw.bs.t.   12wTw      yn(wTxn+b)1 for all n


这就是我们最终想要解决的问题,当我们能找到这个问题中的wb的时候,我们就可以说wTx+b=0就是我们要找的最胖的分隔边界。


支撑向量机

通过上一节的推导我们得到的问题称为标准问题,这个标准问题要最小化w和自己的內积, 需要满足的条件是对于每一个样本yn和得分wTxn+b的乘积要大于等于1

minw.bs.t.   12wTw      yn(wTxn+b)1 for all n

首先给出一个可以手工计算的例子来看看这个问题的求解过程。所有的样本点如下图所示:共有4个样本,2个正例,2个负例。


这里写图片描述

每一个样本的具体信息如下:

X=02230200,Y=11+1+1

根据最优化问题的要求最佳的w需要满足以下4个条件:

2w12w22w13w1b1b1+b1+b1(i)(ii)(iii)(iv)

  • (i) and (iii)w1+1
  • (ii) and (iii)w21

根据以上的两个式子可以得到:
12wTw1, 所以我们的目标函数,最小最小的时候也是1。我们可以令w1=1,w2=1,b=1。这样的话不仅仅满足了条件(i)(iv),也使得target function取得了最小的值1。其中b的值可以通过计算一个范围得到。这样我们就得到了我们最想要的hyperplanegsvm:x1x2b=1。从图中可以看出来这条线是比较胖的。这就是我们想要找的支撑向量机。此时margin=1||w||=12


这里写图片描述

为什么要叫支撑向量机呢?在我们找到了这条最胖的线之后我们发现有一些点离这条线是很近的。 也就是如图用方框框起来的那些点。其实只要这些点就可以确定我们想要的hyperplane,我们把这些点叫做Support Vector。可以理解为这些支撑向量就可以确定我们想要的分割超平面,而不需要其他的点。

SVM的一般解法

minw.bs.t.   12wTw      yn(wTxn+b)1 for all n

通过分析可知,我们想要最小化的问题是个w的二次函数,该问题的条件是w的线性一次式。我们把这样的问题叫做二次规划(Quadratic programming)所以我们的一个解法是将我们的问题表示为二次规划的标准形式,然后就可以调用二次规划的包进行运算。

标准的二次规划问题

optimaluminusubject toQP(Q,p,A,c)12uTQu+pTuaTmucmfor m=1,2,,M

所以我们只要确定其中的系数Q,p,A,c,这样就可以求解出最佳的分割线。

u=[bw];Q=[00d0TdId];p=0d+1aTN=yn[1xTn];cn=1;M=N

这样就将我们想要求解的最佳化问题变为二次规划问题。

使用二次规划的方法求解SVM

线性可分的硬间隔SVM算法
Linear Hard-Margin SVM Algorithm

  1. 表示为规范的QP问题,给出其中的参数Q,p,A,c
  2. w,bQP(Q,p,A,c)
  3. return  w,b  as  gsvm

note

  1. hard-margin:表明我们坚持要将正例和负例完全的分开,不允许有误分的点。
  2. linear:表明我们是在使用x来训练SVM,我们得到的是在X空间中的分割超平面。而没有经过任何的特转换。
  3. 所以如果我们想要一个非线性的hyperplane,可以使用z=Φ(x)

到了现在我们已经知道怎么来求解这个SVM的问题了,如果你想要做非线性的,那么只要把x变为z就好了。

minw.bs.t.   12wTw      yn(wTzn+b)1 for all n

那么,为什么SVM这样的模型会有比较好的效果呢?在之前简单的说过,一条胖的线可以抵挡比较多测量误差
在这里我们把SVM和我们之前提到的一个工具regularization做简单的对比。在我们做learning的时候, 我们想要把Ein最小化,又担心在最小化Ein的时候会出现overfitting的状况,所以我们就加了一个限制w长度的项:wTwC;我们发现在SVM中同样也做了这两件事情,不过这两件事的位置对调了:在SVM中,我们最小化的不是Ein而是w的长度wTw,加的限制条件变成了要将Ein做成0。所以从这个层面上来看, SVM本身做到了和regularization相同的事情。


这里写图片描述

参考

  • 林轩田机器学习技法
1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM

说来惭愧,断更快半个月了,本打算是一周一篇的。感觉SVM瞬间难了不少,推导耗费了很多时间,同时身边的事情也不少,忙了许久。本篇文章参考了诸多大牛的文章写成的,对于什么是SVM做出了生动的阐述,同时也进...
  • c406495762
  • c406495762
  • 2017-09-23 17:50
  • 5652

机器学习笔记(八)震惊!支持向量机(SVM)居然是这种机

支持向量机(SVM)算法最人性、最白话的解释以及在Python中的调用。
  • sinat_22594309
  • sinat_22594309
  • 2017-03-12 12:08
  • 1384

监督学习之支持向量机——Andrew Ng机器学习笔记(五)

内容提要这篇博客的主要内容有: 1. 简述支持向量机(SVM)的一般记号 2. 介绍了函数间隔和几何间隔 3. 最大间隔分类器是什么 4. 为了得到最大间隔分类器解,而介绍了一些与拉格朗日有关...
  • A_cainiao_A
  • A_cainiao_A
  • 2015-12-31 20:47
  • 1461

OpenCv学习笔记--支持向量机SVM线性可分情况下的OpenCv实现的超详细注释(2)

/********************************************************************************************* 程序功能:...
  • maweifei
  • maweifei
  • 2016-04-23 15:22
  • 745

支撑向量机 SVM 学习笔记(Matlab代码)

% 支持向量机SVM分类算法 clear all % ------------------------------------------------------------% % 构造...
  • yyyljw
  • yyyljw
  • 2015-11-24 11:16
  • 1023

机器学习笔记08:支持向量机(一)(SVM)

在网上找了很多支持向量机的资料看都是迷迷糊糊没完全搞懂,可能是我理解能力比较差,最后还是 Coursera 上吴大神的 Machine Learning 课程把我一下子讲懂了。由于支持向量机是由逻辑回...
  • Artprog
  • Artprog
  • 2016-05-25 19:40
  • 2030

[机器学习笔记]Note10--支持向量机(SVM)

继续是机器学习课程的笔记,这节课的内容是介绍支持向量机(SVM)的内容。SVM是一个非常强大且流行的算法,在一些情况下,面对一些复杂的非线性问题可以提供比逻辑回归或神经网络更加简洁更加有效的结果。:
  • lc013
  • lc013
  • 2016-07-20 20:56
  • 1804

支持向量机(SVM)学习笔记

最近学习了coursera上斯坦福大学的机器学习课程。其中支持向量机的内容和其他地方的理解不太一样,现将两种理解方法记录如下。     coursera:从逻辑回归推理得来。     从函数距离到几何...
  • zz0072010
  • zz0072010
  • 2016-09-30 10:25
  • 232

SVM支持向量机学习笔记

学习SVM,主要阅读了以下两位的博客: July——支持向量机通俗导论(理解SVM的三层境界) JerryLead——支持向量机系列 个人感觉,为了真正理解SVM,以上博客至少得认真仔细阅读五遍,当然...
  • ww2041
  • ww2041
  • 2017-02-24 10:47
  • 982

模式识别(Pattern Recognition)学习笔记(十一)--SVM支持向量机(狭义):大间隔

1.最优分类超平面 对于感知器,我们知道了在梯度下降迭代过程中,只要选择的权向量初始值和不同的步长,就会产生不同的解,想象一下,只要样本集是线性可分的(不考虑线性不可分的情况),就会有无数个决策面可以...
  • eternity1118_
  • eternity1118_
  • 2016-05-23 10:39
  • 1195
    个人资料
    • 访问:171858次
    • 积分:2670
    • 等级:
    • 排名:第15762名
    • 原创:93篇
    • 转载:0篇
    • 译文:0篇
    • 评论:58条
    最新评论