SVM(支持向量机)科普篇

本文整合了一位博主的10篇SVM的讲解博客,特点是通俗易懂,搞懂SVM是干什么的,所以不会涉及很多数学公式的推导。
原博主博客比较老了,而且字体很小,原博客请点击这里

SVM是一种二分类模型,切记,切记。

线性分类器

线性分类器,也叫感知机是一种最简单的分类器的形式,SVM可以看作是对线性分类器做的改进。
用一个二维空间中仅有两类样本的分类问题举例。如下图所示:
在这里插入图片描述
空间中有 C 1 和 C 2 C_{1}和C_{2} C1C2两个类别,中间的直线是一个分类函数,可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全分开,就称这样的数据是线性可分的,否则称为线性不可分。

什么叫线性函数呢?在二维空间中就是一条直线,在三维空间中就是一个平面,在 n n n维空间中,我们就叫做超平面。而且一个线性函数,其值域是连续的实数,也就是若 f ( x ) = w T x + b f(x) = w^{T}x+b f(x)=wTx+b 是一个 n 维 n维 n空间中的线性函数,其值域 f ( x ) ∈ R f(x)\in R f(x)R。但是分类输出的是离散的值,比如可以用-1表示 C 1 C_{1} C1,用1表示 C 2 C_2 C2,这时只需要在 f ( x ) f(x) f(x)的基础上添加一个阈值即可,比如 f ( x ) > 0 f(x) > 0 f(x)>0表示 C 1 C_1 C1类别, f ( x ) < 0 f(x) < 0 f(x)<0表示 C 2 C_2 C2类别。这时也等价于给 f ( x ) f(x) f(x)添加一个符号函数 s g n ( ) sgn() sgn(),也就是 用 s g n ( f ( x ) ) 用sgn(f(x)) sgn(f(x))表示我们真正的判别函数。

注意:这里 x ∈ R n , w ∈ R n x \in R^{n},w \in R^{n} xRnwRn,都是 n n n维空间中的向量。

实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。

分类间隔

考虑二维空间,也就是 x o y xoy xoy坐标中的直线公式是 A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0,其中一点 ( x , y ) (x, y) (x,y)到直线的距离公式是:
d = ∣ A x + B y + C ∣ A 2 + B 2 (1) \tag{1} d = {|Ax+By+C| \over \sqrt{A^{2}+B^{2}}} d=A2+B2 Ax+By+C(1)
这个公式相信大家都见过。对于 n n n维空间中的一点到超平面的距离公式也长这个样子。
d = ∣ f ( x ) ∣ ∣ ∣ w ∣ ∣ = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ (2) \tag{2} d = {|f(x)| \over ||w||} = {|w^{T}x+b| \over ||w||} d=wf(x)=wwTx+b(2)

公式(1)和(2)其实等价的, n n n维空间中,每个坐标轴的表示是 x 1 , x 2 , , , , x n x_{1}, x_{2},,,,x_{n} x1,x2,,,,xn,只不过在二维空间中我们常用 x 和 y x和y xy来表示这俩个维度罢了。 ∣ ∣ w ∣ ∣ ||w|| w表示二范数,也叫做向量的长度, ∣ ∣ w ∣ ∣ = w 1 2 + w 2 2 + , , , + w n 2 ||w||=\sqrt{w_{1}^{2}+w_{2}^{2}+,,,+w_{n}^{2}} w=w12+w22+,,,+wn2

