SVM入门,有它就够了!看它!!
这篇文章很长,大家做好心理准备,小编花了两三天去整理,尽可能以一种清晰易懂的逻辑给大家呈现出SVM的真实面目!如果你可以静下心来辩证地去看,小编认为你一定会对SVM有一个清晰的认知,绝对会有一种拨开云雾见青天的感觉!加油吧,少年~
SVM入门,有它就够了!看它!!
支持向量机在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力[14](或称泛化能力)。
首先了解一下什么是线性函数:在一维空间里就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面……如果不关注空间的维数,这种线性函数还有一个统一的名称——超平面。
线性分类器就是使用线性函数就能将样本进行区分的一种模型。
用一个二维空间里仅有两类样本的分类问题来举个小例子。如图所示:
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有几点说明:
实际上很容易看出来,中间那条分界线并不是唯一的,我们把它稍微旋转一下,只要不把两类数据分错,仍然可以达到上面说的效果,稍微平移一下,也可以。此时就牵涉到一个问题,对同一个问题存在多个分类函数的时候,哪一个函数更好呢?显然必须要先找一个指标来量化“好”的程度,通常使用的都是叫做“分类间隔”的指标。
对于文本分类这样的不适定问题(有一个以上解的问题称为不适定问题),需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
在进行文本分类的时候,我们可以让计算机这样来看待我们提供给它的训练样本,每一个样本由一个向量(就是那些文本特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成。如下:
D i = ( x i → , y i ) {D_i} = (\overrightarrow {{x_i}} ,{y_i}) Di=(xi,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是样本个数
第二节中介绍的从分类间隔上解释为什么要最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣,个人认为这种解释有逻辑的欠缺,比如,在等式中函数 g ( x ) g(x) g(x)中也含有 w w w变量,为什么最大化几何间隔就是最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣呢?等等
所以接下来,我们从数学角度解释一下为什么最小化 ∣ ∣ w ∣ ∣ ||w|| ∣∣w∣∣会成为我们的优化目标。
首先,描述一下SVM的优点:
由第一小节可知: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是样本个数
二次规划(Quadratic Programming,QP)
我们先来看看什么是二次规划:
在这个问题中,自变量就是 u → \overrightarrow u u,而目标函数是 u → \overrightarrow u u的二次函数,所有的约束条件都是 u → \overrightarrow u u的线性函数。
线性SVM的二次规划转换
对于线性SVM,该问题可以化成以上的二次规划的形式:
那么如何去求解这个问题呢?
我们可以轻松的解一个不带任何约束的优化问题(实际上就是函数求极值,求导再找0点),我们甚至还会解一个只带等式约束的优化问题,(求条件极值,通过添加拉格朗日乘子,构造拉格朗日函数,来把这个问题转化为无约束的优化问题……构造出的拉格朗日函数就是转化之后的问题形式,它显然没有带任何条件)
如果只带等式约束的问题可以转化为无约束的问题而得以求解,那么可不可以把带不等式约束的问题向只带等式约束的问题转化一下而得以求解呢?
关于QP问题的求解在此不作赘述,大家有兴趣可以查阅资料。
以上介绍的是Hard Margin SVM,下面来看看Soft Margin SVM的情形。
比如下图,对于二分类问题,存在噪声数据点,使得其线性不可分的时候,要采取什么办法呢?
由于我们原本的优化问题的表达式中,确实要考虑所有的样本点(不能忽略某一个),在此基础上寻找正负类之间的最大几何间隔,而几何间隔本身代表的是距离,是非负的,像上面这种有噪声的情况会使得整个问题无解。这种解法其实就叫做“硬间隔”分类法,即Hard Margin SVM,因为他硬性的要求所有样本点都满足和分类平面间的距离必须大于某个值。
因此由上面的例子中也可以看出,硬间隔的分类法其结果容易受少数点的控制,这是很危险的。
解决方法也很明显,就是仿照人的思路,允许一些点到分类平面的距离不满足原先的要求。这就引入了“Soft Margin SVM”。即给这个硬性的阈值加一个松弛变量。Soft-margin SVM原理就是让SVM能够容忍一定的噪声数据,以减少过拟合的风险。下面我们来详细说说。
先看一下上面的相同数据集中的两个模型,左图中的模型能够容忍数据中存在一定噪声,而且在数据集上表示还可以;右图就是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:
到此为止,这个SVM仍然是一个QP问题,仍然可以以QP问题的形式来求解。
上面有讲到引入了一个松弛变量,并且最小化松弛变量,相当于引入了一个损失函数。
解释:如果 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的简介就结束了,上面这么复杂的东西其实可以用一个式子表达出来:
以上内容相当于是解决了SVM的原问题,原问题也只能训练线性SVM。下面我们来把SVM扩展到对偶空间,然后引入核函数,从而思考一下非线性SVM的问题。
首先,我们引入一个一般的优化问题的对偶空间。
对于一个优化问题:
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,α)取无穷大】。
下面再来做一个有意思的事情,可以把原问题转换成对偶空间的问题。如下图所示:
KKT条件
对于对偶问题,达到最优,需要满足几个条件,称为KKT条件:
解释如下:
PS:这里为了方便,不再加向量的箭头,请大家自行理解。
对于硬间隔的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就求解出来了。
软间隔的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)
根据上述式子,我们可知:
那么,由此可以推出结论:
{ α 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求解。
回忆上节中的对偶问题:
数据是以内积形式出现,因此我们不需要显式升维。
引入核函数 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 计算得来,而不需要进行显式地升维。
一些核函数的举例
所以一旦核函数定义好以后,就可以把我们的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=
对于偏置 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,升维函数是未知的。
假设有五个一维数据点:
逻辑回归和SVM的唯一区别就是损失函数不一样,SVM是Hinge loss
,而逻辑回归是:Sigmoid
。(0-1损失可以用sigmoid或者hinge loss去逼近)
逻辑回归的损失函数公式化:
那么如何引入核化的逻辑回归(Kernelize Logistic Regression)?
有兴趣的大家可以自行了解。