7 Support Vector Machines
7.1 Large Margin Classification
7.1.1 Optimization Objective
支持向量机(SVM)代价函数在数学上的定义。

复习一下S型逻辑函数:

那么如何由逻辑回归代价函数得到支持向量机的代价函数(对于一个示例):

其实就是将逻辑回归的代价函数中的log(1/(1+e^(-ΘTx)))和log(1-1/(1+e^(-ΘTx)))分别替换为cost1Tx)和cost0Tx)(cost0和cost1分别对应y=0和y=1时的目标函数定义。后面会知道,cost1Tx)应该是cost1(ΘTf),cost0Tx)应该是cost0Tf))。并对m和λ进行提取。

可以对比:

逻辑回归的代价函数(优化目标):

SVM的代价函数和假设:

注意一下C的作用:C是控制对于误分类训练样本惩罚程度的,为正值。

the C parameter is a positive value that controls the penalty for misclassified training examples.

可以看到逻辑回归和SVM的假设的优化重点不同,逻辑回归的假设优化重点在第一项,SVM的优化重点在第二项。

做道题:

答案:可以将1式提取mλ,则1式的优化结果与2式相同。

7.1.2 Large Margin Intuition
支持向量机被称为大间距分类器的原因以及理解SVM的假设。
最小化SVM代价函数的必要条件。


来直观理解支持向量机被称为大间距分类器的原因。取代价函数中的C非常非常大的时候为例作为说明。

当C非常大的时候,J(Θ)将会得到能使第一个累加项([]中的内容)的和近似为0的优化解。当你最小化这个关于变量Θ的函数的时候,会得到如图的黑色的决策边界,这就是SVM的决策边界。黑色边界有着较大的间距(margin),努力用一个最大间距来分离样本,这也是SVM被称为大间距分类器的原因,这也是求解优化问题的结果。

如果C很小,就会得到这条黑线;如果C很大,黑线就会顺时针转动变为粉线。C的作用类似于1/λ,λ就是逻辑回归正则化中使用过的λ。

7.1.3 Mathematics Behind Large Margin Classification
从数学角度,用向量内积来理解SVM的目标函数,解释为什么支持向量机是一个大间距分类器。
关于向量内积的预备数学知识。

下图中介绍二维向量u和二维向量v的内积情况,首先介绍两向量夹角≤90的情况:

uv的内积是uTv=||u||·||v||·cosθ=u1v1+u2v2=||u||·p,这里p就是vu上的投影。过程就是将v投影至u向量,记其标量长度为p(有正负,与u同向为正,反向为负)。

下面讨论当C非常大的目标函数的情况下,SVM能有效产生大间距分类的原因。

SVM标准的代价函数:

C非常大时,SVM的代价函数可以简化为以下形式:

前提简化:

1.n=2(只有2个特征)。

2.Θ0=0,这使决策边界通过原点。其实当Θ0≠0的时候,类似于下面的推导过程,还是可以得到SVM能有效产生大间距分类的原因。

那么C非常大时,代价函数进一步可以演变为以下的意义:代价函数就是求向量Θ的范数(长度)最小值。

对应的,对约束条件进行理解(结合上面关于内积的预备知识):

如果向量机选择这条绿色的边界,那么该决策边界对应的向量Θ应该垂直边界代表的直线(因为直线上的点与原点形成的向量与向量Θ的内积为0),向量Θ应该指向正例。这时,可以看到x(1)在向量Θ上的投影p(1)的标量长度非常小,对应的如果要满足p(i)*||Θ||≥1,那么||Θ||就会很大。同样也可以分析x(2)

相反的,如果是下面的绿色直线x1=0作为决策边界,可以看到x(1)在向量Θ上的投影p(1)的标量长度较大,对应的如果要满足p(i)*||Θ||≥1,那么||Θ||就可以较小。同样也可以分析x(2)。在这里,x(1)和x(2)在向量Θ上的投影p(1)和p(2)之和的一半就是margin。

支持向量机最小化目标函数的目标是p(i)*||Θ||≥1的前提下,使得||Θ||尽可能的小,所以要选择能使p尽可能大的决策边界。支持向量机极大化这些p(i)的范数(训练样本到决策边界的距离)。

做道题:

答案:在坐标系中,默认横轴对应的是x1,纵轴对应的是x2。可以看到决策边界取x1=0时,左侧正例在向量上的投影Θ至少是2,右侧负例在向量Θ上的投影也至少是-2。又要满足约束函数||Θ||·p(i)=||Θ||·2≥1和||Θ||·p(i)=||Θ||·(-2)≤-1。min(p(i))=2,所以||Θ||≥1/2。所以是B。