SVM是一种二分类模型,假设正例的标签是1(对应于线性函数 w T x + b > 0 w^{T}x+b>0 wTx+b>0的一侧),负例的标签是-1(对应于线性函数 w T x + b < 0 w^{T}x+b<0 wTx+b<0的一侧),上面的(2)式含有绝对值,在求解时不太方便,所以我们将样本的标签和距离公式结合起来。若样本能被正确分类,则(2)可改写为:
d = y ( w T x + b ) ∣ ∣ w ∣ ∣ (3) \tag{3}d = {y(w^{T}x+b) \over ||w||} d=wy(wTx+b)(3)
其中 y 的 取 值 为 1 或 − 1 y的取值为1或-1 y11。(3)式有一个专业术语叫做几何间隔,也就是点到直线(超平面)的距离。
下面我们将几何间隔简称为距离,我们定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。(3)式的分子称为函数间隔(定义与几何间隔类似,也是最近的点到超平面的距离,但是这种距离的度量公式是 y ( w T x + b ) y(w^{T}x+b) y(wTx+b))。下面这张图更加直观的展示出了几何间隔的现实含义:
在这里插入图片描述
H H H是分类面, H 1 和 H 2 H_1和H_2 H1H2平行于 H H H,且过距离H最近的两类样本点(也就是红色的点和蓝色的点)。margin是距离直线最近的点(正例或者负例)的几何间隔的2倍,上图中的分子为什么是2呢?本小节最后会说到。

之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:
误 分 类 次 数 < = ( 2 D d ) 2 误分类次数 <= ({2 D \over d})^{2} <=(d2D)2
其中, D D D是样本集中向量长度最长的样本的长度(也就是二范数最大的样本),先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!

至此我们就明白为何要选择几何间隔来作为评价一个解优劣的指标了,原来几何间隔的解越大,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标,也就是最大化(3)式。

现在讨论一下为什么图2中的分子是2,现在我们知道训练的目标是最大化(3)式,那么有没有好的办法可以再简化一下(3)式呢?其实可以发现当我们把 w 和 b w和b wb扩大 γ \gamma γ倍时,(3)式值不变,因为分子分母都有 γ \gamma γ,可以被消去。所以我们必定可以找到一个 γ , 并 令 w = γ w \gamma,并令w=\gamma w γ,w=γw,新的 w w w满足条件: y ( w T x + b ) = 1 y(w^{T}x+b)=1 y(wTx+b)=1,也就是将(3)式的分子(函数间隔)固定为1,又因为margin是几何间隔的2倍,所以图中的分子是2。这样的做法可以简化模型的求解,所以其实通常优化的是下面的(4)式:
d = 1 ∣ ∣ w ∣ ∣ (4) \tag{4} d = {1 \over ||w||} d=w1(4)

线性分类器的求解一

前面讨论了线性分类函数 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b,也讨论判断优劣的指标,也就是模型优化的目标------最大化几何间隔,也就是 m a x 1 ∣ ∣ w ∣ ∣ max {1 \over ||w||} maxw1,这是关于 ∣ ∣ w ∣ ∣ ||w|| w的反函数,所以最大化 1 ∣ ∣ w ∣ ∣ {1 \over ||w||} w1也就是最小化 ∣ ∣ w ∣ ∣ ||w|| w,也就是最小化 1 2 ∣ ∣ w ∣ ∣ 2 {1\over 2}||w||^{2} 21w2。这是因为 ∣ ∣ w ∣ ∣ ||w|| w表示向量的长度,是一个非负实数,在非负实数空间中,函数 y = 1 2 x 2 和 y = x y={1\over 2}x^{2}和y=x y=21x2y=x的最小值是同步的(注意并不是最小值相同,而是同步,同步的意思是说,当 y = x 在 x = x i 处 取 得 最 小 值 时 y = 1 2 x 2 也 在 x i 处 取 得 最 小 值 , 这 是 显 而 易 见 的 y=x在x=x_{i}处取得最小值时y={1\over 2}x^{2}也在x_{i}处取得最小值,这是显而易见的 y=xx=xiy=21x2xi)。也就是目标函数变为:
m i n 1 2 ∣ ∣ w 2 ∣ ∣ (5) \tag{5}min {1\over 2}||w^{2}|| min21w2(5)

之所以采用这种形式,是因为后面的求解过程会对目标函数作一系列变换,而式(5)的形式会使变换后的形式更为简洁。

接下来我们自然会问的就是,这个式子是否就描述了我们的问题呢?(回想一下,我们的问题是有一堆点,可以被分成两类,我们要找出最好的分类面)

