参考:http://blog.csdn.net/ajianyingxiaoqinghan/article/details/72897399 部分图片来自于上面博客。
0 由来 在二分类问题中,咱们能够计算数据代入模型后获得的结果,若是这个结果有明显的区别,这就说明模型能够把数据分开。那么,怎么表示“区别”这个词呢,拿最简单的二维问题来说,“区别”能够是数据点分布在一条直线的两侧,而数据点代入方程后获得的结果符号是不一样的,这就达到了分类的目的。 而SVM的思想也是这样,目的就是找到一个超平面,将数据点都正确地分在超平面的两侧。那么,又怎么表示这个“都正确”呢?能够这样考虑:就是让那些“颇有可能不正确”的数据点彼此分开得明显一点就能够了。对于其它“不那么可能不正确”或者说“一看就很正确”的数据点,就能够不用管了。这也是SVM名称的由来,模型是由那些支持向量(Support Vector)决定的。这也是为何SVM对outlier不敏感。
1 间隔 遵循上面的逻辑,咱们去假设空间里找模型了。可是一会儿出来好多个模型都符合咱们的要求,怎么办?天然咱们想要找到“最优”的那一个模型。那么,怎么衡量这个“最优”呢?根据【超平面】【数据点】【分开】这几个词,咱们能够想到最优的模型必然是最大程度地将数据点划分开的模型,不能靠近负样本也不能靠近正样本,要不偏不倚,而且与全部Support Vector的距离尽可能大才能够。这就引出了间隔的讨论。
上图中
x 0
是
x
在超平面上的投影,
ω
是超平面的法向量,两者平行能够获得:web
x − x 0 = γ ω ∥ ω ∥ (1.1)
两边同乘
ω T
并利用
ω T x 0 + b = 0 , ω T ω = ∥ ω ∥ 2
获得:
γ = ω T + b ∥ ω ∥ = f ( x ) ∥ ω ∥ (1.2)
固然,上式是带正负号的,若是要获得正值,即点到超平面的距离,乘上数据点的类别就好:
γ ~ = y γ (1.3)
2 最大间隔分类器 上面咱们推导出了间隔的表达式,天然的,咱们想让数据点离超平面越远越好。
回顾一下,在这样的模型中,咱们只考虑那些支持向量就能够了,对于那些显然能够分类成功的数据点,咱们顺带着讨论它们就能够。 不妨令那些“有可能分类不成功的点”,即靠近超平面的点,分布在超平面
ω T x + b = ± 1
上,这里的取值 1 只是为了方便推导,后面咱们能够看到,这个值不影响最后的优化过程。 这样,支持向量到达咱们要优化的超平面
ω T x + b = 0
的距离就是
1 ∥ ω ∥
,两侧的距离加起来就是
2 ∥ ω ∥
,同时,咱们要求模型对正负样本要作到“不偏不倚”,对于这一条,咱们加上限制条件
y ( ω T + b ) ⩾ 1
就好。因而咱们获得了不等式约束优化问题:算法
⎧ ⎩ ⎨ ⎪ ⎪ max 2 ∥ ω ∥ s . t . y i ( ω T x i + b ) ⩾ 1 , i = 1 , 2 , . . . , m (2.1)
为了方便推导,上式能够等价地写成:
⎧ ⎩ ⎨ min 1 2 ∥ ω ∥ 2 s . t . y i ( ω T x i + b ) ⩾ 1 , i = 1 , 2 , . . . , m (2.2)
3 拉格朗日乘子法对偶问题
(2.2) 的优化目标是二次的,约束是线性的,总体是一个凸二次规划问题。有现成的优化包能够求解。但将其转化为拉格朗日对偶问题后求解更容易,也方便咱们后面引入核函数。app
对式 (2.2) 的每个不等式约束条件(m个数据点共有m个不等式)设置对应的拉格朗日乘子
α i > 0
,获得原始问题 的拉格朗日函数:svg
L ( ω , b , α ) = 1 2 ∥ ω ∥ 2 + ∑ i = 1 m α i [ 1 − y i ( ω T x i + b ) ] (3.1)
目标是让拉格朗如函数
L ( ω , b , α )
针对
α
达到最大值。为何可以这么写呢,咱们能够这样想,哪怕有一个
y i ( ω T x i + b ) ⩾ 1
不知足,只要让对应的
α i
是正无穷就行了。因此,若是
L ( ω , b , α )
有有限的最大值,那么那些不等式条件是天然知足的。 以后,咱们再让
L ( ω , b , α )
针对
ω , b
达到最小值,就能够了。 从而,咱们的目标函数变成:
min ω , b max α L ( ω , b , α ) = p ∗ (3.2)
为方便求解,咱们将 min 和 max 的位置交换一下:
max α min ω , b L ( ω , b , α ) = d ∗ (3.3)
能够证实,
d ∗ ⩽ p ∗
,能够经过求解
d ∗
而近似求解
p ∗
。(3.3)即为原始问题的对偶问题。 因为原始优化问题中有不等式条件,这里的对偶问题须要知足下面形式的KKT条件才能有解:
⎧ ⎩ ⎨ ⎪ ⎪ α i ⩾ 0 y i ( ω T x i + b ) − 1 ⩾ 0 α i [ y i ( ω T x i + b ) − 1 ] = 0 (3.4)
这里知道到咱们到目前为止的推导是须要知足KKT条件的就行了。函数
下面咱们看一下具体怎样求解对偶问题 (3.3) :优化
3.1
ω , b
的部分
咱们先看一下
min ω , b
的部分。分别令
L ( ω , b , α )
对
ω , b
的导数等于0:atom
∂ L ( ω , b , α ) ∂ ω = ω − ∑ i = 1 m α i y i x i = 0 (3.5)
∂ L ( ω , b , α ) ∂ b = ∑ i = 1 m α i y i = 0 (3.6)
将(3.5)(3.6)代入(3.1):
L ( ω , b , α ) = 1 2 ∥ ω ∥ 2 + ∑ i = 1 m α i [ 1 − y i ( ω T x i + b ) ] = 1 2 ∥ ∥ ∥ ∑ i = 1 m α i y i x i ∥ ∥ ∥ 2 + ∑ i = 1 m α i − ω T ∑ i = 1 m α i y i x i = ∑ i = 1 m α i + 1 2 ω T ∑ i = 1 m α i y i x i − ω T ∑ i = 1 m α i y i x i = ∑ i = 1 m α i − ( ∑ i = 1 m α i y i x T i ) ( ∑ i = 1 m α i y i x i ) = ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α i α j y i y j x T i x j (3.7)
问题就变为了:
⎧ ⎩ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ max α s . t . ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α i α j y i y j x T i x j ∑ i = 1 m α i y i = 0 α i ⩾ 0 (3.8)
3.2
α
的部分
获得(3.8)以后怎么求解呢?不难发现这是一个二次规划问题。,但若是样本数过多,则计算量过大。SMO 是高效求解这个问题的算法表明。spa
咱们选取两个变量
α i , α j
,(3.8)中的其它变量保持固定。获得:.net
α i y i + α j y j = − ∑ k ≠ i , j m α k y k = c (3.9)
能够将
α j
消掉,只保留
α i
,(3.8)就变成了关于
α i
的单变量二次规划问题,约束是
α i ⩾ 0
,有**闭式解**。这样算起来确定快。 那么,怎样找这两个变量
α i , α j
比较好呢?第一个变量
α i
咱们确定选取那个最不知足KKT条件的
α
,第二个咱们须要选让目标函数增加得最多的
α
,但每次计算太过麻烦。因此有一个启发式的方法:咱们选取那个与
α i
所对应的样本间隔最大的样本所对应的
α
做为
α j
。这样与更新两个类似的样本相比,目标函数值变化更大。这里的具体推导能够参考 http://blog.csdn.net/ajianyingxiaoqinghan/article/details/73087304 。具体来讲,咱们能够用**预测值与真实值之差**来衡量这个“样本间的差别”,若是
α i
对应的样本预测值与真实值之差为负的,那么咱们就尽可能找一个差值为正的且绝对值较大的,反之咱们就找一个差值为负的且绝对值较大的。在几何上能够理解为找那些暂时被分类错误的样本。 固然,若是获得的
α j
不能使函数值降低不少,那么咱们还能够干脆就暴力找一个让函数值降低最多的
α j
,或者再找一个不符合KKT条件的
α j
当作第二个
α
。 求解出
α n e w i
α n e w j
以后,由KKT条件(3.4)可得,若
α n e w i > 0
,则:
y i ( ∑ i = 1 m α i y i x i + b ) = 1 (3.10)
就能够对 b 进行更新,更新以后将预测值与真实值之差的列表更新一遍,以供下次循环使用。 固然,若是
α n e w j > 0
,也能够计算出相应的 b 值,若是两个 b 值相等就取该值。 若是不相等就取平均值。 还有一种作法就是,对目前模型中全部的
α > 0
,都计算一个 b ,取平均值。 等到算法中止,b 也计算好了,
ω
由(3.5)式得:
ω = ∑ i = 1 m α i y i x i (3.11)
这样,原始优化问题就解完了。xml
4 核函数
在前面的讨论中,咱们假设数据集是线性可分的。可是现实任务中,可能并不存在一个超平面将数据集完美得分开。 这种状况下,咱们能够经过将原始空间映射到一个高维空间,若是高维空间中数据集是线性可分的,那么问题就能够解决了。 这样,超平面变为:
ω T ϕ ( x ) + b = 0 (4.1)
通过像前面的一顿推导以后咱们获得:
⎧ ⎩ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ max α s . t . ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α i α j y i y j ϕ ( x i ) T ϕ ( x j ) ∑ i = 1 m α i y i = 0 α i ⩾ 0 (4.2)
可见,须要计算
ϕ ( x i ) T ϕ ( x j )
,但不少时候,咱们并不知道高维空间是什么样子,也就是咱们根本连
ϕ ( x )
是什么样子都不知道,更不要说若是高维空间维数很大,
ϕ ( x i ) T ϕ ( x j )
计算十分困难。 其实
ϕ ( x i ) T ϕ ( x j )
只是一个实数,若是将它们当作一个总体,它也是关于
x i , x j
的一个函数,因此,
若是存在那么一个神奇的函数
κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j )
,咱们就能够在低维空间计算出高维空间的点积结果。这个函数
κ ( x i , x j )
就叫作**核函数**。 经常使用的核函数有:
名称
表达式
参数
线型核
κ ( x i , x j ) = x T i x j
多项式核
κ ( x i , x j ) = ( x T i x j ) d
d ⩾ 1
为多项式次数
高斯核
κ ( x i , x j ) = exp ( − ∥ x i − x j ∥ 2 2 σ 2 )
σ > 0
为高斯核的带宽
拉普拉斯核
κ ( x i , x j ) = exp ( − ∥ x i − x j ∥ σ )
σ > 0
Sigmoid核
κ ( x i , x j ) = tanh ( β x T i x j + θ )
β > 0 , θ < 0 tanh
为双曲正切函数
5 松弛变量 现实任务中,可能用上核函数仍是不能线性可分。或者即便找到线性可分的超平面,也不能判断是否是过拟合。所以,咱们将标准放宽一些,容许SVM模型在某些数据点上“出错”,为此,要引入“软间隔”:
前面的推导咱们要求
y i ( ω T x i + b ) ⩾ 1
,如今,咱们将条件放宽:
y i ( ω T x i + b ) ⩾ 1 − ξ i , i = 1 , 2 , . . . , m (5.1)
但同时,咱们但愿这个
ξ i
尽量小一点,越小不就越接近前面推导的线性可分么。在目标函数中体现这一点,就获得新的优化问题(对比2.2式):
⎧ ⎩ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ min s . t . 1 2 ∥ ω ∥ 2 + C ∑ i = 1 m ξ i y i ( ω T x i + b ) ⩾ 1 , i = 1 , 2 , . . . , m ξ i > 0 (5.2)
C是衡量咱们“放宽力度”的常数。 与前面的推导相似,咱们获得新的拉格朗日函数:
L ( ω , b , ξ , α , μ ) = 1 2 ∥ ω ∥ 2 + C ∑ i = 1 m ξ i + ∑ i = 1 m α i [ 1 − ξ i − y i ( ω T x i + b ) ] − ∑ i = 1 m μ i ξ i (5.3)
分别令
L ( ω , b , ξ , α , μ )
对
ω , b , ξ i
的导数等于0:
∂ L ( ω , b , ξ , α , μ ) ∂ ω = ω − ∑ i = 1 m α i y i x i = 0 (5.4)
∂ L ( ω , b , ξ , α , μ ) ∂ b = ∑ i = 1 m α i y i = 0 (5.5)
∂ L ( ω , b , ξ , α , μ ) ∂ ξ i = C − α i − μ i = 0 (5.6)
将(5.4)(5.5)(5.6)代入(5.3)获得对偶问题:
⎧ ⎩ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ max α s . t . ∑ i = 1 m α i − ∑ i = 1 m ∑ j = 1 m α i α j y i y j x T i x j ∑ i = 1 m α i y i = 0 0 ⩽ α i ⩽ C (5.7)
KKT条件:
⎧ ⎩ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ α i ⩾ 0 , μ i ⩾ 0 y i ( ω T x i + b ) − 1 + ξ i ⩾ 0 α i [ y i ( ω T x i + b ) − 1 + ξ i ] = 0 ξ i ⩾ 0 , μ i ξ i = 0 (5.8)
根据这些条件,用SMO算法求解就能够了,只是在求解相关变量的时候注意有新的范围限制。
从另外一个角度观察(5.2),咱们能够把
1 2 ∥ ω ∥ 2
当作是一个正则化项 ,也就是结构风险,描述了咱们但愿模型具备某些性质,也就是引入了先验知识。
C ∑ m i = 1 ξ i
项是经验风险,用于描述模型与训练集的契合程度,能够把
ξ i
写成一个更通常的形式:
l ( f ( x i ) , y i )
,上面推导的模型咱们能够认为
l
是 hinge损失 :
l ( f ( x i ) , y i ) = m a x ( 0 , 1 − y i f ( x i ) )
。 从这里也能够看出,引入先验知识,能够减少模型求解时的搜索空间,由于咱们给了它一个目标:间隔最大化。