机器学习 吴恩达 第十一章 笔记

十一、支持向量机(Support Vector Machines)

11.1 优化目标

  到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非常类似.因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平.比如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,诸如此类的事.还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine).与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式.
  稍后的课程中,我也会对监督学习算法进行简要的总结.当然,仅仅是作简要描述.但对于支持向量机,鉴于该算法的强大和受欢迎度,在本课中,我会花许多时间来讲解它.它也是我们所介绍的最后一个监督学习算法.
  正如我们之前开发的学习算法,我们从优化目标开始.为了描述SVM,我们从逻辑回归开始介绍.
image
  我们考虑单个项对成本函数的贡献.如果你进一步观察逻辑回归的代价函数,你会发现每个样本 (x,y)都会为总代价函数做出贡献.公式如下图所示.
image
  我们讨论y=1的样本,我们就会希望假设hθ(x)接近于1,由图可知必须θTx接近无穷大.我们可以观察log11+eθTx的图像,当z无穷大时,log11+eθTx趋近0,这样符合尽可能降低代价的前提.
  现在开始建立支持向量机,我们从这里开始:们会从这个代价函数开始,也就是log11+eθTx一点修改.取一点z=1,在此点做两条直线(如上图的粉红色线).这就是当y=1时,我们要使用的新代价函数.它与逻辑回归的曲线很相似,但更容易优化处理.
image

  上面的y=1的情况,还有一种情况是y=0,此时只有第二项起作用.同样取z=1这个点,作两条直线.现在,就完成了支持向量机中的部分内容.
  如果我们用一个新的代价函数来代替,即这条从0点开始的水平直线,然后是一条斜线,像上图.那么,现在给这个方程命名,一般称之为cost0(z),而另一个(y=1的情况),函数对应为cost1(z).
  下面是逻辑回归的代价函数(把负号移进了小括号里):
image
对于支持向量机,我们就将小括号的内容换成:
image
  因为常数m不影响我们最小化,因此可以去掉,还有一点,我们会使用λ权衡最小化代价函数和参数之间的平衡.但SVM里,我们不使用λ,而是使用C,放在代价函数的常数项位置.我们可以把C看作1λ(但这两项不是完全相等,否则A+λBCA+B完全等同).
  最后,有别于逻辑回归输出的概率,SVM并不换输出概率.通过优化代价函数我们可以得到θ,然后我们直接代入假设得到假设输出0或1.
image

11.2 大间隔的直观理解

  人们有时将支持向量机称作是大间距分类器.本节讲述原因.
  这是支持向量机模型的代价函数,接下来我们需要思考如何使代价函数变小.那么当y=1,我们需要使z>=1,同理y=0,z<=1.在逻辑回归的问题里,我们假使有一个正样本y=1,仅仅需要θTx>=0就能判断为正样本,同理<0是负样本.但是支持向量机的要求更高,不仅仅要能正确分开输入的样本,还需要θTx>>0θTx>=1,而负样本需要θTx<<0θTx<=1.这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子.
image
  让我们看一下在支持向量机中,这个因子会导致什么结果.具体而言,我接下来会考虑一个特例.我们将这个常数C设置为一个很大的值,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解.让我们分情况讨论:
image
  那么,我们的最小化情况变得如上所示,可以说当我们得到-1和1时,我们得到了一个很有趣的边界.
  具体而言,如果你考察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的.我的意思是,存在一条直线把正负样本分开.当然有多条不同的直线,可以把正样本和负样本完全分开.
image

  比如,下面就是一个决策边界可以把正样本和负样本分开.但是这两条线(红绿)有点差强人意.
image

  支持向量机将会选择这个黑色的决策边界,相较于之前我用粉色或者绿色画的决策界,这条黑色的看起来好得多,黑线看起来是更稳健的决策界.数学上来讲,这是什么意思呢?这条黑线有更大的距离,这个距离叫做间距(margin).
image
当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离.然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差.因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本.因此支持向量机有时被称为大间距分类器,而这其实是求解上一页幻灯片上优化问题的结果.
  下一节,我将会从直观上略述为什么这个优化问题会产生大间距分类器。总之这个图示有助于你理解支持向量机模型的做法,即努力将正样本和负样本用最大的间距分开.
  最后一点,我们的大间隔分类器是在C(正则化常数)很大的情况下设立的.但是如果C很大时,出现一个异常点的时候,边界线就会很敏感,从黑色变成紫红色.但如果C设置小一点,分隔线就是黑色那条线.当然数据如果不是线性可分的,如果你在这里正样本集合中有负样本,则支持向量机也会将它们恰当分开.
image
  但是实际上应用支持向量机的时候,当C不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界.甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果.
image
  最后,在让代价函数最小化的过程中,我们希望找出在y=1y=0两种情况下都使得代价函数中左边的这一项尽量为零的参数.如果我们找到了这样的参数,则我们的最小化问题便转变成:
image

11.3 大分隔分类器背后的数学(选修)

  本节的目的是让你对支持向量机中的优化问题以及如何得到大间距分类器,产生更好的直观理解.
  首先,让我来给大家复习一下关于向量内积的知识.假设有两个向量u,v.uTv一般称作向量的内积.||u||一般称作u的范数,数值是u向量的长度.而向量vu的内积就是v投影在u上(假设投影后的向量长度为p),得出的数值是p||u||.顺带一提,uTv=vTu.用矩阵相乘的视角也等于u1v1+u2v2
image
  最后一点,需要注意的就是值p.p显然是有正负的.
  下面是我们先前给出的支持向量机模型中的目标函数.为了讲解方便,我做一点简化,仅仅是为了让目标函数更容易被分析.
image
  注意在st的情况下,成本函数只剩下i=1nθ2,根据蓝色的推导式,i=1nθ2恰好等于θ构成向量的范数:12θ2(这里把θ0=0).所以最小化成本函数转化为最小化向量θ范数的平方,或者说长度的平方.
  现在看看这些项:θTx(i),它与我们之前说的uTv很类似.在坐标轴上作出x(i)θ的图像.那么θTx(i)=p(i)||θ||.如果以矩阵相乘的视角来看,也等于θ1x1(i)+θ2x2(i)
image
  因此我们st的条件就可以替换为:
image
  现在让我们考虑下面这里的训练样本.现在,继续使用之前的简化:θ0=0.我们来看一下支持向量机会选择什么样的决策界.假使选择了绿色的那条决策线,但这条不是很好(因为间隔不大).而我们的θ向量是与决策线正交的(因为正样本向量×θ>0,而负样本向量×θ<0,决策边界上的点xθ=0 ).顺便提一句θ0=0的简化仅仅意味着决策界必须通过原点(0,0),因为决策线可以看作方程θ0+θ1x1+θ2x2.
image
  现在让我们看一下这对于优化目标函数意味着什么,我们将样本作投影到决策曲线,可以发现样本和θ点积 = p(i)||θ||.我们可以发现,如果p(i)很小,为了满足条件θ需要很大,这样就会提高了代价函数的值.
  相反的,来看一个不同的决策边界.比如SVM选择了右下绿色那条决策线,而θ的方向朝着x轴正方向.当投影的长度足够大,那么θ的范数就可以足够小,从而降低成本函数.就是支持向量机如何能有效地产生大间距分类的原因.
image
  最后,即使θ0不等于0,svm也会尽力找到一个大间隔分类器.在下一节开始讨论如何利用支持向量机的原理,应用它们建立一个复杂的非线性分类器.

11.4 核函数1

  回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类问题:
image
为了获得上图所示的判定边界,我们的模型可能是θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+...的形式.我们可以用一系列的新的特征f来替换模型中的每一项,例如令:

f1=x1,f2=x2,f3=x1x2,f4=x12,f5=x22

得到hθ(x)=θ1f1+θ2f2+...+θnfn.然而,除了对原有的特征进行组合以外,有没有更好的方法来构造:f1,f2,f3?我们可以利用核函数来计算出新的特征.
  给定一个训练样本x,我们利用x的各个特征与我们预先选定的地标(landmarks)l(1)l(2)l(3)(课程里描述为选定的三个点)的近似程度来选取新的特征f1,f2,f3
image

  例如:f1=similarity(x,l(1))=exp(||xl(1)||22σ2),而similarity就是核函数(高斯核函数).一般我们不用similarity表示核函数,而是使用k(x,l(i)).其中:||xl(1)||2=j=1n(xjlj(1))2,为实例x中所有特征与地标l(1)之间的距离的和(本质上是两点距离).

注:这个函数与正态分布没什么实际上的关系,只是看上去像而已

image
  让我们来尝试理解这个核函数.先看第一个标记,这里忽视了x0,因为一直x0=1.接下来讨论两种情况:
(1) xl(1)很接近
(2) xl(1)很远
image
  因此,f1等特征是用来衡量xl的相似度.每个l(i)都对应一个特征f.因此给定一个样本x,可以计算3个新的特征f(以上面三个地标为例).
  更具体来说,假设我们的训练样本含有两个特征[x1,x2],给定地标l(1)与不同的σ值,f1的走势见下图,曲面的高度(也就是峰顶)表示f1的值:
image
  解释一下第一幅图,横轴坐标是x1x2,纵轴是f1,当x刚好等于[3,5]时,f1恰好为1(最大值),偏离l越远,高度越接近0.
  第二幅图高度没有变化,但是当x从最高处移动时,下降速度变快了.

  上面是特征的定义,接下来我们要利用特征得到预测函数.给定一个样本x,可以得到3个特征f1,f2,f3.我们假设θ的值如图所示,假设一个粉红色点如图位置,它离l1很近,因此f11,其他≈0.套入预测函数可以得出y>=0,因此预测为1.