如果直接来解这个求最小值问题,很容易看出当 ∣ ∣ w ∣ ∣ = 0 ||w||=0 w=0的时候就得到了目标函数的最小值。但是你也会发现,无论你给什么样的数据,都是这个解!反映在图中,就是H1与H2两条直线间的距离无限大,这个时候,所有的样本点(无论正样本还是负样本)都跑到了H1和H2中间,而我们原本的意图是,H1右侧的被分为正类,H2 左侧的被分为负类,位于两类中间的样本则拒绝分类(拒绝分类的另一种理解是分给哪一类都有道理,因而分给哪一类也都没有道理)。这下可好,所有样本点都进入了无法分类的灰色地带。

造成这种结果的原因是在描述问题的时候只考虑了目标,而没有加入约束条件,约束条件就是在求解过程中必须满足的条件,体现在我们的问题中就是样本点必须在H1或H2的某一侧(或者至少在H1和H2上),而不能跑到两者中间。我们前文提到过把离超平面距离最近的点的函数间隔固定为1,这也就意味着正例集合(或者负例集合)中的其他点的函数间隔都不会小于1,按照函数间隔的定义,满足这些条件就相当于让下面的式子总是成立:
y i ( w T x i + b ) > = 1 , i = 1 , 2 , , 3 , , , , N y_{i}(w^{T}x_{i}+b) >=1, i=1,2,,3,,,,N yi(wTxi+b)>=1,i=1,2,,3,,,,N
N N N是总的样本数。但我们常常习惯让式子的值和0比较,因而经常用变换过的形式:
y i ( w T x i + b ) − 1 > = 0 , i = 1 , 2 , , 3 , , , , N y_{i}(w^{T}x_{i}+b)-1 >=0, i=1,2,,3,,,,N yi(wTxi+b)1>=0,i=1,2,,3,,,,N

因此我们的两类分类问题也被我们转化成了它的数学形式,一个带约束的最小值的问题:
m i n 1 2 ∣ ∣ w ∣ ∣ 2 s u b j e c t t o y i ( w T x i + b ) − 1 > = 0 , i = 1 , 2 , , 3 , , , , N min {1 \over 2}||w||^2 \\ subject \enspace to \enspace y_{i}(w^{T}x_{i}+b)-1 >=0, i=1,2,,3,,,,N min21w2subjecttoyi(wTxi+b)1>=0,i=1,2,,3,,,,N

线性分类器求解二

从最一般的定义上说,一个求最小值的问题就是一个优化问题(也叫寻优问题,更文绉绉的叫法是规划——Programming),它同样由两部分组成,目标函数和约束条件,可以用下面的式子表示:
在这里插入图片描述
约束条件用函数c来表示,就是constrain的意思。你可以看出一共有p+q个约束条件,其中p个是不等式约束,q个等式约束。

关于这个式子可以这样来理解:式中的x是自变量,但不限定它的维数必须为1(视乎你解决的问题空间维数,对我们的文本分类来说,那可是成千上万)。求f(x)在哪一点上取得最小值,不是在整个空间里找,而是在约束条件所划定的一个有限的空间里找,这个有限的空间就是优化理论里所说的可行域。注意可行域中的每一个点都要求满足所有p+q个条件,而不是满足其中一条或几条就可以(切记,要满足每个约束),同时可行域边界上的点有一个额外好的特性,它们可以使不等式约束取得等号!而边界内的点不行。

