转载请引用 https://blog.csdn.net/weixin_43658194/article/details/104844723
一年多以前学习到SVM,但当时跳过了很多难懂的部分,本想找时间慢慢搞懂,谁知道一晃一年多过去了,到今天才算比较完整地理解了SVM。一年多的时间里,一看到SVM几个字就让我肃然起敬,敬而远之,到今天才有一种敌人变朋友的感觉。理解SVM确实不易,因此趁着还没忘,赶紧记录下来自己的理解,方便与大家交流学习,同时也加深自己的记忆,还望诸多大神们不吝赐教。
定义
估计大家对SVM都已经有所了解,那么像一些耳熟能详的,比如天使与魔鬼的故事我就懒得讲了)其实是不会讲。。
接下来简单定义一下SVM:SVM是一种线性或非线性的二分类器。看起来很简单吧:)
基本思想
想象一下,给你一堆只有两类的训练样本,假设他们的属性只有两维(如果不是两维可以PCA降到两维),把它们投影到二维坐标系中,如上图所示。理想情况下,它们会落在两个区域,一个区域全是正例,一个区域全是负例,那么我们会很自然地想要找到分割这两个区域的一个分界线,这样,有新样本到来的时候,我们就可以根据它落到哪个区域,来预测它属于哪个类别。这样的分界线有很多,如上图的几条直线都符合条件。
SVM的想法就是寻找一个最好的分界线,或者说最优划分超平面,使得这样地划分尽可能不让新样本“越界”,因此,直观来看,处于这两个区域最中间的线(图中红色那条),距离两个区域的中心最远,最可能符合要求。
数学上,划分超平面表达为:
w
T
x
+
b
=
0
\boldsymbol{w}^T \boldsymbol{x} + b = 0
wTx+b=0为什么是这样呢,可以看下面这张图:
我们以二维空间为例,高维空间可以类似地扩展,红色线为超平面,空间中任一点
x
i
\boldsymbol{x_i}
xi可以表示成从原点出发的一个向量(上图灰色箭头),根据定义,
w
\boldsymbol{w}
w为直线的法向量,令其模长为1,则
w
T
x
i
\boldsymbol{w}^T\boldsymbol{x_i}
wTxi的效果是将
x
i
\boldsymbol{x_i}
xi投影到了,从原点到超平面的垂线上,垂线的长度即为
b
b
b,因此超平面上任一点都满足
w
T
x
i
+
b
=
0
\boldsymbol{w}^T \boldsymbol{x_i} + b = 0
wTxi+b=0,于是
w
T
x
+
b
=
0
\boldsymbol{w}^T \boldsymbol{x} + b = 0
wTx+b=0为超平面的表达式。也可以看出,所有在红色线右上方的点满足
w
T
x
i
+
b
>
0
\boldsymbol{w}^T \boldsymbol{x_i} + b > 0
wTxi+b>0,左下方的点满足
w
T
x
i
+
b
<
0
\boldsymbol{w}^T \boldsymbol{x_i} + b < 0
wTxi+b<0。
最大间隔
我们不能口说无凭,得在数学上形式化这个问题,然后解决它。说白了,我们要找的超平面,应该距离两个区域最近的样本都一样远,注意是一样远,因为不能偏向正例或负例。看下面这张图
做两条相互平行“切线”,分别与两个区域最边上的点“相切”(虚线圈住的点),那么最优划分超平面就应该是两条“切线”中间的那条线(红色线),要距离最远,则要最大化红色线与虚线点之间的距离,也就是最大化下面这个式子(设虚线点为
x
x
u
\boldsymbol{x}_{xu}
xxu)
d
=
∣
w
T
x
x
u
+
b
∣
∥
w
∥
2
(1)
d = \frac{|\boldsymbol{w}^T\boldsymbol{x}_{xu} + b|}{\left\| \boldsymbol{w} \right\|_2} \tag{1}
d=∥w∥2∣wTxxu+b∣(1)
可以看到,最优划分超平面的确定只与虚线点有关,这些虚线点称为支持向量,这也是SVM支持向量机这个名称的由来。
令样本集为 { ( x i , y i ) ∣ i = 1 , 2 , 3 , . . . , n } \{(\boldsymbol{x_i}, y_i) | i = 1,2,3,...,n\} {(xi,yi)∣i=1,2,3,...,n},为了后面计算方便,也令 y i = { + 1 , − 1 } y_i = \{+1, -1\} yi={+1,−1},其中+1代表正例,-1代表负例,令上图中上下两条“切线”分别为 w T x + b = 1 \boldsymbol{w}^T\boldsymbol{x} + b = 1 wTx+b=1 和 w T x + b = − 1 \boldsymbol{w}^T\boldsymbol{x} + b = -1 wTx+b=−1,注意,这里的 w \boldsymbol{w} w 和 b b b 与红色线的相同,如果“切线”方程实际为 w T x + b = k \boldsymbol{w}^T\boldsymbol{x} + b = k wTx+b=k,那么可以将其两边同时除以k,最优划分超平面的 w \boldsymbol{w} w和 b b b也要同时除以k,不会改变方程式所代表的直线本身。对于图中所有点来说,就都满足 y i ( w T x i + b ) ≥ 1 y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \ge 1 yi(wTxi+b)≥1 了,这有什么用呢,是用来约束我们优化的过程的。如果不这么约束,那么为了最大化 ( 1 ) (1) (1)式,则可以将红色线扔到无穷远的地方,但显然我们要的是在切线区域内的最优划分超平面,因此,我们的优化目标是 max w , b 2 d = 2 ⋅ ∣ w T x x u + b ∣ ∥ w ∥ 2 = 2 ∥ w ∥ 2 \max_{\boldsymbol{w}, b} \quad 2d = 2 \cdot \frac{|\boldsymbol{w}^T\boldsymbol{x}_{xu} + b|}{\left\| \boldsymbol{w} \right\|_2} = \frac{2}{\left\| \boldsymbol{w} \right\|_2} w,bmax2d=2⋅∥w∥2∣wTxxu+b∣=∥w∥22 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . , n (2) s.t. \quad y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \ge 1,\quad i = 1,2,..,n \tag{2} s.t.yi(wTxi+b)≥1,i=1,2,..,n(2)因为最优划分超平面应处于中间,所以是 2 d 2d 2d。 ( 2 ) (2) (2)式等价于 min w , b ∥ w ∥ 2 2 2 \min_{\boldsymbol{w}, b} \quad \frac{\left\| \boldsymbol{w} \right\|_2^2}{2} w,bmin2∥w∥22 s . t . 1 − y i ( w T x i + b ) ≤ 0 , i = 1 , 2 , . . , n (3) s.t. \quad 1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b) \le 0,\quad i = 1,2,..,n \tag{3} s.t.1−yi(wTxi+b)≤0,i=1,2,..,n(3)
那么SVM怎么成为一个分类器呢,其实,它的模型就是 f ( x ) = w T x + b f(\boldsymbol{x}) = \boldsymbol{w}^T \boldsymbol{x} + b f(x)=wTx+b对于一个样本 x n e w \boldsymbol{x}_{new} xnew,如果 f ( x n e w ) ≥ 1 f(\boldsymbol{x}_{new}) \ge 1 f(xnew)≥1,则预测其为正类;如果 f ( x n e w ) ≤ − 1 f(\boldsymbol{x}_{new}) \le -1 f(xnew)≤−1 则预测其为负类。
拉格朗日乘子法和KKT条件
拉格朗日乘子法可将有d个变量k个约束条件的最优化问题转化为具有d+k个变量的无约束优化问题。——西瓜书
对于优化问题
min
x
f
(
x
)
\min_{\boldsymbol{x}} \quad f(\boldsymbol{x})
xminf(x)
s
.
t
.
h
i
(
x
)
=
0
,
i
=
1
,
2
,
.
.
,
m
g
j
(
x
)
≤
0
,
j
=
1
,
2
,
.
.
,
n
(4)
\begin{aligned} s.t. \quad h_i(\boldsymbol{x}) &= 0,\quad i = 1,2,..,m \\ g_j(\boldsymbol{x}) &\le 0,\quad j = 1,2,..,n \end{aligned} \tag{4}
s.t.hi(x)gj(x)=0,i=1,2,..,m≤0,j=1,2,..,n(4) 定义拉格朗日函数为
L
(
x
,
λ
,
α
)
=
f
(
x
)
+
∑
i
λ
i
h
i
(
x
)
+
∑
j
α
j
g
j
(
x
)
(5)
\mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha}) = f(\boldsymbol{x}) + \sum_i{\lambda_i h_i(\boldsymbol{x})} + \sum_j {\alpha_j g_j(\boldsymbol{x})} \tag{5}
L(x,λ,α)=f(x)+i∑λihi(x)+j∑αjgj(x)(5) 为什么是小于等于0呢,因为如果
g
(
x
)
=
0
g(\boldsymbol{x}) = 0
g(x)=0 围成了一个闭合区域,那么
g
(
x
)
<
0
g(\boldsymbol{x}) < 0
g(x)<0 限定了解在这个区域内,这样会有比较好的性质,更加直观。
对于
(
5
)
(5)
(5)式中的等式约束,大家都比较熟悉了,现在来看看不等式约束。先说结论,
α
j
≥
0
\alpha_j \ge 0
αj≥0。为什么要大于等于0呢,因为这时
α
j
g
j
(
x
)
≤
0
\alpha_j g_j(\boldsymbol{x}) \le 0
αjgj(x)≤0,此时对
(
5
)
(5)
(5)式进行极大极小,即
min
x
max
λ
,
α
L
(
x
,
λ
,
α
)
(6)
\min_{\boldsymbol{x}} \max_{\boldsymbol{\lambda},\boldsymbol{\alpha}} \mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha}) \tag{6}
xminλ,αmaxL(x,λ,α)(6) 就等价于(4)式的解了,这样我们就把带有等式和不等式约束的最优化问题转换成了无约束优化问题。如果
α
j
\alpha_j
αj可以取小于0的值,那么
max
λ
,
α
L
(
x
,
λ
,
α
)
\max_{\boldsymbol{\lambda},\boldsymbol{\alpha}} \mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha})
maxλ,αL(x,λ,α) 的结果就会变成无穷大,而
min
λ
,
α
L
(
x
,
λ
,
α
)
\min_{\boldsymbol{\lambda},\boldsymbol{\alpha}} \mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha})
minλ,αL(x,λ,α) 的结果是无穷小,此时无法将
(
4
)
(4)
(4)式与
(
6
)
(6)
(6)式等价。
这是一种对于
α
j
≥
0
\alpha_j \ge 0
αj≥0的解释,还有一种解释,在西瓜书的附录B.1,比较有趣和形象。看下面这张图,图片取自西瓜书:
首先,我们知道函数的梯度总是指向函数值增长最快的方向。下面我们分情况讨论:
- 最优解位于 g j ( x ) < 0 g_j(\boldsymbol{x}) < 0 gj(x)<0 区域内,此时这条约束对求解不起作用,即如果去掉这条约束,求得解的结果不变,因此等价与将 α j \alpha_j αj 置零。
- 最优解位于边界 g j ( x ) = 0 g_j(\boldsymbol{x}) = 0 gj(x)=0 上,由于 ∇ g ( x ) \nabla g(\boldsymbol{x}) ∇g(x) 指向 g ( x ) > 0 g(\boldsymbol{x}) > 0 g(x)>0 的区域, ∇ f ( x ) \nabla f(\boldsymbol{x}) ∇f(x) 指向背向最优点 x ∗ \boldsymbol{x}^* x∗ 的方向,此时该点处 f ( x ) f(\boldsymbol{x}) f(x) 与 g ( x ) g(\boldsymbol{x}) g(x) 的梯度方向相反,如上图所示,即存在 α j > 0 \alpha_j > 0 αj>0 使得 ∇ f ( x ) + α j ∇ g j ( x ) = 0 \nabla f(\boldsymbol{x}) + \alpha_j \nabla g_j(\boldsymbol{x}) = 0 ∇f(x)+αj∇gj(x)=0 。
综合以上两种情况,我们有:
{
g
j
(
x
)
<
=
0
α
j
>
=
0
α
j
g
j
(
x
)
=
0
\begin{cases} g_j(\boldsymbol{x}) <= 0\\ \alpha_j >= 0 \\ \alpha_j g_j(\boldsymbol{x}) = 0 \end{cases}
⎩⎪⎨⎪⎧gj(x)<=0αj>=0αjgj(x)=0
这种解释得到的结果,加上之前的结果,我们有
{
∇
L
(
x
,
λ
,
α
)
=
0
;
h
i
(
x
)
=
0
,
i
=
1
,
2
,
.
.
.
,
m
;
g
j
(
x
)
<
=
0
,
α
j
>
=
0
,
α
j
g
j
(
x
)
=
0
,
j
=
1
,
2
,
.
.
.
,
n
.
(7)
\begin{cases} \nabla \mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha}) = 0;\\ h_i(\boldsymbol{x}) = 0,\quad i = 1,2,...,m;\\ g_j(\boldsymbol{x}) <= 0,\\ \alpha_j >= 0, \\ \alpha_j g_j(\boldsymbol{x}) = 0,\quad j = 1,2,...,n. \end{cases} \tag{7}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧∇L(x,λ,α)=0;hi(x)=0,i=1,2,...,m;gj(x)<=0,αj>=0,αjgj(x)=0,j=1,2,...,n.(7)
此即为KKT条件。对于一般的任意问题而言,KKT条件是使一组解成为最优解的必要条件,当原问题是凸问题的时候,KKT条件也是充分条件。
对偶问题
一个优化问题可以直接对原问题或者说“主问题”(primal problem)直接求解,当“主问题”不好求解的时候,就可以考虑求解其对偶问题(dual problem),这就是为什么我们要在拉格朗日乘子法中考虑其对偶形式。当 ( 6 ) (6) (6)式所表达的问题不好求解的时候,我们可以转化成其对偶形式: max λ , α min x L ( x , λ , α ) (8) \max_{\boldsymbol{\lambda},\boldsymbol{\alpha}} \min_{\boldsymbol{x}} \mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha}) \tag{8} λ,αmaxxminL(x,λ,α)(8) 关于如何转化成对偶问题,我没弄明白,不过感觉在此没必要深究。 ( 8 ) (8) (8)式从直观上比较好理解,就是调换了一下min和max的顺序。在这里,令最优解 p ∗ = 式 ( 6 ) p^* = 式(6) p∗=式(6), d ∗ = 式 ( 8 ) d^* = 式(8) d∗=式(8) 则有 d ∗ ≤ p ∗ d^* \le p* d∗≤p∗ 可以理解为:对极小结果的极大 <= 对极大结果的极小。当满足某些条件时,比如主问题为凸优化问题,那么 d ∗ = p ∗ d^* = p^* d∗=p∗
SVM的对偶问题
对于SVM来说,其主问题(属于二次规划问题)为凸优化问题,而其主问题求解起来时间复杂度较高,因此可转换成等价的对偶问题。
对于式
(
3
)
(3)
(3),定义拉格朗日函数为
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
2
+
∑
i
=
1
n
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
(9)
\mathcal{L}(\boldsymbol{w}, b, \boldsymbol{\alpha}) = \frac{1}{2} \left\| \boldsymbol{w} \right\|_2^2 + \sum_{i=1}^n \alpha_i (1 - y_i(\boldsymbol{w}^T\boldsymbol{x}_i + b)) \tag{9}
L(w,b,α)=21∥w∥22+i=1∑nαi(1−yi(wTxi+b))(9) 其中
α
=
{
α
1
;
α
2
,
.
.
.
,
α
n
}
\boldsymbol{\alpha}=\{\alpha_1;\alpha_2,...,\alpha_n\}
α={α1;α2,...,αn}。令上式对
w
\boldsymbol{w}
w 和
b
b
b 的偏导为0可得,
w
=
∑
i
=
1
n
α
i
y
i
x
i
\boldsymbol{w} = \sum_{i=1}^n{\alpha_i y_i \boldsymbol{x}_i}
w=i=1∑nαiyixi
∑
i
=
1
n
α
i
y
i
=
0
\sum_{i=1}^n{\alpha_i y_i} = 0
i=1∑nαiyi=0 将其代入
(
9
)
(9)
(9)式即可消去
w
\boldsymbol{w}
w 和
b
b
b,可得
L
(
w
,
b
,
α
)
=
∑
i
=
1
n
α
i
−
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
x
i
T
x
j
(10)
\mathcal{L}(\boldsymbol{w}, b, \boldsymbol{\alpha}) = \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j \boldsymbol{x}_i^T \boldsymbol{x}_j \tag{10}
L(w,b,α)=i=1∑nαi−21i=1∑nj=1∑nαiαjyiyjxiTxj(10) 对
(
10
)
(10)
(10)式求min即为
(
8
)
(8)
(8)式中
min
x
L
(
x
,
λ
,
α
)
\min_{\boldsymbol{x}} \mathcal{L}(\boldsymbol{x},\boldsymbol{\lambda},\boldsymbol{\alpha})
minxL(x,λ,α) 的结果,因此“主问题”式
(
3
)
(3)
(3)的对偶问题为:
max
α
1
2
∑
i
=
1
n
∑
j
=
1
n
α
i
α
j
y
i
y
j
x
i
T
x
j
−
∑
i
=
1
n
α
i
\max_{\boldsymbol{\alpha}} \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j \boldsymbol{x}_i^T \boldsymbol{x}_j - \sum_{i=1}^n \alpha_i
αmax21i=1∑nj=1∑nαiαjyiyjxiTxj−i=1∑nαi
s
.
t
.
∑
i
=
1
n
α
i
y
i
=
0
,
α
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
n
s.t. \sum_{i=1}^n{\alpha_i y_i} = 0, \quad \alpha_i \ge 0,\quad i = 1,2,...,n
s.t.i=1∑nαiyi=0,αi≥0,i=1,2,...,n 注意,因为主问题要对(10)式求min,因此求max的时候要反转符号。
解出 α \boldsymbol{\alpha} α 后,则可根据 w = ∑ i = 1 n α i y i x i (11) \boldsymbol{w} = \sum_{i=1}^n{\alpha_i y_i \boldsymbol{x}_i} \tag{11} w=i=1∑nαiyixi(11) 和 y s ( ∑ i ∈ S α i y i x i T x s + b ) = 1 y_s \left(\sum_{i \in S} \alpha_i y_i \boldsymbol{x}_i^T \boldsymbol{x}_s + b \right) = 1 ys(i∈S∑αiyixiTxs+b)=1 来得到 w \boldsymbol{w} w 和 b b b,得到 w \boldsymbol{w} w 和 b b b 之后,我们就得到了SVM的模型。其中, S S S 为支持向量集合, ( x s , y s ) (\boldsymbol{x}_s, y_s) (xs,ys) 为一个支持向量。为了使结果鲁棒,则可以取平均值 b = 1 ∣ S ∣ ∑ s ∈ S ( y s − ∑ i ∈ S α i y i x i T x s ) (12) b = \frac{1}{|S|} \sum_{s \in S}\left( y_s - \sum_{i \in S} \alpha_i y_i \boldsymbol{x}_i^T \boldsymbol{x}_s \right) \tag{12} b=∣S∣1s∈S∑(ys−i∈S∑αiyixiTxs)(12)
至于如何求解
α
\boldsymbol{\alpha}
α,则需要用到SMO算法了。关于SMO算法的推导,则可参考这篇博客,以及西瓜书6.2节,自己还没有理解透。
到目前为止,SVM的主要思路都理了一遍。关于SMO算法、核函数、软间隔,以及SVM的种种变体算法,等后续有时间再更新。
这是本人第一次写博客,才疏学浅,还望大家多多包涵。
在学习这些经典算法的过程中,不禁感叹前人的智慧是多么强大,思想是多么精妙,这也许也是学习的有趣之处吧。
参考资料
[1] 拉格朗日对偶. https://www.cnblogs.com/ooon/p/5723725.html
[2] KKT条件总结. https://blog.csdn.net/qq_19446965/article/details/81742577
[3] 周志华. 《机器学习》.