SVM入门,有它就够了!看它!!
这篇文章很长,大家做好心理准备,小编花了两三天去整理,尽可能以一种清晰易懂的逻辑给大家呈现出SVM的真实面目!如果你可以静下心来辩证地去看,小编认为你一定会对SVM有一个清晰的认知,绝对会有一种拨开云雾见青天的感觉!加油吧,少年~
SVM入门,有它就够了!看它!!
一、简介
支持向量机在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
- 小样本,并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的。
- 非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓,以后会详细讨论。
- 高维模式识别是指样本维数很高。对于SVM,即使样本维数很高,也不会给存储和计算带来大麻烦。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。
- 所谓VC维是对函数类的一种度量,可以简单的理解为问题的复杂程度,VC维越高,一个问题就越复杂。正是因为SVM关注的是VC维,后面我们可以看到,SVM解决问题的时候,和样本的维数是无关的。当然,有这样的能力也因为引入了核函数。
- 经验风险:机器学习本质上就是一种对问题真实模型的逼近,这个近似模型与问题真实解之间的误差,就叫做风险(更严格的说,误差的累积叫做风险)。我们选择了一个假设之后(更直观点说,我们得到了一个分类器以后),真实误差无从得知,但我们可以用某些可以掌握的量来逼近它。最直观的想法就是使用分类器在样本数据上的分类的结果与真实结果(因为样本是已经标注过的数据,是准确的数据)之间的差值来表示。这个差值叫做经验风险
R
e
m
p
(
w
)
R_{emp}(w)
Remp(w)。以前的机器学习方法都把经验风险最小化作为努力的目标,但后来发现很多分类函数能够在样本集上轻易达到100%的正确率,在真实分类时却一塌糊涂(即所谓的推广能力差,或泛化能力差)。此时的情况便是选择了一个足够复杂的分类函数(它的VC维很高),能够精确的记住每一个样本,但对样本之外的数据一律分类错误。回头看看经验风险最小化原则我们就会发现,此原则适用的大前提是经验风险要确实能够逼近真实风险才行(行话叫一致),但实际上能逼近么?答案是不能,因为样本数相对于现实世界要分类的文本数来说简直九牛一毛,经验风险最小化原则只在这占很小比例的样本上做到没有误差,当然不能保证在更大比例的真实文本上也没有误差。
统计学习因此而引入了泛化误差界的概念,就是指真实风险应该由两部分内容刻画,一是经验风险,代表了分类器在给定样本上的误差;二是置信风险,代表了我们在多大程度上可以信任分类器在未知文本上分类的结果。 - 置信风险:很显然,第二部分是没有办法精确计算的,因此只能给出一个估计的区间,也使得整个误差只能计算上界,而无法计算准确的值(所以叫做泛化误差界,而不叫泛化误差)。
置信风险:与两个量有关,一是样本数量,显然给定的样本数量越大,我们的学习结果越有可能正确,此时置信风险越小;二是分类函数的VC维,显然VC维越大,推广能力越差,置信风险会变大。 - 泛化误差界的公式为:
R ( w ) ≤ R e m p ( w ) + Ф ( n / h ) R(w)≤R_{emp}(w)+Ф(n/h) R(w)≤Remp(w)+Ф(n/h)
公式中 R ( w ) R(w) R(w)就是真实风险, R e m p ( w ) R_{emp}(w) Remp(w)就是经验风险, Ф ( n / h ) Ф(n/h) Ф(n/h)就是置信风险。统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。
二、线性SVM
2.1 什么是线性分类器?
首先了解一下什么是线性函数:在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面……如果不关注空间的维数,这种线性函数还有一个统一的名称——超平面。
线性分类器就是使用线性函数就能将样本进行区分的一种模型。
用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示:
C
1
C_1
C1 和
C
2
C_2
C2 是要区分的两个类别,在二维平面中它们的样本如上图所示。中间的直线就是一个分类函数,它可以将两类样本完全分开。一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
实际上,一个线性函数是一个实值函数(即函数的值是连续的实数),而我们的分类问题(例如这里的二元分类问题——回答一个样本属于还是不属于一个类别的问题)需要离散的输出值,例如用1表示某个样本属于类别 C 1 C_1 C1,而用 0 0 0表示不属于(不属于 C 1 C_1 C1也就意味着属于 C 2 C_2 C2),这时候只需要简单的在实值函数的基础上附加一个阈值即可,通过分类函数执行时得到的值大于还是小于这个阈值来确定类别归属。 例如我们有一个线性函数:
g ( x → ) = w → ⋅ x → + b g(\overrightarrow x) = \overrightarrow w \cdot \overrightarrow { x} + b g(x)=w⋅x+b
我们可以取阈值为 0 0 0,这样当有一个样本 x → i \overrightarrow x_i xi 需要判别的时候,我们就看 g ( x → i ) g(\overrightarrow x_i) g(xi) 的值。若 g ( x → i ) > 0 g(\overrightarrow x_i)>0 g(xi)>0,就判别为类别 C 1 C_1 C1,若 g ( x → i ) < 0 g(\overrightarrow x_i)<0 g(xi)<0,则判别为类别 C 2 C_2 C2(等于的时候我们就拒绝判断,呵呵)。此时也等价于给函数 g ( x → ) g(\overrightarrow x) g(x) 附加一个符号函数 s g n ( ) sgn() sgn(),即 f ( x → ) = s g n [ g ( x → ) ] f(\overrightarrow x)=sgn [g(\overrightarrow x)] f(x)=sgn[g(x)] 是我们真正的判别函数。
关于 g ( x → ) = w → ⋅ x → + b g(\overrightarrow x) = \overrightarrow w \cdot \overrightarrow { x} + b g(x)=w⋅x+b有几点说明:
- 式中的 x → \overrightarrow x x是一个样本的向量表示,不是二维坐标系中的横轴,例如一个样本点的坐标是 ( 3 , 8 ) (3,8) (3,8),则 x T = ( 3 , 8 ) x^T=(3,8) xT=(3,8) ,而不是 x = 3 x=3 x=3(一般说向量都是说列向量,因此以行向量形式来表示时,就加上转置)
- 这个形式并不局限于二维的情况,在 n n n 维空间中仍然可以使用这个表达式,只是式中的 w → \overrightarrow w w 成为了 n n n 维向量(在二维的这个例子中, w → \overrightarrow w w是二维向量)
- g ( x → ) g(\overrightarrow x) g(x)不是中间那条直线的表达式,中间那条直线的表达式是 g ( x → ) = 0 g(\overrightarrow x)=0 g(x)=0,即 w → ⋅ x → + b = 0 \overrightarrow w \overrightarrow { \cdot x} + b=0 w⋅x+b=0,我们也把这个函数叫做分类面。
实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。
2.2 分类间隔解释——最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣
对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
D i = ( x i → , y i ) {D_i} = (\overrightarrow {{x_i}} ,{y_i}) Di=(xi,yi)
- x i → \overrightarrow {x_i} xi 就是文本向量(维数很高)
- y i y_i yi 就是分类标记
在二元的线性分类中,这个表示分类的标记只有两个值, 1 1 1 和 − 1 -1 −1(用来表示属于还是不属于这个类)。有了这种表示法,我们就可以定义一个样本点到某个超平面的间隔:
δ i = y i ( w → ⋅ x i → + b ) {\delta _i} = {y_i}( \overrightarrow w \cdot \overrightarrow {x_i} + b) δi=yi(w⋅xi+b)
这个公式乍一看没什么神秘的,也说不出什么道理,只是个定义而已,但我们做做变换,就能看出一些有意思的东西。
首先注意到如果某个样本属于该类别的话,那么 w → ⋅ x i → + b > 0 \overrightarrow w \cdot \overrightarrow {x_i} + b >0 w⋅xi+b>0(记得么?这是因为我们所选的 g ( x ) = w → ⋅ x i → + b g(x)= \overrightarrow w \cdot \overrightarrow {x_i} + b g(x)=w⋅xi+b就通过大于 0 0 0 还是小于 0 0 0 来判断分类),而 y i y_i yi 也大于 0 0 0;若不属于该类别的话,那么 w → ⋅ x i → + b < 0 \overrightarrow w \cdot \overrightarrow {x_i} + b <0 w⋅xi+b<0,而 y i y_i yi 也小于 0 0 0,这意味着 δ i = y i ( w → ⋅ x i → + b ) {\delta _i} = {y_i}( \overrightarrow w \cdot \overrightarrow {x_i} + b) δi=yi(w⋅xi+b) 总是大于 0 0 0 的,而且它的值就等于 ∣ w → ⋅ x i → + b ∣ |\overrightarrow w \cdot \overrightarrow {x_i} + b| ∣w⋅xi+b∣!(也就是 ∣ g ( x i → ) ∣ |g( \overrightarrow {x_i} )| ∣g(xi)∣)
现在把 w → \overrightarrow w w 和 b b b 进行一下归一化,即用 w / ∣ ∣ w ∣ ∣ w/||w|| w/∣∣w∣∣ 和 b / ∣ ∣ w ∣ ∣ b/||w|| b/∣∣w∣∣ 分别代替原来的 w → \overrightarrow w w 和 b b b,那么间隔就可以写成:
δ i = 1 ∣ ∣ w → ∣ ∣ ∣ g ( x i → ) ∣ {\delta _i} = \frac{1}{{||\overrightarrow w ||}}|g(\overrightarrow {{x_i}} )| δi=∣∣w∣∣1∣g(xi)∣
这就是解析几何中点 x → i \overrightarrow x_i xi到直线 g ( x → ) = 0 g(\overrightarrow x)=0 g(x)=0 的距离公式。
当用归一化的
w
→
\overrightarrow w
w 和
b
b
b 代替原值之后的间隔有一个专门的名称,叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离,我们下面就简称几何间隔为“距离”。以上是单个点到某个超平面的距离(就是间隔,后面不再区别这两个词)定义,同样可以定义一个点的集合(就是一组样本)到某个超平面的距离为此集合中离超平面最近的点的距离。下面这张图更加直观的展示出了几何间隔的现实含义:
H
H
H 是分类面,而
H
1
H_1
H1 和
H
2
H_2
H2 是平行于
H
H
H,且过离
H
H
H 最近的两类样本的直线,
H
1
H_1
H1 与
H
H
H,
H
2
H_2
H2 与
H
H
H之间的距离就是几何间隔。
之所以如此关心几何间隔这个东西,是因为几何间隔与样本的误分次数间存在关系:
其中的
δ
δ
δ 是样本集合到分类面的间隔,
R
=
m
a
x
∣
∣
x
→
i
∣
∣
,
i
=
1
,
.
.
.
,
n
R=max ||\overrightarrow x_i||,i=1,...,n
R=max∣∣xi∣∣,i=1,...,n ,即
R
R
R 是所有样本中(
x
→
i
\overrightarrow x_i
xi 是以向量表示的第
i
i
i 个样本)向量长度最长的值(也就是说代表样本的分布有多么广)。先不必追究误分次数的具体定义和推导过程,只要记得这个误分次数一定程度上代表分类器的误差。而从上式可以看出,误分次数的上界由几何间隔决定!(当然,是样本已知的时候)
至此我们就明白为何要选择几何间隔来作为评价一个解优劣的指标了,原来几何间隔越大的解,它的误差上界越小。因此最大化几何间隔成了我们训练阶段的目标。
注意:下文中为了方便,一律将向量 w → \overrightarrow w w表示为 w w w,向量 x → \overrightarrow x x表示为 x x x:
回顾一下,间隔和几何间隔的定义:
间隔: δ = y ( w x + b ) = ∣ g ( x ) ∣ δ=y(wx+b)=|g(x)| δ=y(wx+b)=∣g(x)∣
几何间隔: δ 几 何 = 1 ∣ ∣ w ∣ ∣ ∣ g ( x ) ∣ \delta_{几何} = \frac{1}{{||w||}}|g(x)| δ几何=∣∣w∣∣1∣g(x)∣
可以看出 δ = ∣ ∣ w ∣ ∣ δ 几 何 δ=||w||δ_{几何} δ=∣∣w∣∣δ几何。注意到几何间隔与 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣是成反比的,因此最大化几何间隔等价于最小化||w||。而我们常用的方法并不是固定 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣ 的大小而寻求最大几何间隔,而是固定间隔(例如固定为1),寻找最小的||w||。
以上问题常常使用另一个完全等价的目标函数来代替,那就是:
m i n 1 2 ∣ ∣ w ∣ ∣ min \frac{1}{{2}}||w|| min21∣∣w∣∣
如果直接来解这个求最小值问题,很容易看出当
∣
∣
w
∣
∣
=
0
||w||=0
∣∣w∣∣=0 的时候就得到了目标函数的最小值。但是你也会发现,无论你给什么样的数据,都是这个解!反映在图中,就是
H
1
H_1
H1与
H
2
H_2
H2两条直线间的距离无限大,这个时候,所有的样本点(无论正样本还是负样本)都跑到了
H
1
H_1
H1和
H
2
H_2
H2中间,而我们原本的意图是,
H
1
H_1
H1右侧的被分为正类,
H
2
H_2
H2 左侧的被分为负类,位于两类中间的样本则拒绝分类(拒绝分类的另一种理解是分给哪一类都有道理,因而分给哪一类也都没有道理)。这下可好,所有样本点都进入了无法分类的灰色地带。
造成这种结果的原因是在描述问题的时候只考虑了目标,而没有加入约束条件,约束条件就是在求解过程中必须满足的条件,体现在我们的问题中就是样本点必须在 H 1 H_1 H1或 H 2 H_2 H2 的某一侧(或者至少在 H 1 H_1 H1或 H 2 H_2 H2 上),而不能跑到两者中间。我们前文提到过把间隔固定为 1 1 1,这是指把所有样本点中间隔最小的那一点的间隔定为 1 1 1(这也是集合的间隔的定义,有点绕嘴),也就意味着集合中的其他点间隔都不会小于 1 1 1,按照间隔的定义,满足这些条件就相当于让下面的式子总是成立:
y i [ ( w ⋅ x i ) + b ] > = 1 ( i = 1 , 2 , . . . , l ) y_i[(w·x_i)+b]>=1 (i=1,2,...,l) yi[(w⋅xi)+b]>=1(i=1,2,...,l), l l l是样本个数
因此我们的两类分类问题也被我们转化成了它的数学形式,一个带约束的最小值的问题:
δ
=
min
1
2
∣
∣
w
∣
∣
2
\delta = \min \frac{1}{2}||w|{|^2}
δ=min21∣∣w∣∣2
s
u
b
j
e
c
t
subject
subject
t
o
to
to
y
i
(
w
⋅
x
i
+
b
)
−
1
≥
0
(
i
=
1
,
2
,
.
.
.
,
l
)
{y_i}(w \cdot {x_i} + b) - 1 \ge 0(i = 1,2,...,l)
yi(w⋅xi+b)−1≥0(i=1,2,...,l),
l
l
l是样本个数
2.3 数学解释——最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣
第二节中介绍的从分类间隔上解释为什么要最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣,个人认为这种解释有逻辑的欠缺,比如,在等式中函数 g ( x ) g(x) g(x)中也含有 w w w变量,为什么最大化几何间隔就是最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣呢?等等
所以接下来,我们从数学角度解释一下为什么最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣会成为我们的优化目标。
首先,描述一下SVM的优点:
- 存储优势:模型只存储支撑向量,节省空间(解释一下支撑向量:第一次碰到边界的数据点。)
- 递增训练策略:一个batch只保留支撑向量,加入下一个batch,继续训练,如此循环
由第一小节可知:SVM问题可以简化为, f ( x → , w → , b ) = s i g n ( w → ⋅ x → + b ) f(\overrightarrow x,\overrightarrow w,b) = sign(\overrightarrow w \cdot \overrightarrow { x} + b) f(x,w,b)=sign(w⋅x+b),其中, x → \overrightarrow x x是向量, w → \overrightarrow w w是法向量, b b b是标量。
那么点
x
→
\overrightarrow x
x到直线
w
→
⋅
x
→
+
b
=
0
\overrightarrow w \cdot \overrightarrow x+b=0
w⋅x+b=0的距离表示如下:
d ( x → ) = ∣ x → ⋅ w → + b ∣ ∣ ∣ w → ∣ ∣ 2 = ∣ x → ⋅ w → + b ∣ ∑ i = 1 d w i 2 d(\overrightarrow x ) = \frac{{|\overrightarrow x \cdot \overrightarrow w + b|}}{{||\overrightarrow w |{|^2}}} = \frac{{|\overrightarrow x \cdot \overrightarrow w + b|}}{{\sqrt {\sum\nolimits_{i = 1}^d {w_i^2} } }} d(x)=∣∣w∣∣2∣x⋅w+b∣=∑i=1dwi2∣x⋅w+b∣
由上图可知,间隔就是支撑向量到直线的距离,那么几何间隔可以表示为:
m a r g i n ≡ arg min x ∈ D d ( x ) = arg min x ∈ D ∣ x → ⋅ w → + b ∣ ∑ i = 1 d w i 2 margin \equiv \mathop {\arg \min }\limits_{x \in D} d(x) = \mathop {\arg \min }\limits_{x \in D} \frac{{|\overrightarrow x \cdot \overrightarrow w + b|}}{{\sqrt {\sum\nolimits_{i = 1}^d {w_i^2} } }} margin≡x∈Dargmind(x)=x∈Dargmin∑i=1dwi2∣x⋅w+b∣
对二分类问题,如果 y i = 1 y_i=1 yi=1,那么 w → ⋅ x → i + b ≥ 0 \overrightarrow w \cdot \overrightarrow x_i + b \ge 0 w⋅xi+b≥0;如果 y i = − 1 y_i=-1 yi=−1,那么 w → ⋅ x → i + b ≤ 0 \overrightarrow w \cdot \overrightarrow x_i + b \le 0 w⋅xi+b≤0,所以 y i ( w → ⋅ x → i + b ) ≥ 0 y_i(\overrightarrow w \cdot \overrightarrow x_i + b) \ge 0 yi(w⋅xi+b)≥0
直线 w → ⋅ x → + b = 0 \overrightarrow w \cdot \overrightarrow x+b=0 w⋅x+b=0是不固定的,所以最大化几何间隔的问题就转化求解一个合适的 w → \overrightarrow w w 和 b b b 使得分类的几何间隔最大,表示为:
arg max w → , b arg min x ∈ D ∣ x → ⋅ w → + b ∣ ∑ i = 1 d w i 2 \mathop {\arg \max }\limits_{\overrightarrow w ,b} \mathop {\arg \min }\limits_{x \in D} \frac{{|\overrightarrow x \cdot \overrightarrow w + b|}}{{\sqrt {\sum\nolimits_{i = 1}^d {w_i^2} } }} w,bargmaxx∈Dargmin∑i=1dwi2∣x⋅w+b∣
使得: ∀ x i ∈ D : y i ( x i → ⋅ w → + b ) ≥ 0 \forall {x_i} \in D:{y_i}(\overrightarrow {{x_i}} \cdot \overrightarrow w + b) \ge 0 ∀xi∈D:yi(xi⋅w+b)≥0
这就变成了博弈问题, m i n − m a x min-max min−max问题。
可以使用一个策略,使其转化为最小化的问题,这个策略就是:
∀ x i ∈ D : y i ( x i → ⋅ w → + b ) ≥ 1 \forall {x_i} \in D:{y_i}(\overrightarrow {{x_i}} \cdot \overrightarrow w + b) \ge 1 ∀xi∈D:yi(xi⋅w+b)≥1,即: ∀ x i ∈ D : ∣ x i → ⋅ w → + b ∣ ≥ 1 \forall {x_i} \in D:|\overrightarrow {{x_i}} \cdot \overrightarrow w + b| \ge 1 ∀xi∈D:∣xi⋅w+b∣≥1
为什么要这么做呢?也就是说为什么要把函数间隔设置为1呢?
函数间隔 γ ^ = y ∗ ( x ∗ → ⋅ w → + b ) \hat \gamma = {y^*}(\overrightarrow {{x^*}} \cdot \overrightarrow w + b) γ^=y∗(x∗⋅w+b),这里 ( x ∗ → , y ∗ → ) (\overrightarrow {{x^*}},\overrightarrow {{y^*}}) (x∗,y∗)是支撑向量,即那些构成支撑超平面的点。
这实际上是函数间隔所满足的约束,对于一个确定的训练集合,如果我们等比例的放缩 w w w和 b b b,那么函数边距的值会随着 w w w 和 b b b 的值变得很大而很大,即使这些 w w w 和 b b b 描述的仍是同一个超平面。但是除以了 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣的几何间隔仍然是不变的(因为缩放分子中的 w w w 和 b b b 的同时也缩放了分子中的 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣)。
如果取 γ ^ = 1 \hat \gamma= 1 γ^=1 的话,优化得出了一组 w w w 和 b b b,再取 γ ^ = 10 , 100 , 1000...... \hat \gamma = 10 ,100 ,1000 ...... γ^=10,100,1000......得到了很多组的 w w w 和 b b b,显然,随着 γ ^ \hat \gamma γ^ 的变大,优化得到的 w w w 和 b b b 也相应的变的很大了,但是,它们描述的全都是一个超平面,也就是说它们是完全等价的,那么我们为什么不直接让 γ ^ = 1 \hat \gamma= 1 γ^=1 从而得到一组相对“平凡”的 w w w 和 b b b 呢?
使用了这个策略后,这个问题就可以简化为:
arg min w → , b ∑ i = 1 d w i 2 \mathop {\arg \min}\limits_{\overrightarrow w ,b} {{{\sum\nolimits_{i = 1}^d {w_i^2} } }} w,bargmin∑i=1dwi2
使得: ∀ x i ∈ D : y i ( x i → ⋅ w → + b ) ≥ 1 \forall {x_i} \in D:{y_i}(\overrightarrow {{x_i}} \cdot \overrightarrow w + b) \ge 1 ∀xi∈D:yi(xi⋅w+b)≥1
推导过程见图示意:
上述问题也可以转化为跟第二小节描述一样:
δ
=
min
1
2
∣
∣
w
∣
∣
2
\delta = \min \frac{1}{2}||w|{|^2}
δ=min21∣∣w∣∣2
s
u
b
j
e
c
t
subject
subject
t
o
to
to
y
i
(
w
⋅
x
i
+
b
)
−
1
≥
0
(
i
=
1
,
2
,
.
.
.
,
l
)
{y_i}(w \cdot {x_i} + b) - 1 \ge 0(i = 1,2,...,l)
yi(w⋅xi+b)−1≥0(i=1,2,...,l),
l
l
l是样本个数
即:
arg
min
w
→
,
b
1
2
∣
∣
w
→
∣
∣
2
\mathop {\arg \min}\limits_{\overrightarrow w ,b} \frac{1}{2}||\overrightarrow w|{|^2}
w,bargmin21∣∣w∣∣2
s
u
b
j
e
c
t
subject
subject
t
o
to
to
y
i
(
w
⋅
x
i
+
b
)
−
1
≥
0
(
i
=
1
,
2
,
.
.
.
,
l
)
{y_i}(w \cdot {x_i} + b) - 1 \ge 0(i = 1,2,...,l)
yi(w⋅xi+b)−1≥0(i=1,2,...,l),
l
l
l是样本个数
2.4 SVM 的求解问题
二次规划(Quadratic Programming,QP)
我们先来看看什么是二次规划:
在这个问题中,自变量就是
u
→
\overrightarrow u
u,而目标函数是
u
→
\overrightarrow u
u的二次函数,所有的约束条件都是
u
→
\overrightarrow u
u的线性函数。
线性SVM的二次规划转换
对于线性SVM,该问题可以化成以上的二次规划的形式:
那么如何去求解这个问题呢?
我们可以轻松的解一个不带任何约束的优化问题(实际上就是函数求极值,求导再找0点),我们甚至还会解一个只带等式约束的优化问题,(求条件极值,通过添加拉格朗日乘子,构造拉格朗日函数,来把这个问题转化为无约束的优化问题……构造出的拉格朗日函数就是转化之后的问题形式,它显然没有带任何条件)
如果只带等式约束的问题可以转化为无约束的问题而得以求解,那么可不可以把带不等式约束的问题向只带等式约束的问题转化一下而得以求解呢?
关于QP问题的求解在此不作赘述,大家有兴趣可以查阅资料。
三、SVM 对 非线性数据——加松弛变量
3.1 硬间隔与软间隔
以上介绍的是Hard Margin SVM,下面来看看Soft Margin SVM的情形。
比如下图,对于二分类问题,存在噪声数据点,使得其线性不可分的时候,要采取什么办法呢?
由于我们原本的优化问题的表达式中,确实要考虑所有的样本点(不能忽略某一个),在此基础上寻找正负类之间的最大几何间隔,而几何间隔本身代表的是距离,是非负的,像上面这种有噪声的情况会使得整个问题无解。这种解法其实就叫做“硬间隔”分类法,即Hard Margin SVM,因为他硬性的要求所有样本点都满足和分类平面间的距离必须大于某个值。
因此由上面的例子中也可以看出,硬间隔的分类法其结果容易受少数点的控制,这是很危险的。
解决方法也很明显,就是仿照人的思路,允许一些点到分类平面的距离不满足原先的要求。这就引入了“Soft Margin SVM”。即给这个硬性的阈值加一个松弛变量。Soft-margin SVM原理就是让SVM能够容忍一定的噪声数据,以减少过拟合的风险。下面我们来详细说说。
3.2 加松弛变量
先看一下上面的相同数据集中的两个模型,左图中的模型能够容忍数据中存在一定噪声,而且在数据集上表示还可以;右图就是Hard-margin SVM,不能容忍数据集中的噪声,根据奥卡姆剃刀原理,明显左边的模型能更好的解释数据,右图的模型存在过拟合的风险。
为了让Hard-margin容忍一定的误差,在每个样本点后面加上了一个松弛条件,允许这个点违反一点点
ξ
ξ
ξ 大小的误差(上图中的violation就是这个
ξ
ξ
ξ),对于没有违反的点,则
ξ
ξ
ξ 为
0
0
0。同时为了最优化,需要最小化所有误差的和,因此在最小化的项后面加上了误差和。
上式子中,在
ξ
ξ
ξ 前面加了权重
C
C
C,这个可以由使用SVM的用户指定,可以看出,如果
C
C
C 很大,对错误的惩罚越大,模型会倾向于尽量将样本分割开;如果
C
C
C 越小,则会有更多的违反边界的点存在,并且上图中绿色的margin就越大。
( C C C 值越大,margin越细,分类器就越不愿意允许分类错误(“离群点”)。如果 C C C 值太大,margin越粗,分类器就会竭尽全力地在训练数据上少犯错误,而实际上这是不可能/没有意义的,于是就造成过拟合。
而 C C C值过小时,分类器就会过于“不在乎”分类错误,于是分类性能就会较差。)
将以上式子展开后如下图所示:
所以,对于
{
w
⃗
∗
,
b
∗
}
=
min
w
⃗
,
b
∑
i
=
1
d
w
i
2
+
c
∑
j
=
1
N
ε
j
\{ {\vec w^*},{b^*}\} = \mathop {\min }\limits_{\vec w,b} \sum\nolimits_{i = 1}^d {w_i^2} + c\sum\nolimits_{j = 1}^N {{\varepsilon _j}}
{w∗,b∗}=w,bmin∑i=1dwi2+c∑j=1Nεj:
- 第一部分是描述了最大化间隔
- 第二部分是描述了松弛变量的损失,即最小化松弛变量(以最小的代价松弛)
- 超参数 c c c是可以调整的,会影响模型的VC维
- 松弛变量必须大于等于0(因为我们只对错误样本做松弛,小于0表示对正确样本也做了松弛)。
到此为止,这个SVM仍然是一个QP问题,仍然可以以QP问题的形式来求解。
3.3 hinge loss
上面有讲到引入了一个松弛变量,并且最小化松弛变量,相当于引入了一个损失函数。
解释:如果
min
w
⃗
,
b
∑
i
=
1
d
w
i
2
≥
1
\mathop {\min }\limits_{\vec w,b} \sum\nolimits_{i = 1}^d {w_i^2} \ge 1
w,bmin∑i=1dwi2≥1,那么
ε
=
0
\varepsilon=0
ε=0;如果
min
w
⃗
,
b
∑
i
=
1
d
w
i
2
<
1
\mathop {\min }\limits_{\vec w,b} \sum\nolimits_{i = 1}^d {w_i^2} < 1
w,bmin∑i=1dwi2<1,那么
ε
=
1
−
min
w
⃗
,
b
∑
i
=
1
d
w
i
2
\varepsilon=1-\mathop {\min }\limits_{\vec w,b} \sum\nolimits_{i = 1}^d {w_i^2}
ε=1−w,bmin∑i=1dwi2。如图所示,这就是 hinge loss
:
这个hinge loss损失函数表示的意思是:如果大于等于1时,相当样本在间隔正确的两端,损失为0;小于1时,表示样本是噪声数据,有一定的损失,具体损失大小看离间隔边界大小来衡量。
为什么hinge函数可以成为损失函数呢?他是传统的0-1损失函数的上界,如下图所示:
到此为止,svm的简介就结束了,上面这么复杂的东西其实可以用一个式子表达出来:
- 前面是hinge损失(线性损失),后面是正则项(可以考虑一下:2-范数 or 1-范数)
- y i y_i yi是标签, f ( x i ) f(x_i) f(xi)是分类器
- ( ) + ()_+ ()+表示:relu函数,如果括号里面大于0,即为本身,如果括号里面小于0,即为0;
- 后面是正则项:最大化间隔推出来是 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣,这里就表示成: λ ∣ ∣ f ∣ ∣ H 2 \lambda||f||_H^2 λ∣∣f∣∣H2
四、SVM的对偶问题
以上内容相当于是解决了SVM的原问题,原问题也只能训练线性SVM。下面我们来把SVM扩展到对偶空间,然后引入核函数,从而思考一下非线性SVM的问题。
4.1 一般的优化问题的对偶空间
首先,我们引入一个一般的优化问题的对偶空间。
对于一个优化问题:
min
f
(
x
)
\min f(x)
minf(x)
使得: { a ( x ) ≥ 0 b ( x ) ≤ 0 c ( x ) = 0 \left\{ {\begin{array}{l} {a(x) \ge 0}\\ {b(x) \le 0}\\ {c(x) = 0} \end{array}}\right. ⎩⎨⎧a(x)≥0b(x)≤0c(x)=0
我们引入一个拉格朗日函数:
L ( x , α ) = f ( x ) − α 1 a ( x ) − α 2 b ( x ) − α 3 c ( x ) 使 得 : { α 1 ≥ 0 α 2 ≤ 0 α 3 无 约 束 \begin{array}{l} L(x,\alpha ) = f(x) - {\alpha _1}a(x) - {\alpha _2}b(x) - {\alpha _3}c(x)\\ \\ 使得:\left\{ {\begin{array}{l} {{\alpha _1} \ge 0}\\ {{\alpha _2} \le 0}\\ {{\alpha _3}}无约束 \end{array}} \right. \end{array} L(x,α)=f(x)−α1a(x)−α2b(x)−α3c(x)使得:⎩⎨⎧α1≥0α2≤0α3无约束
其中 α 1 \alpha _1 α1 与 a ( x ) a(x) a(x) 同号, α 2 \alpha _2 α2 与 b ( x ) b(x) b(x) 同号, 由于 c ( x ) = 0 c(x)=0 c(x)=0,所以 α 3 \alpha _3 α3无约束。
这个拉格朗日函数关于 α \alpha α 求最大,可以把原函数恢复出来,即:
max α L ( x , α ) = { f ( x ) , i f { a ( x ) ≥ 0 b ( x ) ≤ 0 c ( x ) = 0 + ∞ , o t h e r w i s e \mathop {\max }\limits_\alpha L(x,\alpha ) = \left\{ {\begin{array}{l} {f(x),if\left\{ {\begin{array}{l} {a(x) \ge 0}\\ {b(x) \le 0}\\ {c(x) = 0} \end{array}} \right.}\\ { + \infty ,otherwise} \end{array}} \right. αmaxL(x,α)=⎩⎪⎪⎨⎪⎪⎧f(x),if⎩⎨⎧a(x)≥0b(x)≤0c(x)=0+∞,otherwise
显而易见,如果 a ( x ) , b ( x ) , c ( x ) a(x),b(x),c(x) a(x),b(x),c(x)有一个不满足约束条件,最大化拉格朗日函数即变为 + ∞ +\infty +∞【比如,若 a ( x ) < 0 a(x)<0 a(x)<0, L ( x , α ) = f ( x ) − α 1 a ( x ) − α 2 b ( x ) − α 3 c ( x ) L(x,\alpha ) = f(x) - {\alpha _1}a(x) - {\alpha _2}b(x) - {\alpha _3}c(x) L(x,α)=f(x)−α1a(x)−α2b(x)−α3c(x), f ( x ) f(x) f(x)减去一个小于0的数求最大,即 α 1 \alpha_1 α1 越大越好, L ( x , α ) L(x,\alpha) L(x,α)取无穷大】。
下面再来做一个有意思的事情,可以把原问题转换成对偶空间的问题。如下图所示:
- 左边红框可以把原问题恢复出来,然后对其求最小值,显然 + ∞ +\infty +∞不可能是最小,那么等号左边就等价于 m i n f ( x ) min f(x) minf(x);
- 对于一个拉格朗日乘子问题, m i n min min和 m a x max max是可以交换位置的;(PS:注意前提,不是所有优化问题都可以交换位置的)
- 右1边红框是拉格朗日函数关于 x x x求解极小值,就可以将 x x x消掉;然后外面是关于 α \alpha α求极大。
- 所以对偶空间就只有 α \alpha α,没有 x x x了,所以有几个约束条件就有几个 α \alpha α;在SVM中,每个样本是一个约束条件,都对应一个 α \alpha α。
KKT条件
对于对偶问题,达到最优,需要满足几个条件,称为KKT条件:
解释如下:
- 拉格朗日平稳性:拉格朗日函数的最优解,梯度为0;
- 原可行性:原始问题约束满足;
- 对偶可行性:对偶问题约束满足;
- 互补松弛条件:即 m a x L ( x , α ) maxL(x,\alpha) maxL(x,α) 达到最优的时候,三项均要为0;
4.2 SVM 的对偶问题
PS:这里为了方便,不再加向量的箭头,请大家自行理解。
4.2.1 硬间隔的SVM的对偶问题
对于硬间隔的SVM,我们有如下推导之后的式子:
min 1 2 ∣ ∣ w ∣ ∣ 2 1 − y i ( w T x i + b ) ≤ 0 , 其 中 i = 1 , 2 , . . . , n \begin{array}{l} \min \frac{1}{2}||w|{|^2}\\ \\ 1 - {y_i}({w^T}{x_i} + b) \le 0,其中i=1,2,...,n \end{array} min21∣∣w∣∣21−yi(wTxi+b)≤0,其中i=1,2,...,n
拉格朗日方程可以化为:
L = 1 2 w T w + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) ) L = \frac{1}{2}{w^T}w + \sum\nolimits_{i = 1}^n {{\alpha _i}(1 - {y_i}({w^T}{x_i} + b))} L=21wTw+∑i=1nαi(1−yi(wTxi+b)),其中 α i 是 拉 格 朗 日 乘 子 \alpha_i是拉格朗日乘子 αi是拉格朗日乘子,(此处是加号,y因为 1 − y i ( w T x i + b ) ≤ 0 1 - {y_i}({w^T}{x_i} + b) \le 0 1−yi(wTxi+b)≤0,所以 α i ≥ 0 \alpha_i \ge 0 αi≥0)
现在对于拉格朗日函数,令其梯度为0.有:
对于 w w w求偏导: w + ∑ i = 1 n α i ( − y i ) x i = 0 ⇒ w = ∑ i = 1 n α i y i x i w + \sum\nolimits_{i = 1}^n {{\alpha _i}( - {y_i}){x_i} = 0 \Rightarrow } w = \sum\nolimits_{i = 1}^n {{\alpha _i}{y_i}{x_i}} w+∑i=1nαi(−yi)xi=0⇒w=∑i=1nαiyixi, w w w可以由 α \alpha α重构出来。
对于 b b b求偏导: ∑ i = 1 n α i y i = 0 \sum\nolimits_{i = 1}^n {{\alpha _i}{y_i}}=0 ∑i=1nαiyi=0,因为 y i y_i yi是标签(+1和-1), α i ≥ 0 \alpha_i \ge 0 αi≥0,所以这个反映了样本要均衡。
把 w = ∑ i = 1 n α i y i x i w = \sum\nolimits_{i = 1}^n {{\alpha _i}{y_i}{x_i}} w=∑i=1nαiyixi代入构造好的拉格朗日函数 L = 1 2 w T w + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) ) L = \frac{1}{2}{w^T}w + \sum\nolimits_{i = 1}^n {{\alpha _i}(1 - {y_i}({w^T}{x_i} + b))} L=21wTw+∑i=1nαi(1−yi(wTxi+b))中,我们可以得到对偶问题:
max . W ( α ) = ∑ i = 1 n α i − 1 2 ∑ i = 1 , j = 1 n α i α j y i y j x i T x j \max .W(\alpha ) = \sum\nolimits_{i = 1}^n {{\alpha _i} - } \frac{1}{2}\sum\nolimits_{i = 1,j = 1}^n {{\alpha _i}{\alpha _j}{y_i}{y_j}x_i^T{x_j}} max.W(α)=∑i=1nαi−21∑i=1,j=1nαiαjyiyjxiTxj
使得: α i ≥ 0 , ∑ i = 1 n α i y i = 0 {\alpha _i} \ge 0,\sum\limits_{i = 1}^n {{\alpha _i}{y_i}} = 0 αi≥0,i=1∑nαiyi=0
α \alpha α求解出来以后, w w w就求解出来了。
- 可以看到,在对偶问题中,数据 x i x_i xi都是内积出现的,不需要用到其原始特征,因此如果在高维空间中,我们不用找出数据的高维表示,而是直接用内积即可。后面会讲,这是核函数的概念。
- α \alpha α有一个很好的性质,每个样本都有一个 α \alpha α。 α = 0 \alpha=0 α=0的样本全部落在margin之外, α > 0 \alpha>0 α>0的样本就是支撑向量,可以hold up分界面
4.2.1 软间隔的SVM的对偶问题
软间隔的SVM的目标函数是: 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ε i \frac{1}{2}||w|{|^2} + C\sum\nolimits_{i = 1}^n {{\varepsilon _i}} 21∣∣w∣∣2+C∑i=1nεi
具体的优化函数我们在上文介绍过:
写成带有松弛变量的拉格朗日函数如下所示:
L = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 n ε i − ∑ i = 1 n α i ( y i ( w T x i + b ) − 1 + ε i ) − ∑ i = 1 n γ i ε i L = \frac{1}{2}||w|{|^2} + C\sum\nolimits_{i = 1}^n {{\varepsilon _i}} - \sum\nolimits_{i = 1}^n {{\alpha _i}({y_i}({w^T}{x_i} + b) - 1 + {\varepsilon _i}) - \sum\nolimits_{i = 1}^n {{\gamma _i}{\varepsilon _i}} } L=21∣∣w∣∣2+C∑i=1nεi−∑i=1nαi(yi(wTxi+b)−1+εi)−∑i=1nγiεi
其中拉格朗日乘子, α i ≥ 0 , γ i ≥ 0 {\alpha _i} \ge 0,{\gamma _i} \ge 0 αi≥0,γi≥0
然后求梯度可知:
∂ L ∂ w = 0 ⇒ w = ∑ i α i y i x i ∂ L ∂ b = 0 ⇒ ∑ i α i y i = 0 ∂ L ∂ ε i = 0 ⇒ α i + γ i = C ⇒ 0 ≤ α i ≤ C \begin{array}{l} \frac{{\partial L}}{{\partial w}} = 0 \Rightarrow w = \sum\nolimits_i {{\alpha _i}{y_i}{x_i}} \\ \\ \frac{{\partial L}}{{\partial b}} = 0 \Rightarrow \sum\nolimits_i {{\alpha _i}{y_i}} = 0\\ \\ \frac{{\partial L}}{{\partial {\varepsilon _i}}} = 0 \Rightarrow {\alpha _i} + {\gamma _i} = C \Rightarrow 0 \le {\alpha _i} \le C \end{array} ∂w∂L=0⇒w=∑iαiyixi∂b∂L=0⇒∑iαiyi=0∂εi∂L=0⇒αi+γi=C⇒0≤αi≤C
PS:最后一个式子是由于 γ i ≥ 0 {\gamma _i} \ge 0 γi≥0,从而推导出 0 ≤ α i ≤ C 0 \le {\alpha _i} \le C 0≤αi≤C.
将上面式子回代入原来的优化函数中,可以得到松弛的SVM的对偶问题:
max . W ( α ) = ∑ i = 1 n α i − 1 2 ∑ i = 1 , j = 1 n α i α j y i y j x i T x j \max .W(\alpha ) = \sum\nolimits_{i = 1}^n {{\alpha _i} - } \frac{1}{2}\sum\nolimits_{i = 1,j = 1}^n {{\alpha _i}{\alpha _j}{y_i}{y_j}x_i^T{x_j}} max.W(α)=∑i=1nαi−21∑i=1,j=1nαiαjyiyjxiTxj
使得: C ≥ α i ≥ 0 , ∑ i = 1 n α i y i = 0 C \ge {\alpha _i} \ge 0,\sum\limits_{i = 1}^n {{\alpha _i}{y_i}} = 0 C≥αi≥0,i=1∑nαiyi=0
同样, w w w可以由 w = ∑ j = 1 s α t j y t j x t j w=\sum\limits_{j = 1}^s {{\alpha _{t_j}}{y_{t_j}}{x_{t_j}}} w=j=1∑sαtjytjxtj 恢复出来。
[PS:与硬间隔的SVM的对偶问题只有一点不同,硬间隔是 :
α
i
≥
0
{\alpha _i} \ge 0
αi≥0;软间隔是:
C
≥
α
i
≥
0
C \ge {\alpha _i} \ge 0
C≥αi≥0
之所以会有这个
C
C
C,是因为对于分错的样本,Hinge loss无上界,损失会非常大,
α
\alpha
α也会很大,所以要对
α
\alpha
α 加个上界的约束。
C
C
C是一个超参数,是原问题中margin和loss的一个tradeoff;
由此可见,对偶的巧妙之处在于,硬间隔和软间隔的原问题看起来差别很大,但是对偶问题的目标函数确一模一样,只有约束稍有不同。
当优化问题解决的时候,会满足KKT条件,即下面等式每行都能达到最优:
{ α i ( y i f ( x i ) − 1 + ε i ) = 0 ( 1 ) γ i ε i = 0 ( 2 ) α i + γ i = C ⇒ 0 ≤ α i ≤ C ( 3 ) \left\{ {\begin{array}{l} {{\alpha _i}({y_i}f({x_i}) - 1 + {\varepsilon _i}) = 0}(1)\\\\ {{\gamma _i}{\varepsilon _i} = 0}(2)\\\\ {{\alpha _i} + {\gamma _i} = C \Rightarrow 0 \le {\alpha _i} \le C(3)} \end{array}} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧αi(yif(xi)−1+εi)=0(1)γiεi=0(2)αi+γi=C⇒0≤αi≤C(3)
根据上述式子,我们可知:
- 由KKT条件(3),若 α i = 0 \alpha_i=0 αi=0,则 γ i = C \gamma_i =C γi=C,条件(2)得: ε = 0 \varepsilon =0 ε=0,又因为条件(1), y i f ( x i ) − 1 + ε i {y_i}f({x_i}) - 1 + {\varepsilon _i} yif(xi)−1+εi 可以取任意值,同时要满足 y i f ( x i ) − 1 + ε i ≥ 0 {y_i}f({x_i}) - 1 + {\varepsilon _i} \ge 0 yif(xi)−1+εi≥0,所以 y i f ( x i ) ≥ 1 {y_i}f({x_i}) \ge 1 yif(xi)≥1,那么这个样本一定在边界之外;
- 若 0 < α i < C 0 < {\alpha _i} < C 0<αi<C,则 γ i > 0 \gamma _i>0 γi>0,可推出 ε = 0 \varepsilon =0 ε=0,又因为条件(1), y i f ( x i ) − 1 + ε i = 0 {y_i}f({x_i}) - 1 + {\varepsilon _i} = 0 yif(xi)−1+εi=0,那么 y i f ( x i ) = 1 {y_i}f({x_i}) =1 yif(xi)=1,那么这个样本一定在边界上;
- 若 α i = C {\alpha _i} = C αi=C,可以推出 ε \varepsilon ε 可取任意值,同时要满足 ε ≥ 0 \varepsilon \ge 0 ε≥0,那么 y i f ( x i ) ≤ 1 {y_i}f({x_i}) \le 1 yif(xi)≤1,那么这个样本一定在边界之内。
那么,由此可以推出结论:
{ α i = 0 ⇒ y i f ( x i ) ≥ 1 ⇒ 样 本 在 边 界 之 外 0 < α i < C ⇒ y i f ( x i ) = 1 ⇒ 样 本 在 边 界 上 α i = C ⇒ y i f ( x i ) ≤ 1 ⇒ 样 本 在 边 界 内 \left\{ {\begin{array}{l} {{\alpha _i} = 0 \Rightarrow {y_i}f({x_i}) \ge 1 \Rightarrow 样本在边界之外 }\\\\ {0 < {\alpha _i} < C \Rightarrow {y_i}f({x_i}) = 1 \Rightarrow 样本在边界上 }\\\\ {{\alpha _i} = C \Rightarrow {y_i}f({x_i}) \le 1 \Rightarrow 样本在边界内} \end{array}} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧αi=0⇒yif(xi)≥1⇒样本在边界之外0<αi<C⇒yif(xi)=1⇒样本在边界上αi=C⇒yif(xi)≤1⇒样本在边界内
实验结果如下所示:
无论是硬间隔SVM还是软间隔SVM,到此为止,我们也只讲了其中的参数
w
w
w 是如何重构出来的,下面,来看看
b
b
b 如何重构的。
已知:
-
0 < α i < C ⇒ y i f ( x i ) = 1 0 < {\alpha _i} < C \Rightarrow {y_i}f({x_i}) = 1 0<αi<C⇒yif(xi)=1
-
原函数 f ( z ) = w z + b f(z)=wz+b f(z)=wz+b 可以表示成 f ( z ) = ∑ j = 1 s α j y j x j T z + b f(z) = \sum\nolimits_{j = 1}^s {{\alpha _j}{y_j}x_j^T} z + b f(z)=∑j=1sαjyjxjTz+b
当我们求解出 α i \alpha_i αi 以后,任取一个满足 0 < α i < C 0 < {\alpha _i} < C 0<αi<C 的 α i \alpha_i αi(对应的 x i , y i x_i,y_i xi,yi也已知),可以求得:
b = y i − ∑ j = 1 s α j y j x j T x i b=y_i-\sum\nolimits_{j = 1}^s {{\alpha _j}{y_j}x_j^T} x_i b=yi−∑j=1sαjyjxjTxi
另外,也可以这么求解 b b b 已达到均衡;
b = 1 − 1 ∣ i : 0 < α i < C ∣ ( ∑ i : 0 < α i < C ∑ j = 1 s α j y j x j T x i ) b = 1 - \frac{1}{{|i:0 < {\alpha _i} < C|}}\left( {\sum\limits_{i:0 < {\alpha _i} < C} {\sum\limits_{j = 1}^s {{\alpha _j}{y_j}x_j^T{x_i}} } } \right) b=1−∣i:0<αi<C∣1(i:0<αi<C∑j=1∑sαjyjxjTxi)
由上面可知, b b b 也是由 原数据的内积形式标识的,也没有用到原数据的特征。
总而言之,我们是通过对偶问题解 α \alpha α ,通过 α \alpha α 去重构 w w w 和 b b b,但是我们的目的不是重构 w w w 和 b b b。在我们使用SVM的时候,我们往往会忽略 w w w 和 b b b,只用 α \alpha α 。你会发现,不管是 w w w 还是 b b b,都是用数据的内积表示的,那么就此我们就可以对数据做升维了。这就引入了核方法。
五、核方法
对非线性的数据来说,上面讲的线性SVM方法就不可用了,所以要找到一种转换方法——核方法,将线性不可分的数据转换到高维空间使其线性可分,那么这个转换函数——核函数的求解又是如何来的呢?
转换的基本思想是:原始输入的特征空间总是能够被映射到一个线性可分的高维特征空间中;如下图:
上图表明,在二维空间是一个非线性分类器,在三维空间可以用一个平面来线性分开。
因此,目前所说的SVM一直都是一个线性分类器,那么对于非线性的特征数据,只需要将其映射到一个线性可分的高维空间中,然后使用线性SVM求解。
5.1 什么是核函数
回忆上节中的对偶问题:
数据是以内积形式出现,因此我们不需要显式升维。
引入核函数 K K K,使得: K ( x i , x j ) = Φ ( x i ) ⋅ Φ ( x j ) K({x_i},{x_j}) = \Phi ({x_i}) \cdot \Phi ({x_j}) K(xi,xj)=Φ(xi)⋅Φ(xj),其中 Φ \Phi Φ 是升维函数;在实际求解过程中,忽略掉升维,直接定义核为:两个样本在高维空间的内积(核函数 K K K)。
举个例子:有一个从二维空间映射到六维空间的映射函数
Φ
\Phi
Φ ,映射规则如下:
那么高维空间的内积,即核函数的定义如下:
即:升维函数
Φ
(
⋅
)
Φ
(
⋅
)
\Phi(·)\Phi(·)
Φ(⋅)Φ(⋅) 的内积可以直接被核函数
K
K
K 计算得来,而不需要进行显式地升维。
一些核函数的举例
- 多项式核:
K
(
x
,
y
)
=
(
x
T
y
+
1
)
d
K(x,y)=(x^Ty+1)^d
K(x,y)=(xTy+1)d
d=1,线性SVM
d=2,二阶多项式核,分界面复杂
d越大越复杂,模型VC维越高 - 高斯核(RBF核):
K
(
x
,
y
)
=
e
x
p
(
−
∣
∣
x
−
y
∣
∣
2
/
(
2
σ
2
)
)
K(x,y)=exp(-||x-y||^2/(2\sigma^2))
K(x,y)=exp(−∣∣x−y∣∣2/(2σ2))
σ \sigma σ越大说明模型越简单;高斯函数方差越大越平滑; - Sigmoid核函数: K ( x , y ) = t a n h ( k x T y + θ ) K(x,y)=tanh(kx^Ty+\theta) K(x,y)=tanh(kxTy+θ)
- 等等
所以一旦核函数定义好以后,就可以把我们的SVM中的内积换成核函数了,并且核函数就控制了模型复杂度。
5.2 训练一个带有和函数的SVM
只需要把SVM中的内积换成核函数即可。
对于训练:
标准对偶问题的优化目标:
max . W ( α ) = ∑ i = 1 n α i − 1 2 ∑ i = 1 , j = 1 n α i α j y i y j x i T x j \max .W(\alpha ) = \sum\nolimits_{i = 1}^n {{\alpha _i} - } \frac{1}{2}\sum\nolimits_{i = 1,j = 1}^n {{\alpha _i}{\alpha _j}{y_i}{y_j}x_i^T{x_j}} max.W(α)=∑i=1nαi−21∑i=1,j=1nαiαjyiyjxiTxj
使得: C ≥ α i ≥ 0 , ∑ i = 1 n α i y i = 0 C \ge {\alpha _i} \ge 0,\sum\limits_{i = 1}^n {{\alpha _i}{y_i}} = 0 C≥αi≥0,i=1∑nαiyi=0
那么内积换成核函数后:
max
.
W
(
α
)
=
∑
i
=
1
n
α
i
−
1
2
∑
i
=
1
,
j
=
1
n
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
\max .W(\alpha ) = \sum\nolimits_{i = 1}^n {{\alpha _i} - } \frac{1}{2}\sum\nolimits_{i = 1,j = 1}^n {{\alpha _i}{\alpha _j}{y_i}{y_j}K(x_i,{x_j})}
max.W(α)=∑i=1nαi−21∑i=1,j=1nαiαjyiyjK(xi,xj)
使得: C ≥ α i ≥ 0 , ∑ i = 1 n α i y i = 0 C \ge {\alpha _i} \ge 0,\sum\limits_{i = 1}^n {{\alpha _i}{y_i}} = 0 C≥αi≥0,i=1∑nαiyi=0
解完以后,每个样本有一个 α \alpha α ;测试阶段我们怎么分类呢?
对于测试
对于标准对偶问题:
w = ∑ j = 1 s α t j y t j x t j w = \sum\nolimits_{j = 1}^s {{\alpha _{t_j}}{y_{t_j}}{x_{t_j}}} w=∑j=1sαtjytjxtj
f = w T z + b = ∑ j = 1 s α t j y t j x t j T z + b f=w^Tz+b=\sum\nolimits_{j = 1}^s {{\alpha _{t_j}}{y_{t_j}}{x_{t_j}^T}}z+b f=wTz+b=∑j=1sαtjytjxtjTz+b
那么内积 x t j T z {x_{t_j}^T}z xtjTz 换成核函数后:
w = ∑ j = 1 s α t j y t j Φ ( x t j ) w = \sum\nolimits_{j = 1}^s {{\alpha _{t_j}}{y_{t_j}}\Phi({x_{t_j}})} w=∑j=1sαtjytjΦ(xtj)
f = < w , Φ ( z ) > + b = ∑ j = 1 s α t j y t j K ( x t j , z ) + b f=<w,\Phi(z)>+b=\sum\nolimits_{j = 1}^s {{\alpha _{t_j}}{y_{t_j}}K({x_{t_j}},}z)+b f=<w,Φ(z)>+b=∑j=1sαtjytjK(xtj,z)+b
对于偏置 b b b,
对于标准对偶问题:
b = 1 − 1 ∣ i : 0 < α i < C ∣ ( ∑ i : 0 < α i < C ∑ j = 1 s α j y j x j T x i ) b = 1 - \frac{1}{{|i:0 < {\alpha _i} < C|}}\left( {\sum\limits_{i:0 < {\alpha _i} < C} {\sum\limits_{j = 1}^s {{\alpha _j}{y_j}x_j^T{x_i}} } } \right) b=1−∣i:0<αi<C∣1(i:0<αi<C∑j=1∑sαjyjxjTxi)
那么内积 换成 核函数后:
b = 1 − 1 ∣ i : 0 < α i < C ∣ ( ∑ i : 0 < α i < C ∑ j = 1 s α j y j K ( x j , x i ) ) b = 1 - \frac{1}{{|i:0 < {\alpha _i} < C|}}\left( {\sum\limits_{i:0 < {\alpha _i} < C} {\sum\limits_{j = 1}^s {{\alpha _j}{y_j}K(x_j,{x_i})} } } \right) b=1−∣i:0<αi<C∣1(i:0<αi<C∑j=1∑sαjyjK(xj,xi))
总之,用了核函数以后,就不要重构 w w w 了(重构不出),因为 x x x代表的是高维的 x x x,升维函数是未知的。
5.3 例子
假设有五个一维数据点:
- x 1 = 1 , x 2 = 2 , x 3 = 4 , x 4 = 5 , x 5 = 6 x_1=1, x_2=2, x_3=4, x_4=5, x_5=6 x1=1,x2=2,x3=4,x4=5,x5=6,其中, x 1 , x 2 , x 5 x_1, x_2, x_5 x1,x2,x5作为类别1, x 3 , x 4 x_3,x_4 x3,x4作为类别2; ⇒ \Rightarrow ⇒ y 1 = 1 , y 2 = 1 , y 4 = − 1 , y 5 = − 1 , y 6 = 1 y_1=1, y_2=1, y_4=-1, y_5=-1, y_6=1 y1=1,y2=1,y4=−1,y5=−1,y6=1
- 使用度为
2
2
2 的多项式核:
K ( x , y ) = ( x y + 1 ) 2 K(x,y)=(xy+1)^2 K(x,y)=(xy+1)2
C被设置为100 - 首先解出
α
i
\alpha_i
αi(
i
=
1
,
.
.
.
,
5
i=1,...,5
i=1,...,5),使用:
max . ∑ i = 1 5 α i − 1 2 ∑ i = 1 , j = 1 5 α i α j y i y j ( x i x j + 1 ) 2 \max . \sum\nolimits_{i = 1}^5 {{\alpha _i} - } \frac{1}{2}\sum\nolimits_{i = 1,j = 1}^5 {{\alpha _i}{\alpha _j}{y_i}{y_j}(x_i{x_j}+1)^2} max.∑i=15αi−21∑i=1,j=15αiαjyiyj(xixj+1)2
使得: 100 ≥ α i ≥ 0 , ∑ i = 1 5 α i y i = 0 100 \ge {\alpha _i} \ge 0,\sum\limits_{i = 1}^5 {{\alpha _i}{y_i}} = 0 100≥αi≥0,i=1∑5αiyi=0 - 通过使用QP解法,得到:
α
1
=
0
,
α
2
=
2.5
,
α
3
=
0
,
α
4
=
7.333
,
α
5
=
4.833
\alpha_1=0,\alpha_2=2.5,\alpha_3=0,\alpha_4=7.333,\alpha_5=4.833
α1=0,α2=2.5,α3=0,α4=7.333,α5=4.833
== 确保满足限制
== 支撑向量是: { x 2 = 2 , x 4 = 5 , x 5 = 6 } \{x_2=2,x_4=5,x_5=6\} {x2=2,x4=5,x5=6} - 判别函数是: f ( y ) = 2.5 ( 1 ) ( 2 y + 1 ) 2 + 7.333 ( − 1 ) ( 5 y + 1 ) 2 + 4.833 ( 1 ) ( 6 y + 1 ) 2 + b = 0.6667 y 2 − 5.333 y + b f(y)=2.5(1)(2y+1)^2+7.333(-1)(5y+1)^2+4.833(1)(6y+1)^2+b=0.6667y^2-5.333y+b f(y)=2.5(1)(2y+1)2+7.333(−1)(5y+1)2+4.833(1)(6y+1)2+b=0.6667y2−5.333y+b
- 通过解: f ( 2 ) = 1 , f ( 5 ) = − 1 , f ( 6 ) = 1 f(2)=1,f(5)=-1,f(6)=1 f(2)=1,f(5)=−1,f(6)=1, y i ( w T Φ ( z ) + b ) = 1 y_i(w^T\Phi(z)+b)=1 yi(wTΦ(z)+b)=1,得出: b = 9 b=9 b=9
- 最终判别函数是: f ( y ) = 0.6667 y 2 − 5.333 y + 9 f(y)=0.6667y^2-5.333y+9 f(y)=0.6667y2−5.333y+9
5.4 如何去选一个核函数?
- 核函数可谓是svm中最重要的部分
- 许多核函数已经被提出,详见上述(多项式核、RBF核……)
- 多核学习:多个核函数进行训练得到加权结果
- 实际中,低度的多项式核和RBF核比较好
- 注意:带有RBF核的SVM与RBF网络很接近,SVM中的径向基函数中心是自动选择的。
5.5 核思想应用到逻辑回归
逻辑回归和SVM的唯一区别就是损失函数不一样,SVM是Hinge loss
,而逻辑回归是:Sigmoid
。(0-1损失可以用sigmoid或者hinge loss去逼近)
逻辑回归的损失函数公式化:
那么如何引入核化的逻辑回归(Kernelize Logistic Regression)?
有兴趣的大家可以自行了解。
六、总结
6.1 SVM的步骤
- 准备数据 { ( x i , y i ) } \{(x_i,y_i)\} {(xi,yi)}
- 选择一个核函数
- 选择错误超参数 C C C
- 训练SVM (找到所有的 α i \alpha_i αi和 b b b)
- 使用 α i \alpha_i αi 和支撑向量 可以把新数据分类出来
6.2 SVM 的缺点
- 训练、测试很慢(受限的QP):在很多情况下,80%都会成为支撑向量,因此,有一种叫做稀疏SVM,有空会在下面做介绍;
- 只是一个二分类分类器(有空会在介绍如何扩展到多分类)
- 这个SVM 对噪声非常敏感,噪声100%会成为支撑向量(有空会在介绍如何改良)
- 核函数的选择
6.3 SVM 的优点
- 训练相对简单,不需要处理人工神经网络中的局部最小,SVM的结果是全局最优并且唯一的
- 不像ANN,SVM没有维数灾难;因为对偶空间求解的是 α \alpha α,与样本相关的,和维数没有关系,甚至可以解决无穷维
- 大间隔分类器不容易过拟合
- 几何解释好理解
七、参考
- http://www.blogjava.net/zhenandaci/category/31868.html
- 国科大模式识别2019-SVM讲稿