关于可行域还有个概念不得不提,那就是凸集,凸集是指有这么一个点的集合,其中任取两个点连一条直线,这条线上的点仍然在这个集合内部,因此说“凸”是很形象的。如下图所示
在这里插入图片描述
回头再来看我们线性分类器问题的描述,可以看出更多的东西。
m i n 1 2 ∣ ∣ w ∣ ∣ 2 s u b j e c t t o y i ( w T x i + b ) − 1 > = 0 , i = 1 , 2 , , 3 , , , , N min {1 \over 2}||w||^2 \\ subject \enspace to \enspace y_{i}(w^{T}x_{i}+b)-1 >=0, i=1,2,,3,,,,N min21w2subjecttoyi(wTxi+b)1>=0,i=1,2,,3,,,,N
在这个问题中,自变量就是 w w w,而目标函数是 w w w的二次函数,所有的约束条件都是 w w w的线性函数(不要把 x i x_i xi当成变量,它代表样本,是已知的),这种规划问题有个很有名气的称呼——二次规划(Quadratic Programming,QP),而且可以更进一步的说,由于它的可行域是一个凸集,因此它是一个凸二次规划。

这个问题是不是有解?如果有解,是否能找到?
对于一般意义上的规划问题,两个问题的答案都是不一定,但凸二次规划让人喜欢的地方就在于,它有解(教科书里面为了严谨,常常加限定成分,说它有全局最优解,由于我们想找的本来就是全局最优的解,所以不加也罢),而且可以找到!(当然,依据你使用的算法不同,找到这个解的速度,行话叫收敛速度,会有所不同)

可以发现,我们的线性分类器问题只有不等式约束,因此形式上看似乎比一般意义上的规划问题要简单,但解起来却并非如此。

因为我们实际上并不知道该怎么解一个带约束的优化问题。如果你仔细回忆一下高等数学的知识,会记得我们可以轻松的解一个不带任何约束的优化问题(实际上就是当年背得烂熟的函数求极值嘛,求导再找0点),我们甚至还会解一个只带等式约束的优化问题,求条件极值,记得么,通过添加拉格朗日乘子,构造拉格朗日函数,来把这个问题转化为无约束的优化问题云云(如果你一时没想通,我提醒一下,构造出的拉格朗日函数就是转化之后的问题形式,它显然没有带任何条件)。

如果只带等式约束的问题可以转化为无约束的问题而得以求解,那么可不可以把带不等式约束的问题向只带等式约束的问题转化一下而得以求解呢?答案是可以的,下一节就来求解。

SVM的问题转化

让我再一次比较完整的重复一下我们要解决的问题:我们有属于两个类别的样本点(并不限定这些点在二维空间中)若干,如图,
在这里插入图片描述
圆形的样本点定为正样本(连带着,我们可以把正样本所属的类叫做正类),方形的点定为负例。我们想求得这样一个线性函数(在n维空间中的线性函数)
f ( x ) = w T x + b f(x) = w^{T}x+b f(x)=wTx+b
使得所有属于正类的点 x + x_+ x+代入以后有 f ( x + ) ≥ 1 f(x_+)≥1 f(x+)1,而所有属于负类的点 x − x_- x代入后有 g ( x − ) ≤ − 1 g(x_-)≤-1 g(x)1(之所以总跟1比较,无论正一还是负一,都是因为我们固定了函数间隔为1,注意函数间隔和几何间隔的区别)。代入 f ( x ) f(x) f(x)后的值如果在1和-1之间,我们就拒绝判断。

求这样的 f ( x ) f(x) f(x)的过程就是求 w ( 一 个 n 维 向 量 ) 和 b ( 一 个 实 数 ) w(一个n维向量)和b(一个实数) wnb两个参数的过程(但实际上只需要求 w w w,求得以后找某些样本点代入就可以求得 b b b)。因此在求 f ( x ) f(x) f(x)的时候, w w w才是变量。

你肯定能看出来,一旦求出了 w ( 也 就 求 出 了 b ) w(也就求出了b) wb,那么中间的直线H就知道了(因为它就是 w T x + b = 0 w^Tx+b=0 wTx+b=0),那么H1和H2也就知道了(因为三者是平行的,而且相隔的距离还是 ∣ ∣ w ∣ ∣ ||w|| w决定的)。那么 w w w是谁决定的?显然是你给的样本决定的,一旦你在空间中给出了那些个样本点,三条直线的位置实际上就唯一确定了(因为我们求的是最优的那三条,当然是唯一的),我们解优化问题的过程也只不过是把这个确定了的东西算出来而已。

