支持向量机

1.支持向量机优化目标

与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在训练复杂的非线性方程时提供了一种更为清晰,更加强大的方式。

在逻辑回归中我们已经熟悉了这里的假设函数形式,和下边的S型激活函数。下面依然用z表示$\theta^Tx$

1543588947466
现在考虑下我们想要逻辑回归做什么:如果有一个 y = 1 的样本,不管是在训练集中或是在测试集中,又或者在交叉验证集中,总之是 y = 1,现在我们希望 $h_\theta(x)​$ 趋近1。因为我们想要正确地将此样本分类,这就意味着当 $h_\theta(x)​$ 趋近于1时,$\theta^Tx​$ 应当远大于0。这是因为由于 z 表示 $\theta^Tx​$,当 z 远大于0时,即到了该图的右边,你不难发现此时逻辑回归的输出将趋近于1。相反地,如果我们有另一个样本,即 y = 0。我们希望假设函数的输出值将趋近于0,这对应于 $\theta^Tx​$,或者就是 z 会远小于0,因为对应的假设函数的输出值趋近0。

1543590127401

如果你进一步观察逻辑回归的代价函数公式,你会发现每个样本 (x, y) 都会为总代价函数,增加上面的一项,因此,对于总代价函数通常会有对所有的训练样本的代价函数求和。

接下来,考虑逻辑回归的两种情况:

一种是y = 1 的情况, 一种是 y = 0的情况

在第一种情况中,假设 y = 1, 此时在目标函数中只需要第一项起作用, 因为y = 1时, (1-y)项等于零,因此,在y = 1的样本中, 即(x, y) 中, 我们得到$-log({1\over1+e^{-z}})$ 这一项。。如果画出关于 z 的函数,你会看到下面的这条曲线,我们同样可以看到,当 Z 增大时,也就是相当于 $\theta^Tx$ 增大时,z 对应的值会变的非常小。对整个代价函数而言,影响也非常小。这也就解释了,为什么逻辑回归在观察到正样本时,试图将$\theta^Tx$设置得非常大。因为,在代价函数中的这一项会变的非常小。

现在开始建立支持向量机,我们从这里开始:

我们会从这个代价函数开始,也就是 $-log({1\over1+e^{-z}})$ 一点一点修改,让我取这里的 z = 1 点,我先画出将要用的代价函数。

1543592561417

新的代价函数(当y=1)和逻辑回归的代价函数类似,就是这条紫红色的曲线。那么,到了这里已经非常接近逻辑回归中使用的代价函数了。只是这里是由两条线段组成,即位于右边的水平部分和位于左边的直线部分,先别过多的考虑左边直线部分的斜率,这并不是很重要。但是,这里我们将使用的新的代价函数,是在y=1的前提下的。你也许能想到,这应该能做同逻辑回归中类似的事情,但事实上,在向量机的优化问题中,这会变得更坚定,并且为支持向量机,带来计算上的优势。

另外一种情况是当 y = 1时,此时如果你仔细观察逻辑回归的代价函数只留下了第二项,因为第一项被消除了。如果当 y = 0时,那么这一项也就是0了。所以上述表达式只留下了第二项。因此,这个样本的代价或是代价函数的贡献。将会由这一项表示。并且,如果你将这一项作为z的函数,那么,这里就会得到横轴 z 。同样地,我们要替代逻辑回归的代价函数这一条蓝色的线,用相似的方法, 画出当y = 0的时候向量机的代价函数。

1543634145117

如果我们用一个新的代价函数来代替,即这条从0点开始的水平直线,然后是一条斜线,像上图。那么,现在让我给这两个方程命名,第一个函数,我称之为cost1(z),同时,第二个函数函数我称它为cost0(z)。这里的下标是指在代价函数中,对应的y=1和y=0 的情况,拥有了这些定义后,下面开始构建支持向量机。

1543634926786

这是我们在逻辑回归中使用代价函数 J(θ)。也许这个方程看起来不是非常熟悉。这是因为之前有个负号在方程外面,但是,这里我所做的是,将负号移到了表达式的里面,这样做使得方程看起来有些不同。对于支持向量机而言,实质上我们要其表达式的两个部分替换为 cost1(z),也就是前面构建的代价函数$cost_1(\theta^Tx)$, 和cost0(z),也就是$cost_0(\theta^Tx)$。因此,对于支持向量机,我们得到了这里的最小化问题,即是将上面的两部分代价函数替换为下边蓝色的支持向量机代价函数的公式$cost_1(\theta^Tx)$ 和 $cost_0(\theta^Tx)$。然后再加上正则化参数。