image
  最后我们可以尝试多点代入,可以得出一个红色的边界,在范围里预测1,范围外预测0.
  总而言之,我们需要标记点和核函数来得出新的特征,训练出复杂的非线性边界.

11.5 核函数2

  在上一节,我们讨论了核函数的思想,以及怎样利用它去实现支持向量机的一些新特性.本节,我们补充一些细节问题.
  首先,如何选择地标l?
  我们通常是根据训练集的数量选择地标的数量,即如果训练集中有m个样本,则我们选取m个地标.并且令:l(1)=x(1),l(2)=x(2),l(3)=x(3),...,l(m)=x(m)(可以想象这些样本点是山峰,利用等高线图详细几座山峰连在一起,不在山峰点就快速下降,在山峰点就可以取值最大值).这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
image

  接下来是过程,在已知θ的情况下,通过x的各个特征与l求核函数,得到对应的特征向量f:
image
image

注意这里预测和成本函数不要搞混了.前面>1和-1都是站在尽量减小成本函数的角度上考虑.

  那么如何得到参数θ呢?看下面图,我们的成本函数cost里的参数变成了θTf(i).我们通过最小化这个成本来得到参数θ.还有一点,末尾项的n实际等于m.并且j=1m=nθ2=θTθ(当且仅当忽视θ0),
image
  在下图具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算j=1n=mθ2=θTθ时,我们用θTMθ代替θTθ.其中M是根据我们选择的核函数而不同的一个矩阵,这样做的原因是为了简化计算.
  理论上讲,我们也可以在逻辑回归中使用核函数和地标技术,但是上面使用 M来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间.
  另一个值得说明的问题是:当使用SVM的时候,怎么选择参数Cσ,当高斯核函数的σ偏大时,特征fi的曲线变化会很平滑,变化较慢(所用特征变化差异不大,多个特征和一个特征建模效果差别不大,欠拟合).而σ偏小时,特征fi的曲线变化会很陡峭,变化较快.
image
image

11.6 使用SVM

  本节我们讨论运行或者运用SVM.正如我们在之前小节里提到的,不建议你自己写代码来求解参数θ.强烈建议使用高优化软件库中的一个,而不是尝试自己落实一些数据.但即使我们使用工具包实现SVM,还是有几件事情要去做:

  • 选择参数C
  • 选择核函数(相似度函数)

比如,一个选择就是我们不选择任何核函数.只要当θTx>=0就预测y=1(也称为线性核函数).还有就是我们在上面介绍的使用高斯核函数,但此情况下我们还需要选择σ.
  从逻辑回归模型我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?
下面是一些普遍使用的准则:
n为特征数,m为训练样本数.
(1) 如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机.我们没有足够的数据拟合复杂的非线性函数.
(2) 如果n较小,m而且大小中等.例如n在 1-1000 之间,而m在10-10000(非1000000)之间,使用高斯核函数的支持向量机.
(3) 如果n较小,m而较大,例如n在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机.
  逻辑回归或不带核函数的支持向量机是两个非常相似的算法.
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值.
  请注意,有的语言在实现SVM的时候,可能会要求你自己实现一个核函数(比如Matlab),输入x1,x2,然后返回一个实数.还有一个很重要的问题是,假如你的特征之间差距很大,那么在使用高斯核函数之前先将它们按比例归一化.下面我们给出的高斯核函数分子部分:||xl||2是将它们的特征逐个相减,如果x特征之间数量级差距很大,那么f的值将很大程度上由数量级大的决定,从而忽视了数量级小的特征.所以需要按比例缩放特征,使得它们能被考虑到.
image

  虽然线性核函数和高斯核函数是我们最常使用的两个核函数,但不是所有我们提出来的核函数都是有效的核函数.核函数必须满足默塞尔定理(不满足就无法使用工具包用来优化求θ的技巧).也有一些其他满足默塞尔定理的核函数:
(1) 多项式核函数:有多种形式,比如:k(x,l)=(xTl)2,k(x,l)=(xTl+3)2.它通常用在x,l都是严格的非负数情况下.
(2) 字符串核函数,用来衡量两个字符串的相似度等等
image

  还有一个多分类问题.假设我们利用之前介绍的一对多方法来解决一个多类分类问题.如果一共有k个类,则我们需要k个模型,以及k个参数向量θ我们同样也可以训练k个支持向量机来解决多类分类问题.但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可.
image

posted @   acmloser  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2021-02-14 Arrange the Bulls POJ - 2441
2021-02-14 Islands and Bridges POJ - 2288
2021-02-14 Hie with the Pie POJ - 3311
2021-02-14 炮兵阵地 POJ - 1185
点击右上角即可分享
微信分享提示