为何需要核函数

生存?还是毁灭?——哈姆雷特

可分?还是不可分?——支持向量机

之前一直在讨论的线性分类器,只能对线性可分的样本做处理。如果提供的样本线性不可分,结果很简单,线性分类器的求解程序会无限循环,永远也解不出来。这必然使得它的适用范围大大缩小,而它的很多优点我们实在不原意放弃,怎么办呢?是否有某种方法,让线性不可分的数据变得线性可分呢?

有!其思想说来也简单,来用一个二维平面中的分类问题作例子,你一看就会明白。事先声明,下面这个例子是网络早就有的,我一时找不到原作者的正确信息,在此借用,并加进了我自己的解说而已。

例子是下面这张图:

在这里插入图片描述
我们把横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类。试问能找到一个线性函数把两类正确分开么?不能,因为二维空间里的线性函数就是指直线,显然找不到符合条件的直线。

但我们可以找到一条曲线,例如下面这一条:
在这里插入图片描述
显然通过点在这条曲线的上方还是下方就可以判断点所属的类别(你在横轴上随便找一点,算算这一点的函数值,会发现负类的点函数值一定比0大,而正类的一定比0小)。这条曲线就是我们熟知的二次曲线,它的函数表达式可以写为:
在这里插入图片描述
问题只是它不是一个线性函数,但是,下面要注意看了,新建一个向量y和a:
在这里插入图片描述
这样 g ( x ) 就 可 以 转 化 为 f ( y ) = a T y g(x)就可以转化为f(y)=a^{T}y g(x)f(y)=aTy,你可以把 y 和 a y和a ya分别回带一下,看看等不等于原来的 g ( x ) g(x) g(x)
在任意维度的空间中,这种形式的函数都是一个线性函数(只不过其中的 a 和 y a和y ay都是多维向量罢了),因为自变量 y y y的次数不大于1。

看出妙在哪了么?原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的!因此这也形成了我们最初想解决线性不可分问题的基本思路——向高维空间转化,使其变得线性可分。

而转化最关键的部分就在于找到x到y的映射方法。遗憾的是,如何找到这个映射,没有系统性的方法(也就是说,纯靠猜和凑)。具体到我们的文本分类问题,文本被表示为上千维的向量,即使维数已经如此之高,也常常是线性不可分的,还要向更高的空间转化。其中的难度可想而知。

用一个具体文本分类的例子来看看这种向高维空间映射从而分类的方法如何运作,想象一下,我们文本分类问题的原始空间是1000维的(即每个要被分类的文档被表示为一个1000维的向量),在这个维度上问题是线性不可分的。现在我们有一个2000维空间里的线性函数
f ( x ’ ) = w ’ T x ’ + b f(x’)=w’^{T}x’+b f(x)=wTx+b

它能够将原问题变得可分。式中的 w ’ 和 x ’ w’和x’ wx都是2000维的向量,只不过 w ’ 是 定 值 , 而 x ’ 是 变 量 w’是定值,而x’是变量 wx,现在我们的输入呢,是一个1000维的向量 x x x,分类的过程是先把 x x x变换为2000维的向量 x ’ x’ x,然后求这个变换后的向量 x ’ 与 向 量 w ’ x’与向量w’ xw的内积,再把这个内积的值和 b b b相加,就得到了结果,看结果大于阈值还是小于阈值就得到了分类结果。

你发现了什么?我们其实只关心那个高维空间里内积的值,那个值算出来了,分类结果就算出来了。而从理论上说, x ’ 是 经 由 x 变 换 来 的 x’是经由x变换来的 xx,因此广义上可以把它叫做 x x x的函数,而 w ’ w’ w是常量,它是一个低维空间里的常量 w w w经过变换得到的,所以给了一个 w 和 x w 和x wx的值,就有一个确定的 f ( x ’ ) f(x’) f(x)值与其对应。这让我们幻想,是否能有这样一种函数 K ( w , x ) K(w,x) K(w,x),他接受低维空间的输入值,却能算出高维空间的内积值 w ’ T x ’ w’^{T}x’ wTx