但是在一般的时候,对支持向量机公式的参数,会有一些不同,下面尝试对向量机的代价函数进行改造:

  1. 首先,我们要除去1/m这一项,当然,这仅仅是由于人们使用支持向量机时,对比于逻辑回归而言,不同的习惯所致,因为这里仅仅除去1/m这一项,也会得出同样的 θ 最优值,因为 仅是个常量,因此,这个最小化问题中,无论前面是否有 1/m 这一项,最终我所得到的最优值都是一样的。
  2. 第二点概念上的变化,对于逻辑回归,在目标函数中,我们有两项:第一个是训练样本的代价,第二个是我们的正则化项,我们不得不去用有 λ 这一项来平衡,这就相当于我们想要最小化加上正则化参数。我们所做的是通过设置不同正则参数 λ 达到优化目的。这样,我们就能够权衡对应的项,是使得训练样本拟合的更好。即最小化。但对于支持向量机,按照惯例,我们将使用一个不同的参数替换这里使用的 λ 来权衡这两项。就是使用一个不同的参数称为C, 因此,在逻辑回归中,如果给定 λ,一个非常大的值,意味着给予正则化更大的权重。而这里,就对应于将 C 设定为非常小的值,那么,同样的的将会给正则化项更大的权重。因此,这只是一种不同的方式来控制这种权衡或者一种不同的方法,即用参数来决定是更关心第一项的优化,还是更关心第二项的优化。当然你也可以把这里的参数 C 考虑成 1/λ。

1543642222779

最后有别于逻辑回归输出的概率。我们的代价函数,当最小化代价函数,获得参数θ时,支持向量机所做的是它来直接预测的值等于1,还是等于0。因此,当这个假设函数当$\theta^Tx$小于0时,会预测为0。当$\theta^Tx$大于或者等于0时,将预测为1。

2.大间距的理解

大间距分类器优化约定

向量机经常被看做是大间距分类器,接下来了解一下向量机的大边界的含义,并进一步了解SVM模型的假设。

1543643391239

这是我的支持向量机模型的代价函数,左边是cost1(z) 关于z的代价函数,此函数用于正样本,右边是cost0(x)关于z的代价函数,横轴表示z,现在让我们考虑一下,最小化这些代价函数的必要条件是什么。如果你有一个正样本y=1 ,则只有在z >= 1时,代价函数cost1(z)才等于0。

或者是说,如果有一个正样本,我们希望$\theta^Tx$>=1, 反之, 如果y = 0, 他只有在z <= -1 的时候, 函数值才为0.这是支持向量机的一个有趣的性质。事实上,如果有一个正样本y = 1, 则其实我们仅仅要求$\theta^Tx$大于等于0,就能将该样本恰当的分出,这是因为如果$\theta^Tx>>0$的话,我们的模型代价函数值为0, 所以我们需要的是比0大很多的值,比如大于等于1。这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说是安全的间距因子。

1543645799159

接下来看看C参数对支持向量机的影响。假设将C设置为一个非常大的数,比如将C设置成10000或者其他非常大的数

如果 C 非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。比如我们可以把设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。

假如输入一个训练样本标签为 y = 1,你想令第一项为0,你需要做的是找到一个 θ,使得$\theta^Tx >= 1$,类似地,对于一个训练样本,标签为 y = 0,为了使 cost0(z) 函数的值为0,我们需要 $\theta^Tx <= -1$。因此,现在考虑优化问题。选择参数,使得第一项等于0,就会导致下面的优化问题,因为我们将选择参数使第一项为0,因此这个函数的第一项为0,因此是C乘以0加上二分之一乘以第二项。这里第一项是C乘以0,因此可以将其删去,因为我知道它是0。
这将遵从以下的约束(注意,这事是当向量机被看做是大间距分类器时的约定):如果 $y^{(i)}$ 是等于1 的, $\theta^Tx^{(i)} >=1$ ,如果 $y^{(i)}$ 是等于0的,$\theta^Tx^{(i)} <= -1$ ,这样当求解这个优化问题的时候,当你最小化这个关于变量θ的函数的时候,你会得到一个非常有趣的决策边界。

大间距分类器决策边界和大边界理解

1543647120683

如果有一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的,存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开。

比如,上面的绿色和粉色的决策边界,可以完全将训练样本区分开。但是多多少少这个看起来并不是非常自然

正常的支持向量机将会选择这个黑色的决策边界,相较于之前我用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么意思呢?这条黑线与样本之间有更大的距离,这个距离叫做间距(margin)。

