支持向量机(Support Vector Machines)
优化目标
大边界的直观理解
这是我的支持向量机模型的代价函数,在左边这里我画出了关于$z$的代价函数${\cos}t_1{(z)}$,此函数用于正样本,而在右边这里我画出了关于$z$的代价函数${\cos}t_0{(z)}$,横轴表示$z$,现在让我们考虑一下,最小化这些代价函数的必要条件是什么。如果你有一个正样本,$y=1$,则只有在$z>=1$时,代价函数${\cos}t_1{(z)}$才等于0。
换句话说,如果你有一个正样本,我们会希望$\thetaTx>=1$,反之,如果$y=0$,我们观察一下,函数${\cos}t_0{(z)}$,它只有在$z<=-1$的区间里函数值为0。这是支持向量机的一个有趣性质。事实上,如果你有一个正样本$y=1$,则其实我们仅仅要求$\thetaTx$大于等于0,就能将该样本恰当分出,这是因为如果$\thetaTx$>0大的话,我们的模型代价函数值为0,类似地,如果你有一个负样本,则仅需要$\thetaTx$<=0就会将负例正确分离,但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不仅仅要求$\theta^Tx$>0,我们需要的是比0值大很多,比如大于等于1,我也想这个比0小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。
当然,逻辑回归做了类似的事情。但是让我们看一下,在支持向量机中,这个因子会导致什么结果。具体而言,我接下来会考虑一个特例。我们将这个常数$C$设置成一个非常大的值。比如我们假设$C$的值为100000或者其它非常大的数,然后来观察支持向量机会给出什么结果?
如果 $C$非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。比如我们可以把$C$设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。
$\min_\limits{\theta}C\sum_\limits{i=1}{m}\left[y{(i)}{\cos}t_{1}\left(\theta{T}x{(i)}\right)+\left(1-y{(i)}\right){\cos}t\left(\theta{T}x{(i)}\right)\right]+\frac{1}{2}\sum_\limits{i=1}{n}\theta^{2}_{j}$
我们已经看到输入一个训练样本标签为$y=1$,你想令第一项为0,你需要做的是找到一个${{\theta }}$,使得$\theta^Tx>=1$,类似地,对于一个训练样本,标签为$y=0$,为了使${\cos}t_0{(z)}$ 函数的值为0,我们需要$\theta^Tx<=-1$。因此,现在考虑我们的优化问题。选择参数,使得第一项等于0,就会导致下面的优化问题,因为我们将选择参数使第一项为0,因此这个函数的第一项为0,因此是$C$乘以0加上二分之一乘以第二项。这里第一项是$C$乘以0,因此可以将其删去,因为我知道它是0。
这将遵从以下的约束:$\thetaTx{(i)}>=1$,如果 $y^{(i)}$是等于1 的,$\thetaTx{(i)}<=-1$,如果样本$i$是一个负样本,这样当你求解这个优化问题的时候,当你最小化这个关于变量${{\theta }}$的函数的时候,你会得到一个非常有趣的决策边界。
具体而言,如果你考察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的。我的意思是,存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开。
比如,这就是一个决策边界可以把正样本和负样本分开。但是多多少少这个看起来并不是非常自然是么?
或者我们可以画一条更差的决策界,这是另一条决策边界,可以将正样本和负样本分开,但仅仅是勉强分开,这些决策边界看起来都不是特别好的选择,支持向量机将会选择这个黑色的决策边界,相较于之前我用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么意思呢?这条黑线有更大的距离,这个距离叫做间距(margin)。
当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器,而这其实是求解上一页幻灯片上优化问题的结果。
我知道你也许想知道求解上一页幻灯片中的优化问题为什么会产生这个结果?它是如何产生这个大间距分类器的呢?我知道我还没有解释这一点。
我将会从直观上略述为什么这个优化问题会产生大间距分类器。总之这个图示有助于你理解支持向量机模型的做法,即努力将正样本和负样本用最大的间距分开。
在本节课中关于大间距分类器,我想讲最后一点:我们将这个大间距分类器中的正则化因子常数$C$设置的非常大,我记得我将其设置为了100000,因此对这样的一个数据集,也许我们将选择这样的决策界,从而最大间距地分离开正样本和负样本。那么在让代价函数最小化的过程中,我们希望找出在$y=1$和$y=0$两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:
事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点(outlier) 的影响。比如我们加入一个额外的正样本。
在这里,如果你加了这个样本,为了将样本用最大间距分开,也许我最终会得到一条类似这样的决策界,对么?就是这条粉色的线,仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的。而如果正则化参数$C$,设置的非常大,这事实上正是支持向量机将会做的。它将决策界,从黑线变到了粉线,但是如果$C$ 设置的小一点,如果你将C设置的不要太大,则你最终会得到这条黑线,当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数$C$非常大的情形,同时,要提醒你$C$的作用类似于$1/\lambda$,$\lambda$是我们之前使用过的正则化参数。这只是$C$非常大的情形,或者等价地 $\lambda$ 非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,当$C$不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。
回顾 $C=1/\lambda$,因此:
$C$ 较大时,相当于 $\lambda$ 较小,可能会导致过拟合,高方差。
$C$ 较小时,相当于$\lambda$较大,可能会导致低拟合,高偏差。
我们稍后会介绍支持向量机的偏差和方差,希望在那时候关于如何处理参数的这种平衡会变得更加清晰。我希望,这节课给出了一些关于为什么支持向量机被看做大间距分类器的直观理解。它用最大间距将样本区分开,尽管从技术上讲,这只有当参数$C$是非常大的时候是真的,但是它对于理解支持向量机是有益的。
本节课中我们略去了一步,那就是我们在幻灯片中给出的优化问题。为什么会是这样的?它是如何得出大间距分类器的?我在本节中没有讲解,在下一节课中,我将略述这些问题背后的数学原理,来解释这个优化问题是如何得到一个大间距分类器的。
大边界分类背后的数学(选修)
首先,让我来给大家复习一下关于向量内积的知识。假设我有两个向量,$u$和$v$,我将它们写在这里。两个都是二维向量,我们看一下,$u^T v$的结果。$u^T v$也叫做向量$u$和$v$之间的内积。由于是二维向量,我可以将它们画在这个图上。我们说,这就是向量$u$即在横轴上,取值为某个${{u}{1}}$,而在纵轴上,高度是某个${{u}{2}}$作为$u$的第二个分量。现在,很容易计算的一个量就是向量$u$的范数。$\left| u \right|$表示$u$的范数,即$u$的长度,即向量$u$的欧几里得长度。根据毕达哥拉斯定理,$\left| u \right|=\sqrt{u_{1}{2}+u_{2}{2}}$,这是向量$u$的长度,它是一个实数。现在你知道了这个的长度是多少了。我刚刚画的这个向量的长度就知道了。
现在让我们回头来看向量$v$ ,因为我们想计算内积。$v$是另一个向量,它的两个分量${{v}{1}}$和${{v}{2}}$是已知的。向量$v$可以画在这里,现在让我们来看看如何计算$u$和$v$之间的内积。这就是具体做法,我们将向量$v$投影到向量$u$上,我们做一个直角投影,或者说一个90度投影将其投影到$u$上,接下来我度量这条红线的长度。我称这条红线的长度为$p$,因此$p$就是长度,或者说是向量$v$投影到向量$u$上的量,我将它写下来,$p$是$v$投影到向量$u$上的长度,因此可以将${{u}^{T}}v=p\centerdot \left| u \right|$,或者说$u$的长度。这是计算内积的一种方法。如果你从几何上画出$p$的值,同时画出$u$的范数,你也会同样地计算出内积,答案是一样的。另一个计算公式是:$u^T v$就是$\left[ {{u}{1}}\text{ }{{u}{2}} \right]$ 这个一行两列的矩阵乘以$v$。因此可以得到${{u}{1}}\times {{v}{1}}+{{u}{2}}\times {{v}{2}}$。根据线性代数的知识,这两个公式会给出同样的结果。顺便说一句,$uTv=vTu$。因此如果你将$u$和$v$交换位置,将$u$投影到$v$上,而不是将$v$投影到$u$上,然后做同样地计算,只是把$u$和$v$的位置交换一下,你事实上可以得到同样的结果。申明一点,在这个等式中$u$的范数是一个实数,$p$也是一个实数,因此$u^T v$就是两个实数正常相乘。
最后一点,需要注意的就是$p$值,$p$事实上是有符号的,即它可能是正值,也可能是负值。我的意思是说,如果$u$是一个类似这样的向量,$v$是一个类似这样的向量,$u$和$v$之间的夹角大于90度,则如果将$v$投影到$u$上,会得到这样的一个投影,这是$p$的长度,在这个情形下我们仍然有${{u}^{T}}v$是等于$p$乘以$u$的范数。唯一一点不同的是$p$在这里是负的。在内积计算中,如果$u$和$v$之间的夹角小于90度,那么那条红线的长度$p$是正值。然而如果这个夹角大于90度,则$p$将会是负的。就是这个小线段的长度是负的。如果它们之间的夹角大于90度,两个向量之间的内积也是负的。这就是关于向量内积的知识。我们接下来将会使用这些关于向量内积的性质试图来理解支持向量机中的目标函数。
这就是我们先前给出的支持向量机模型中的目标函数。为了讲解方便,我做一点简化,仅仅是为了让目标函数更容易被分析。
我接下来忽略掉截距,令${{\theta }{0}}=0$,这样更容易画示意图。我将特征数$n$置为2,因此我们仅有两个特征${{x}{1}},{{x}{2}}$,现在我们来看一下目标函数,支持向量机的优化目标函数。当我们仅有两个特征,即$n=2$时,这个式子可以写作:$\frac{1}{2}\left({\theta_12+\theta_22}\right)=\frac{1}{2}\left(\sqrt{\theta_12+\theta_22}\right)^2$,我们只有两个参数${{\theta }{1}},{{\theta }_{2}}$。你可能注意到括号里面的这一项是向量${{\theta }}$的范数,或者说是向量${{\theta }}$的长度。我的意思是如果我们将向量${{\theta }}$写出来,那么我刚刚画红线的这一项就是向量${{\theta }}$的长度或范数。这里我们用的是之前学过的向量范数的定义,事实上这就等于向量${{\theta }}$的长度。
当然你可以将其写作${{\theta }{0}}\text{,}{{\theta }{1}},{{\theta }{2}}$,如果${{\theta }{0}}=0$,那就是${{\theta }{1}},{{\theta }{2}}$的长度。在这里我将忽略${{\theta }{0}}$,这样来写$\theta$的范数,它仅仅和${{\theta }{1}},{{\theta }{2}}$有关。但是,数学上不管你是否包含,其实并没有差别,因此在我们接下来的推导中去掉${{\theta }{0}}$不会有影响这意味着我们的目标函数是等于$\frac{1}{2}\left| \theta \right|^2$。因此支持向量机做的全部事情,就是极小化参数向量${{\theta }}$范数的平方,或者说长度的平方。
现在我将要看看这些项:$\theta^{T}x$更深入地理解它们的含义。给定参数向量$\theta $给定一个样本$x$,这等于什么呢?在前一页幻灯片上,我们画出了在不同情形下,$u^Tv$的示意图,我们将会使用这些概念,$\theta $和$x^{(i)}$就类似于$u$和$v$ 。
让我们看一下示意图:我们考察一个单一的训练样本,我有一个正样本在这里,用一个叉来表示这个样本$x{(i)}$,意思是在水平轴上取值为$x_1{(i)}$,在竖直轴上取值为$x_2^{(i)}$。这就是我画出的训练样本。尽管我没有将其真的看做向量。它事实上就是一个始于原点,终点位置在这个训练样本点的向量。现在,我们有一个参数向量我会将它也画成向量。我将$θ_1$画在横轴这里,将$θ_2$ 画在纵轴这里,那么内积$θ^T x^{(i)}$ 将会是什么呢?
使用我们之前的方法,我们计算的方式就是我将训练样本投影到参数向量${{\theta }}$,然后我来看一看这个线段的长度,我将它画成红色。我将它称为$p^{(i)}$用来表示这是第 $i$个训练样本在参数向量${{\theta }}$上的投影。根据我们之前幻灯片的内容,我们知道的是$θTx{(i)}$将会等于$p$ 乘以向量 $θ$ 的长度或范数。这就等于$\theta_1\cdot{x_1{(i)}}+\theta_2\cdot{x_2{(i)}}$。这两种方式是等价的,都可以用来计算$θ$和$x^{(i)}$之间的内积。
这告诉了我们什么呢?这里表达的意思是:这个$θTx{(i)}>=1$ 或者$θTx{(i)}<-1$的,约束是可以被$p{(i)}\cdot{x}>=1$这个约束所代替的。因为$θTx{(i)}=p{(i)}\cdot{\left| \theta \right|}$ ,将其写入我们的优化目标。我们将会得到没有了约束,$θTx{(i)}$而变成了$p^{(i)}\cdot{\left| \theta \right|}$。
需要提醒一点,我们之前曾讲过这个优化目标函数可以被写成等于$\frac{1}{2}\left| \theta \right|^2$。
现在让我们考虑下面这里的训练样本。现在,继续使用之前的简化,即${{\theta }_{0}}=0$,我们来看一下支持向量机会选择什么样的决策界。这是一种选择,我们假设支持向量机会选择这个决策边界。这不是一个非常好的选择,因为它的间距很小。这个决策界离训练样本的距离很近。我们来看一下为什么支持向量机不会选择它。
对于这样选择的参数${{\theta }}$,可以看到参数向量${{\theta }}$事实上是和决策界是90度正交的,因此这个绿色的决策界对应着一个参数向量${{\theta }}$这个方向,顺便提一句${{\theta }_{0}}=0$的简化仅仅意味着决策界必须通过原点$(0,0)$。现在让我们看一下这对于优化目标函数意味着什么。
比如这个样本,我们假设它是我的第一个样本$x^{(1)}$,如果我考察这个样本到参数${{\theta }}$的投影,投影是这个短的红线段,就等于$p{(1)}$,它非常短。类似地,这个样本如果它恰好是$x{(2)}$,我的第二个训练样本,则它到${{\theta }}$的投影在这里。我将它画成粉色,这个短的粉色线段是$p^{(2)}$,即第二个样本到我的参数向量${{\theta }}$的投影。因此,这个投影非常短。$p{(2)}$事实上是一个负值,$p{(2)}$是在相反的方向,这个向量和参数向量${{\theta }}$的夹角大于90度,$p^{(2)}$的值小于0。
我们会发现这些$p{(i)}$将会是非常小的数,因此当我们考察优化目标函数的时候,对于正样本而言,我们需要$p{(i)}\cdot{\left| \theta \right|}>=1$,但是如果 $p^{(i)}$在这里非常小,那就意味着我们需要${{\theta }}$的范数非常大.因为如果 $p^{(1)}$ 很小,而我们希望$p^{(1)}\cdot{\left| \theta \right|}>=1$,令其实现的唯一的办法就是这两个数较大。如果 $p^{(1)}$ 小,我们就希望${{\theta }}$的范数大。类似地,对于负样本而言我们需要$p^{(2)}\cdot{\left|\theta \right|}<=-1$。我们已经在这个样本中看到$p^{(2)}$会是一个非常小的数,因此唯一的办法就是${{\theta }}$的范数变大。但是我们的目标函数是希望找到一个参数${{\theta }}$,它的范数是小的。因此,这看起来不像是一个好的参数向量${{\theta }}$的选择。
相反的,来看一个不同的决策边界。比如说,支持向量机选择了这个决策界,现在状况会有很大不同。如果这是决策界,这就是相对应的参数${{\theta }}$的方向,因此,在这个决策界之下,垂直线是决策界。使用线性代数的知识,可以说明,这个绿色的决策界有一个垂直于它的向量${{\theta }}$。现在如果你考察你的数据在横轴$x$上的投影,比如这个我之前提到的样本,我的样本$x^{(1)}$,当我将它投影到横轴$x$上,或说投影到${{\theta }}$上,就会得到这样$p{(1)}$。它的长度是$p{(1)}$,另一个样本,那个样本是$x{(2)}$。我做同样的投影,我会发现,$p{(2)}$的长度是负值。你会注意到现在$p^{(1)}$ 和$p{(2)}$这些投影长度是长多了。如果我们仍然要满足这些约束,$P{(i)}\cdot{\left| \theta \right|}$>1,则因为$p^{(1)}$变大了,${{\theta }}$的范数就可以变小了。因此这意味着通过选择右边的决策界,而不是左边的那个,支持向量机可以使参数${{\theta }}$的范数变小很多。因此,如果我们想令${{\theta }}$的范数变小,从而令${{\theta }}$范数的平方变小,就能让支持向量机选择右边的决策界。这就是支持向量机如何能有效地产生大间距分类的原因。
看这条绿线,这个绿色的决策界。我们希望正样本和负样本投影到$\theta$的值大。要做到这一点的唯一方式就是选择这条绿线做决策界。这是大间距决策界来区分开正样本和负样本这个间距的值。这个间距的值就是$p{(1)},p{(2)},p{(3)}$等等的值。通过让间距变大,即通过这些$p{(1)},p{(2)},p{(3)}$等等的值,支持向量机最终可以找到一个较小的${{\theta }}$范数。这正是支持向量机中最小化目标函数的目的。
以上就是为什么支持向量机最终会找到大间距分类器的原因。因为它试图极大化这些$p^{(i)}$的范数,它们是训练样本到决策边界的距离。最后一点,我们的推导自始至终使用了这个简化假设,就是参数$θ_0=0$。
就像我之前提到的。这个的作用是:$θ_0=0$的意思是我们让决策界通过原点。如果你令$θ_0$不是0的话,含义就是你希望决策界不通过原点。我将不会做全部的推导。实际上,支持向量机产生大间距分类器的结论,会被证明同样成立,证明方式是非常类似的,是我们刚刚做的证明的推广。
之前视频中说过,即便$θ_0$不等于0,支持向量机要做的事情都是优化这个目标函数对应着$C$值非常大的情况,但是可以说明的是,即便$θ_0$不等于0,支持向量机仍然会找到正样本和负样本之间的大间距分隔。
总之,我们解释了为什么支持向量机是一个大间距分类器。在下一节我们,将开始讨论如何利用支持向量机的原理,应用它们建立一个复杂的非线性分类器。
核函数
高斯核函数
线性核函数
使用支持向量机
但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。
尽管你不去写你自己的SVM的优化软件,但是你也需要做几件事:
1、是提出参数$C$的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。
2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。
从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?
下面是一些普遍使用的准则:
$n$为特征数,$m$为训练样本数。
(1)如果相较于$m$而言,$n$要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果$n$较小,而且$m$大小中等,例如$n$在 1-1000 之间,而$m$在10-10000之间,使用高斯核函数的支持向量机。
(3)如果$n$较小,而$m$较大,例如$n$在1-1000之间,而$m$大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。