如果有这样的函数,那么当给了一个低维空间的输入 x x x以后,
g ( x ) = K ( w , x ) + b g(x)=K(w,x)+b g(x)=K(w,x)+b
f ( x ’ ) = w ’ T x ’ + b f(x’)=w’^Tx’+b f(x)=wTx+b
这两个函数的计算结果就完全一样,我们也就用不着费力找那个映射关系,直接拿低维的输入往 g ( x ) g(x) g(x)里面代就可以了(再次提醒,这回的 g ( x ) g(x) g(x)就不是线性函数了,因为你不能保证 K ( w , x ) K(w,x) K(w,x)这个表达式里的 x x x次数不高于1哦)。

万幸的是,这样的 K ( w , x ) K(w,x) K(w,x)确实存在(发现凡是我们人类能解决的问题,大都是巧得不能再巧,特殊得不能再特殊的问题,总是恰好有些能投机取巧的地方才能解决,由此感到人类的渺小),它被称作核函数(核,kernel),而且还不止一个,事实上,只要是满足了Mercer条件的函数,都可以作为核函数。核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。

明白了以上这些,会自然的问接下来两个问题:

1. 既然有很多的核函数,针对具体问题该怎么选择?

2. 如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办?

第一个问题现在就可以回答你:对核函数的选择,现在还缺乏指导原则!各种实验的观察结果(不光是文本分类)的确表明,某些问题用某些核函数效果很好,用另一些就很差,但是一般来讲,径向基核函数是不会出太大偏差的一种,首选。

对第二个问题的解决则引出了我们下一节的主题:松弛变量。

松弛变量

现在我们已经把一个本来线性不可分的文本分类问题,通过映射到高维空间而变成了线性可分的。现在想象我们有另一个训练集,只比原先这个训练集多了一篇文章,映射到高维空间以后(当然,也使用了相同的核函数),也就多了一个样本点,但是这个样本的位置是这样的:
在这里插入图片描述
就是图中黄色那个点,它是方形的,因而它是负类的一个样本,这单独的一个样本,使得原本线性可分的问题变成了线性不可分的。这样类似的问题(仅有少数点线性不可分)叫做“近似线性可分”的问题。

以我们人类的常识来判断,说有一万个点都符合某种规律(因而线性可分),有一个点不符合,那这一个点是否就代表了分类规则中我们没有考虑到的方面呢(因而规则应该为它而做出修改)?

其实我们会觉得,更有可能的是,这个样本点压根就是错误,是噪声,是提供训练集的同学人工分类时一打瞌睡错放进去的。所以我们会简单的忽略这个样本点,仍然使用原来的分类器,其效果丝毫不受影响。

但这种对噪声的容错性是人的思维带来的,我们的程序可没有。由于我们原本的优化问题的表达式中,确实要考虑所有的样本点(不能忽略某一个,因为程序它怎么知道该忽略哪一个呢?),在此基础上寻找正负类之间的最大几何间隔,而几何间隔本身代表的是距离,是非负的,像上面这种有噪声的情况会使得整个问题无解。这种解法其实也叫做“硬间隔”分类法,因为他硬性的要求所有样本点都满足和分类平面间的距离必须大于某个值。

因此由上面的例子中也可以看出,硬间隔的分类法其结果容易受少数点的控制,这是很危险的。