下一节介绍如何利用支持向量机的原理,应用他们建立一个复杂的非线性分类器。

7.2 Kernels
7.2.1 Kernels I
讨论核函数是什么以及如何用核函数(kernels)构建复杂的非线性分类器。
对于一个特定的二元分类问题,如果要构造下图的决策边界,一般需要高阶项。如果用高阶项做特征变量,运算量会非常大,而且也不知道这些高阶项是不是我们所需要的,所以能不能选择别的特征变量或者有没有比这些高阶项更好的特征变量,或者说是否有不同的选择或者更好的选择来构造特征变量,以嵌入到假设函数中。有的,就要用到核函数。

定义决策边界对应的函数是Θ01f12f23f3,其中f1、f2和f3就是相似度函数。

下图给定新的x点,计算该点与标记的3个标记点(landmark)l(1)、l(2)和l(3)之间的相似度f1、f2和f3相似度函数就是所谓的核函数。在这里,就是高斯核函数,实际还有许多不同的核函数。这个相似度函数也可以写成K(x,l(i)),这里的x和l是向量。

关于特征变量f1,高斯核函数情况下,具体的公式如下(忽略x0,这里的相似度函数是计算x和l向量之间的各分量的距离):当新给的点x距离l较近时,就x和l(1)比较相似,显然f1≈1;当新给的点x距离l较远时,就x和l(1)不相似,显然f1≈0。这样确定l(1),新给的x就能对应地求出相似度f1、f2和f3。

下面来看一下高斯核函数是怎么样子的,也就是特征变量f1计算的内容。

取特定的l(1)向量并且参数σ2=分别取1、0.5和3情况下的高斯核函数的3D曲面立体图以及曲面的等值线图。

1.3D曲面图上的z轴(高度)对应的就是f1的取值情况,在这里不同σ2情况下,f1取值都为0-1之间,极大值为1,极小值为0,就是高度不变。

2.σ2越大,曲线越“胖”,核函数凸起的宽度变宽了,等值线图也扩大了一些;从l(1)点向外移动,特征变量的值减小的速度变慢。

高斯核函数相当于衡量示例之间距离的相似函数,其中σ决定了特征变量(相似性度量)减少的速度快慢。

讲完特征变量的概念以后,来看一下特定Θ0、Θ1、Θ2、Θ3下,能得到什么样的预测函数。Θ0=-0.5,Θ1=1,Θ2=1,Θ3=0时,预测两个点离l(1)、l(2)和l(3)不同的距离来预测y值是1还是0。前提:如果Θ01f12f23f3≥0,就预测为1。

1.距离l(1)较近的点,那么f1≈1,f2≈0,f3≈0,所以Θ01f12f23f3=1≥0。

2.距离l(1)、l(2)和l(3)都较远的点,那么f1≈0,f2≈0,f3≈0,所以Θ01f12f23f3=-0.5<0。

对大量的点进行相应的处理,特定Θ0、Θ1、Θ2、Θ3下(这里Θ0=-0.5,Θ1=1,Θ2=1,Θ3=0),距离l(1)、l(2)近的点的的预测值是1;距离l(1)、l(2)较远的点的预测值y是0。那么自然就会得到如图的决策边界(红线里面预测y=1,外面预测y=0)。这就是如何使用标记点和核函数来训练非常复杂的非线性判别边界的方法。

以上就是核函数的定义和以及我们如何在支持向量机中使用它们定义新的特征变量。我们通过标记点(landmark)和核函数(kernels)来定义新的特征变量,从而训练复杂的非线性分类器。
下面将会讲,我们如何得到这些标记点(landmark)以及其他的相似度函数是什么样的,如果有的话,是否能够代替上面用的高斯核函数。下节课将会来看看支持向量机如何通过核函数的定义,有效地学习复杂的非线性函数。

7.2.2 Kernels II
补充上一节缺失的一些细节以及支持向量机中的偏差-方差折中问题。
如何得到l(1)、l(2)、l(3)等标记点(landmark):选取所有训练样本为标记点。这说明特征向量是在描述新样本距离每一个测试样本的距离。