1543647482968

当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器。现在我们可以理解为,上面一小节提到的优化约定,即:如果 $y^{(i)}$ 是等于1 的, $\theta^Tx^{(i)} >=1$ ,如果 $y^{(i)}$ 是等于0的,$\theta^Tx^{(i)} <= -1$ ,就是为了获取具有最大间距的决策边界,来获取最好的优化结果。

那么在让代价函数最小化的过程中,我们希望找出在y=0和y=1两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:

1543647763659

事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习
算法会受异常点(outlier) 的影响。比如我们加入一个额外的正样本。

1543647941357

在这里,如果你加了这个样本,为了将样本用最大间距分开,也许我最终会得到一条类似粉色的决策界。仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的。而如果正则化参数C,设置的非常大,这事实上正是支持向量机将会做的。它将决策界,从黑线变到了粉线,但是如果C 设置的小一点,如果你将C设置的不要太大,则你最终会得到这条黑线,当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数C非常大的情形,同时,C的作用类似于1/λ。这只是C非常大的情形,或者等价地 λ 非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,当C不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。

3.通过向量内积理解目标函数

我们先前给出的支持向量机模型中的目标函数。

1543650759436

1543650779361

1543650804087

1543650856038

4.核函数

核函数功能

回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类问题:

1543651153925

为了获取上图所示的判定边界,我们的模型可能是$\theta_0 + \theta_{1x1} + \theta_{2x2} + \theta_{3x1x2} + + \theta_{4x1^2} + …..$ 的形式

我们可以用一些列新的特征f来代替模型中的每一项。例如令:

f1 = x1, f2 = x2, f3 = x1x2, f4 = x1^2 …., 得到$h_\theta(x) = f1 + f2 + f3 + … + fn$, 然而, 除了对原有的特征进行组合之外,我们可以利用核函数计算出新的特征。

给定一个训练实例x, 我们利用x的各个特征与我们预先选定的地标(landmarks) $l^{(1)}, l^{(2)}, l^{(3)}$的近似成都来选取新的特征f1,f2, f3

1543652400137

这些地标 $l^{(i)}$ 的作用是什么?

如果一个训练实例与地标之间的距离近似于0,则新特征 f 近似于 $e^{-0} = 1$,如果训练实例x与地标之间距离较远,则 f 近似于$e^{一个大数} = 0$

假设我们的训练实例含有两个特征[x1, x2] , 给定地标$l^{(1)}$与不同的σ值,见下图:

1543653311899

图中水平面的坐标为 x1,x2 , f代表垂直坐标轴。可以看出,只有当x与$l^{(1)}$重合时才具有最大值。随着x的改变 f 值改变的速率受到σ2的控制。

在下图中,当实例处于洋红色的点位置处,因为其离$l^{(1)}$更近,但是离$l^{(2)}$和$l^{(3)}$较远,因此 f1 接近1,而 f2, f3接近0。因此hθ(x) > 0,因此预测y = 1。同理可以求出,对于离 $l^{(2)}$ 较近的绿色点,也预测 y = 1,但是对于蓝绿色的点,因为其离三个地标都较远,预测 y = 0。

1543653685983

这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征f1, f2, f3。

核函数使用

如何选择地标

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

1543654175180z

注意: 如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的

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

5.两个参数C, σ对支持向量机的影响

C对支持向量机的影响

C = 1/λ

C较大的时候, 相当于λ较小的时候, 可能会导致过拟合, 高方差;

C较小的时候,相当于λ较大的时候, 可能会导致欠拟合, 高偏差;

σ对支持向量机的影响

σ较大时,可能会导致低方差,高偏差;

σ较小时时,可能会导致低偏差,高房差;

6.使用支持向量机

不同的核函数

在高斯核函数之外我们还有其他一些选择,如:
多项式核函数(Polynomial Kernel)
字符串核函数(String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数(histogram intersection kernel)

多分类问题

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

选择参数

1、选择参数C。需要考虑高方差和高偏差的问题
2、选择内核参数σ , 和核函数。 除非使用线型和的SVM。

7.逻辑回归和SVM之间的选择

n为特征数, m为训练样本数。

(1) 如果相较于m而言, n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归
模型或者不带核函数的支持向量机。

(2)如果n较小,而且m大小中等,例如在 1-1000 之间,而m在10-10000之间,使用高斯核函数的支持向量机。

(3)如果n较小,而m较大,例如在1-1000之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

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

刘小恺(Kyle) wechat
如有疑问可联系博主