但解决方法也很明显,就是仿照人的思路,允许一些点到分类平面的距离不满足原先的要求。由于不同的训练集各点的间距尺度不太一样,因此用间隔(而不是几何间隔)来衡量有利于我们表达形式的简洁。我们原先对样本点的要求是:
y i ( w T x i + b ) > = 1 , i = 1 , 2 , , 3 , , , , N y_{i}(w^{T}x_{i}+b) >=1, i=1,2,,3,,,,N yi(wTxi+b)>=1,i=1,2,,3,,,,N
意思是说离分类面最近的样本点函数间隔也要比1大。如果要引入容错性,就给1这个硬性的阈值加一个松弛变量,即允许
y i ( w T x i + b ) > = 1 − ζ i , i = 1 , 2 , , 3 , , , , N ζ i > 0 y_{i}(w^{T}x_{i}+b) >=1-\zeta_{i}, i=1,2,,3,,,,N \\ \zeta_{i} > 0 yi(wTxi+b)>=1ζi,i=1,2,,3,,,,Nζi>0
因为松弛变量是非负的,因此最终的结果是要求间隔可以比1小。但是当某些点出现这种间隔比1小的情况时(这些点也叫离群点),意味着我们放弃了对这些点的精确分类,而这对我们的分类器来说是种损失。但是放弃这些点也带来了好处,那就是使分类面不必向这些点的方向移动,因而可以得到更大的几何间隔(在低维空间看来,分类边界也更平滑)。显然我们必须权衡这种损失和好处。好处很明显,我们得到的分类间隔越大,好处就越多。回顾我们原始的硬间隔分类对应的优化问题:
m i n 1 2 ∣ ∣ w ∣ ∣ 2 s u b j e c t t o y i ( w T x i + b ) − 1 > = 0 , i = 1 , 2 , , 3 , , , , N min {1 \over 2}||w||^2 \\ subject \enspace to \enspace y_{i}(w^{T}x_{i}+b)-1 >=0, i=1,2,,3,,,,N min21w2subjecttoyi(wTxi+b)1>=0,i=1,2,,3,,,,N
∣ ∣ w ∣ ∣ 2 ||w||^2 w2就是我们的目标函数(当然系数可有可无),希望它越小越好,因而损失就必然是一个能使之变大的量(能使它变小就不叫损失了,我们本来就希望目标函数值越小越好)。那如何来衡量损失,有两种常用的方式,有人喜欢用
在这里插入图片描述
而有人喜欢用
在这里插入图片描述
其中 l l l都是样本的数目。两种方法没有大的区别。如果选择了第一种,得到的方法的就叫做二阶软间隔分类器,第二种就叫做一阶软间隔分类器。把损失加入到目标函数里的时候,就需要一个惩罚因子(cost,也就是libSVM的诸多参数中的C),原来的优化问题就变成了下面这样:
m i n 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i N ζ i s u b j e c t t o y i ( w T x i + b ) > = 1 − ζ i , i = 1 , 2 , , 3 , , , , N ζ i > = 0 min {1 \over 2}||w||^2 +C\sum_{i}^{N} \zeta_{i} \\ subject \enspace to \enspace y_{i}(w^{T}x_{i}+b) >=1-\zeta_{i}, i=1,2,,3,,,,N \\ \zeta_{i} >= 0 min21w2+CiNζisubjecttoyi(wTxi+b)>=1ζi,i=1,2,,3,,,,Nζi>=0
这个式子有这么几点要注意:

一是并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,或者也可以这么看,所有没离群的点松弛变量都等于0(对负类来说,离群点就是在前面图中,跑到H2右侧的那些负样本点,对正类来说,就是跑到H1左侧的那些正样本点)。

二是松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远。

三是惩罚因子C决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,你定的C越大,对目标函数的损失也越大,此时就暗示着你非常不愿意放弃这些离群点,最极端的情况是你把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。

四是惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。

五是尽管加了松弛变量这么一说,但这个优化问题仍然是一个优化问题,解它的过程比起原始的硬间隔问题来说,没有任何更加特殊的地方。

至此一个比较完整的支持向量机框架就有了,简单说来,支持向量机就是使用了核函数的软间隔线性分类法。

松弛变量(续)