具体而言:给定m个训练样本,将这m个训练样本的位置作为landmark。然后输入x,x可以属于训练集、测试集合交叉验证集。我们计算特征值f1,f2,f3...最终得到由这些特征值得到的特征向量f。对于训练集中的数据,描述训练样本的特征向量。在这m个训练数据中,每一个训练数据x(i)所得的特征向量(核函数)f中,总有一维向量的值为1(因为这里x(i)=l(i)

已知Θ向量,如何对样本做出预测:给定x,计算特征向量f,只要当ΘTf>=0时就预测y=1,;否则,就预测y=0。其中的参数向量Θ是m+1维的(f0=1),这里有m+1个特征,额外的1是因为截距的原因。许多SVM软件包自动设置x0=1,自动设置截距Θ0。因此,实现SVM时,不用想逻辑回归那样添加x0=1这样的向量。

如何得到Θ变量。SVM中的代价函数:


具体而言就是求出能使代价函数取最小值的参数Θ。正则化项是n项的累加,这里n=m,因为特征变量的个数=训练集样本数。

实际使用SVM时,为了提高了计算效率,更适应大数据,对于代价函数的最后一项的细微改变使得最终的优化目标与上式直接最小化||Θ||2略有区别。将SVM的相关技术如果用于其他的机器学习算法,将会是不合适的(比如将核函数用于逻辑回归,这样的话,运行将会非常慢)。由于具体化技术,对某些细节的修改以及支持向量软件的实现细节,支持向量机可以与核函数搭配得很好。成熟的软件包中已经包含了SVM中的数值优化技巧,建议使用相关的软件包。

下面讨论SVM中的偏差-方差折中问题。涉及2个参数:代价函数中的参数C和核函数中(这里是高斯核函数)的σ2
1.支持向量机中的参数C选择。C的作用和λ的作用相似(λ就是逻辑回归中的正则化参数):C较大,等价于λ较小,低偏差,高方差;C较小,等价于λ较大,高偏差,低方差。

2.选择高斯核函数中的σ2。假设只有一个特征量x:σ2越大,特征变量fi越平滑,相似函数随x的变化更平缓,从而带来高偏差和低方差。σ2越小,特征变量fi越陡峭,相似函数随x的变化更剧烈,从而带来低偏差和高方差。

做道题:

答案:

7.3 SVMs in Practice
7.3.1 Using An SVM
为了运行SVM,实际上需要做什么。
1.强烈建议使用一个高度优化的软件库,而不是尝试自己去实现。好的软件库,比如liblinear,linsvm等等。
2.选择参数C的值。
3.选择核函数(相似函数)。以下是两种最常见的核函数:
1)可以不用核函数,这种做法也叫线性核函数,仅仅使用ΘTx,可以理解为这种情况只是给你一个标准的线性分类器。什么情况下决定不用核函数(使用线性核函数):特征变量有n个,训练样本m个,n>>m。
2)使用高斯核函数。注意theta平方的选择。什么时候选择高斯核函数:特征变量有n个,训练样本有m个,m中等大于n。

如果选择高斯核函数,那么要实现函数来计算核函数的特定特征。注意,如果特征变量取值范围很不一样,在使用高斯核函数之前,对它们进行归一化是很重要的。

注意不是所有能够提出来的相似度函数都是有效的核函数。高斯核函数,线性核函数等其他人们在用的核函数都满足默塞尔定理(Mercer’s Theorem)。这条定理的作用就是确保所有的SVM软件包能够使用大量的优化方法,并能快速地获得参数Θ。

不常用的核函数如下:
1.多项式核函数。k(x,l)=(xTl+b)^n(b为常数,n为指数),x和l很接近的时候,k(x,l)会很大。这个核函数有2个参数:b和n。效果要比高斯核函数差一些。用在x和l都是严格非负数的时候,保证两者的内积非负。
2.字符串核函数。用于字符串相关,比如文本分类。
3.卡方核函数。
4.直方图交叉核函数。

最后的细节。
1.多类分类问题。许多SVM软件包已经内置用于多类分类的函数,可以直接使用;也可以使用逻辑回归中提及的一对多的方法进行分类(k个类别,k个参数theta)。
2.什么时候用逻辑回归,什么时候用SVM。
1)n相对于m比较大。使用逻辑回归或者线性核函数SVM
2)n较小,m是中等规模(不会过分的大,但要比n合适的大)。这时候高斯核函数的运行效果就会比较好。
3)n较小,m非常大。创造更多的特征量,使用逻辑回归或者不带核函数的SVM。
其实,逻辑回归或者不带核函数的SVM是相似的。可以用逻辑回归的地方就可以用不带核函数的SVM,反之亦然。
3.神经网络什么时候使用:对于上面的3种情况,神经网路都可能可以很好地解决,但是神经网络的运行很慢。

