优化

在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平。比如:你为学习算法所设计的特征量的选择,以及如何选择正则化参数,诸如此类的事。还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。

$A$表示第一项,B表示第二项,但不包括$\lambda$,我们不是优化这里的$A+\lambda\times B$。我们所做的是通过设置不同正则参数$\lambda$达到优化目的。对于支持向量机,按照惯例,我们将使用一个不同的参数替换这里使用的$\lambda$来权衡这两项。就是第一项和第二项我们依照惯例使用一个不同的参数称为$C$,同时改为优化目标,$C×A+B$。 因此,在逻辑回归中,如果给定$\lambda$,一个非常大的值,意味着给予$B$更大的权重。而这里,就对应于将$C$ 设定为非常小的值,那么,相应的将会给$B$比给$A$更大的权重。因此,这只是一种不同的方式来控制这种权衡或者一种不同的方法,即用参数来决定是更关心第一项的优化,还是更关心第二项的优化。当然也可以把这里的参数$C$ 考虑成$1/\lambda$,同 $1/\lambda$所扮演的角色相同,并且这两个方程或这两个表达式并不相同,因为$C=1/\lambda$,但是也并不全是这样,如果当$C=1/\lambda$时,这两个优化目标应当得到相同的值,相同的最优值 ${{\theta }}$。因此,就用它们来代替。那么,我现在删掉这里的$\lambda$,并且用常数$C$来代替。因此,这就得到了在支持向量机中我们的整个优化目标函数。然后最小化这个目标函数,得到SVM 学习到的参数$C$。

最后有别于逻辑回归输出的概率。我们的代价函数J(θ),要最小化,从而获得参数${{\theta }}$。支持向量机所做的是它来直接预测$y$的值等于1,还是等于0。反推,当y=0 我们希望J(θ)最小那么cost1=0,则要满足z>=1 ,同样如果y=0时,需要cost2=0,需要满足z<=-1 。因此,基于上述推理,进行数据训练获取学习参数${{\theta }}$就是支持向量机假设函数的形式。那么,这就是支持向量机数学上的定义。

大边界的直观理解

如果你有一个正样本,我们会希望$\theta^Tx>=1$,反之,如果$y=0$,我们观察一下,函数${\cos}t_0{(z)}$,它只有在$z<=-1$的区间里函数值为0。这是支持向量机的一个有趣性质。事实上,如果你有一个正样本$y=1$,则其实我们仅仅要求$\theta^Tx$大于等于0,就能将该样本恰当分出,这是因为如果$\theta^Tx$>0大的话,我们的模型代价函数值为0,类似地,如果你有一个负样本,则仅需要$\theta^Tx$<=0就会将负例正确分离,但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不仅仅要求$\theta^Tx$>0,我们需要的是比0值大很多,比如大于等于1,我也想这个比0小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。

$C=1/\lambda$,因此:

$C$ 较大时,相当于 $\lambda$ 较小,可能会导致过拟合,高方差。

$C$ 较小时,相当于$\lambda$较大,可能会导致低拟合,高偏差。

大边界分类背后的数学

支持向量机选择了这个决策界,现在状况会有很大不同。如果这是决策界,这就是相对应的参数${{\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,支持向量机仍然会找到正样本和负样本之间的大间距分隔

核函数

${{\left| x-{{l}^{(1)}} \right|}^{2}}=\sum{{j=1}^{n}}{{({{x}{j}}-l_{j}^{(1)})}^{2}}$,为实例$x$中所有特征与地标$l^{(1)}$之间的距离的和。上例中的$similarity(x,{{l}^{(1)}})$就是核函数,具体而言,这里是一个高斯核函数(Gaussian Kernel)。 注:这个函数与正态分布没什么实际上的关系,只是看上去像而已。

通常是根据训练集的数量选择地标的数量,即如果训练集中有$m$个样本,则我们选取$m$个地标,并且令:$l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},.....,l^{(m)}=x^{(m)}$。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的

给定$x$,计算新特征$f$,当$θ^Tf>=0$ 时,预测 $y=1$,否则反之。

相应地修改代价函数为:$\sum{_{j=1}^{n=m}}\theta _{j}^{2}={{\theta}^{T}}\theta $,

$min C\sum\limits_{i=1}^{m}{[{{y}^{(i)}}cos {{t}{1}}}( {{\theta }^{T}}{{f}^{(i)}})+(1-{{y}^{(i)}})cos {{t}{0}}( {{\theta }^{T}}{{f}^{(i)}})]+\frac{1}{2}\sum\limits_{j=1}^{n=m}{\theta {j}^{2}}$ 在具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算$\sum{{j=1}^{n=m}}\theta _{j}^{2}={{\theta}^{T}}\theta $时,我们用$θ^TMθ$代替$θ^Tθ$,其中$M$是根据我们选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。

理论上讲,也可以在逻辑回归中使用核函数,但是上面使用 $M$来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间。

可以使用现有的软件包(如liblinear,libsvm等)。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。

另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而样本非常少的时候,可以采用这种不带核函数的支持向量机。

下面是支持向量机的两个参数$C$和$\sigma$的影响:

$C=1/\lambda$

$C$ 较大时,相当于$\lambda$较小,可能会导致过拟合,高方差;

$C$ 较小时,相当于$\lambda$较大,可能会导致低拟合,高偏差;

$\sigma$较大时,可能会导致低方差,高偏差;

$\sigma$较小时,可能会导致低偏差,高方差。

使用支持向量机

  • 使用步骤

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,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。