m i n 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i N ζ i s u b j e c t t o y i ( w T x i + b ) > = 1 − ζ i , i = 1 , 2 , , 3 , , , , N ζ i > = 0 min {1 \over 2}||w||^2 +C\sum_{i}^{N} \zeta_{i} \\ subject \enspace to \enspace y_{i}(w^{T}x_{i}+b) >=1-\zeta_{i}, i=1,2,,3,,,,N \\ \zeta_{i} >= 0 min21w2+CiNζisubjecttoyi(wTxi+b)>=1ζi,i=1,2,,3,,,,Nζi>=0
注意其中C的位置,也可以回想一下C所起的作用(表征你有多么重视离群点,C越大越重视,越不想丢掉它们)。这个式子是以前做SVM的人写的,大家也就这么用,但没有任何规定说必须对所有的松弛变量都使用同一个惩罚因子,我们完全可以给每一个离群点都使用不同的C,这时就意味着你对每个样本的重视程度都不一样,有些样本丢了也就丢了,错了也就错了,这些就给一个比较小的C;而有些样本很重要,决不能分类错误,就给一个很大的C。

当然实际使用的时候并没有这么极端,但一种很常用的变形可以用来解决分类问题中样本的“偏斜”问题。

先来说说样本的偏斜问题,也叫数据集偏斜(unbalanced),它指的是参与分类的两个类别(也可以指多个类别)样本数量差异很大。比如说正类有10,000个样本,而负类只给了100个,这会引起的问题显而易见,可以看看下面的图:
在这里插入图片描述
方形的点是负类。H,H1,H2是根据给的样本算出来的分类面,由于负类的样本很少很少,所以有一些本来是负类的样本点没有提供,比如图中两个灰色的方形点,如果这两个点有提供的话,那算出来的分类面应该是H’,H2’和H1,他们显然和之前的结果有出入,实际上负类给的样本点越多,就越容易出现在灰色点附近的点,我们算出的结果也就越接近于真实的分类面。但现在由于偏斜的现象存在,使得数量多的正类可以把分类面向负类的方向“推”,因而影响了结果的准确性。

对付数据集偏斜问题的方法之一就是在惩罚因子上作文章,想必大家也猜到了,那就是给样本数量少的负类更大的惩罚因子,表示我们重视这部分样本(本来数量就少,再抛弃一些,那人家负类还活不活了),因此我们的目标函数中因松弛变量而损失的部分就变成了:
在这里插入图片描述
其中i=1…p都是正样本,j=p+1…p+q都是负样本。libSVM这个算法包在解决偏斜问题的时候用的就是这种方法。

那C+和C-怎么确定呢?它们的大小是试出来的(参数调优),但是他们的比例可以有些方法来确定。咱们先假定说C+是5这么大,那确定C-的一个很直观的方法就是使用两类样本数的比来算,对应到刚才举的例子,C-就可以定为500这么大(因为10,000:100=100:1嘛)。

但是这样并不够好,回看刚才的图,你会发现正类之所以可以“欺负”负类,其实并不是因为负类样本少,真实的原因是负类的样本分布的不够广(没扩充到负类本应该有的区域)。说一个具体点的例子,现在想给政治类和体育类的文章做分类,政治类文章很多,而体育类只提供了几篇关于篮球的文章,这时分类会明显偏向于政治类,如果要给体育类文章增加样本,但增加的样本仍然全都是关于篮球的(也就是说,没有足球,排球,赛车,游泳等等),那结果会怎样呢?虽然体育类文章在数量上可以达到与政治类一样多,但过于集中了,结果仍会偏向于政治类!所以给C+和C-确定比例更好的方法应该是衡量他们分布的程度。比如可以算算他们在空间中占据了多大的体积,例如给负类找一个超球——就是高维空间里的球啦——它可以包含所有负类的样本,再给正类找一个,比比两个球的半径,就可以大致确定分布的情况。显然半径大的分布就比较广,就给小一点的惩罚因子。

但是这样还不够好,因为有的类别样本确实很集中,这不是提供的样本数量多少的问题,这是类别本身的特征(就是某些话题涉及的面很窄,例如计算机类的文章就明显不如文化类的文章那么“天马行空”),这个时候即便超球的半径差异很大,也不应该赋予两个类别不同的惩罚因子。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值