实际上,SVM是一个凸优化问题,有全局最小值。有时候,选择模型确实重要,但更重要的是数据是否充足,是否熟练,是否擅长做误差分析和调试学习算法,如何设计新的特征变量等等。

做道题:

答案:

习题:

BC

CD

AD

Coursera 机器学习 第7章 Support Vector Machines 学习笔记的更多相关文章

  1. Coursera 机器学习 第5章 Neural Networks: Learning 学习笔记

    5.1节 Cost Function神经网络的代价函数. 上图回顾神经网络中的一些概念: L  神经网络的总层数. sl  第l层的单元数量(不包括偏差单元). 2类分类问题:二元分类和多元分类. 上 ...

  2. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机

    Lecture 12 支持向量机 Support Vector Machines 12.1 优化目标 Optimization Objective 支持向量机(Support Vector Machi ...

  3. Andrew Ng机器学习编程作业:Support Vector Machines

    作业: machine-learning-ex6 1. 支持向量机(Support Vector Machines) 在这节,我们将使用支持向量机来处理二维数据.通过实验将会帮助我们获得一个直观感受S ...

  4. 机器学习 Support Vector Machines 1

    引言 这一讲及接下来的几讲,我们要介绍supervised learning 算法中最好的算法之一:Support Vector Machines (SVM,支持向量机).为了介绍支持向量机,我们先讨 ...

  5. Support Vector Machines for classification

    Support Vector Machines for classification To whet your appetite for support vector machines, here’s ...

  6. Machine Learning - 第7周(Support Vector Machines)

    SVMs are considered by many to be the most powerful 'black box' learning algorithm, and by posing构建 ...

  7. 【Supervised Learning】支持向量机SVM (to explain Support Vector Machines (SVM) like I am a 5 year old )

    Support Vector Machines 引言 内核方法是模式分析中非常有用的算法,其中最著名的一个是支持向量机SVM 工程师在于合理使用你所拥有的toolkit 相关代码 sklearn-SV ...

  8. (原创)Stanford Machine Learning (by Andrew NG) --- (week 7) Support Vector Machines

    本栏目内容来源于Andrew NG老师讲解的SVM部分,包括SVM的优化目标.最大判定边界.核函数.SVM使用方法.多分类问题等,Machine learning课程地址为:https://www.c ...

  9. [C7] 支持向量机(Support Vector Machines) (待整理)

    支持向量机(Support Vector Machines) 优化目标(Optimization Objective) 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非 ...

随机推荐

  1. C#向服务器上传文件问题

    最近在写服务器端web上传的接口.但一直报错,上传不上去,后来发现是在分隔符中出现的问题. 错误的写法: var boundary = "---------------" + Da ...

  2. C# socket请求的名称有效 但是找不到请求的类型的数据

    程序以前在xp下运行一直良好,但将安装在win7下面却出现"请求的名称有效 但是找不到请求的类型的数据"错误,程序底层通信是基于socket,时间久了就会出现系统黑屏死机,但并不知 ...

  3. window.document 对象

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 正确处理类的复合关系------新标准c++程序设计

    假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是 ...

  5. 多线程《七》信号量,Event,定时器

    一 信号量 信号量也是一把锁,可以指定信号量为5,对比互斥锁同一时间只能有一个任务抢到锁去执行,信号量同一时间可以有5个任务拿到锁去执行,如果说互斥锁是合租房屋的人去抢一个厕所,那么信号量就相当于一群 ...

  6. python中局部变量和全局变量

    局部变量,就是在函数内部定义的变量 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响 局部变量的作用,为了临时保存数据需要在函数 在函数外边定义的变量叫做全局变量 全局变量能够在所有 ...

  7. 【bzoj4872】[Shoi2017]分手是祝愿 期望dp

    Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...

  8. 3. C/C++笔试面试经典题目三

    64. 如何打印出当前源文件的文件名以及源文件的当前行号? [参考答案]cout << __FILE__ ; cout<<__LINE__ ; __FILE__和__LINE_ ...

  9. P3230 [HNOI2013]比赛

    $ \color{#0066ff}{ 题目描述 }$ 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. ...

  10. CodeForces - 645D Robot Rapping Results Report(拓扑排序)

    While Farmer John rebuilds his farm in an unfamiliar portion of Bovinia, Bessie is out trying some a ...