作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】
【机器学习系列】之SVM硬间隔和软间隔
【机器学习系列】之SVM核函数和SMO算法
【机器学习系列】之支持向量回归SVR
【机器学习系列】之sklearn实现SVM代码
SVM概述
假定给出训练样本集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
,
y
i
∈
{
−
1
,
+
1
}
D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\},y_i \in \{-1,+1\}
D={(x1,y1),(x2,y2),...,(xm,ym)},yi∈{−1,+1},为二分类问题,其中y为分类标签,有两类分别为+1和-1。分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平,将不同类别的样本分开,但能将训练样本分开的划分超平面可能有很多,我们应该找哪一条呢?如下图所示,图中红色的那个超平面是最好的,因为这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强。支持向量机SVM所要解决的事情就是找到这样一个鲁棒性最好的超平面。
SVM算法的主要优点:
- 解决高维特征的分类问题和回归问题很有效,在特征维度大于样本数时依然有很好的效果。
- 仅仅使用一部分支持向量来做超平面的决策无需依赖全部数据。
- 有大量的核函数可以使用,从而可以很灵活的来解决各种非线性的分类回归问题。
- 样本量不是海量数据的时候,分类准确率高,泛化能力强。
SVM算法的主要缺点:
- 如果特征维度远远大于样本数,则SVM表现一般。
- SVM在样本量非常大,核函数映射维度非常高时,计算量过大,不太适合使用。
- 非线性问题的核函数的选择没有通用标准,难以选择一个合适的核函数。
- SVM对缺失数据敏感。
一、硬间隔SVM基本型
1.超平面定义
在样本空间中,划分的超平面可用如下线性方程来表述:
w
T
x
+
b
=
0
(
1
)
w^Tx+b=0 \quad\quad\quad\quad(1)
wTx+b=0(1)
其中 x = ( x 1 ; x 2 ; . . . ; x d ) x=(x_1;x_2;...;x_d) x=(x1;x2;...;xd)为样本点在样本空间中的坐标, x i x_i xi代表样本点在每一维度上坐标点的值; w = ( w 1 ; w 2 ; . . . ; w d ) w=(w_1;w_2;...;w_d) w=(w1;w2;...;wd)为法向量,决定了超平面的方向,x是几维的,就有几个w;b为位移项,决定了超平面与原点之间的距离。显然,划分超平面可被法向量w和位移b确定,记超平面为(w,b)。
2.点到直线间的距离
样本空间中任意点x到超平面(w,b)的距离可写为:
r
=
∣
w
T
+
b
∣
∣
∣
w
∣
∣
(
2
)
r = \frac{|w^T+b|}{||w||}\quad\quad\quad\quad(2)
r=∣∣w∣∣∣wT+b∣(2)
拓展:
-
L2范数: ∣ ∣ w ∣ ∣ = ∑ i = 1 k ∣ w i ∣ 2 ||w|| = \sqrt {\sum_{i=1}^{k}|w_i|^2} ∣∣w∣∣=∑i=1k∣wi∣2
-
二维空间点到直线的距离: d = ∣ A x + B y + c ∣ A 2 + B 2 d = \frac{|Ax+By+c|}{\sqrt{A^2+B^2}} d=A2+B2∣Ax+By+c∣,由此可以类比到多维空间上点到直线的距离。
3.模型假设
假设超平面(w,b)能将训练样本正确分类,即对于二分类问题,训练样本上的点均为x坐标已知,对应的y分类已知:若
y
i
=
+
1
y_i=+1
yi=+1,则有
w
T
x
i
+
b
>
0
w^Tx_i+b>0
wTxi+b>0;若
y
i
=
−
1
y_i=-1
yi=−1,则有
w
T
x
i
+
b
<
0
w^Tx_i+b<0
wTxi+b<0,令:
{
w
T
x
i
+
b
≥
+
1
,
y
i
=
+
1
w
T
x
i
+
b
≤
−
1
,
y
i
=
−
1
(
3
)
\begin{cases} w^Tx_i+b \geq +1, & y_i = +1 \\ \\ w^Tx_i+b \leq -1, & y_i=-1 \end{cases}\quad\quad\quad\quad(3)
⎩⎪⎨⎪⎧wTxi+b≥+1,wTxi+b≤−1,yi=+1yi=−1(3)
注释:
- "硬间隔SVM"模型的建立,是基于数据为“线性可分”的,所谓线性可分指的是:不含噪音,可将训练数据完美分成两类。而硬间隔SVM模型就是基于这个假设构建的,即:假设正确分类的样本点在各自支持向量的两边。
- ∣ w T x + b ∣ |w^Tx+b| ∣wTx+b∣表示点x到超平面的相对距离,通过观察 w T x + b w^Tx+b wTx+b和 y y y是否同号,判断分类是否正确。
- SVM的模型是让所有点到超平面的距离大于一定的距离,即所有分类点要在各自类别的支持向量两边。一般我们都取这个距离为1
4.间隔与支持向量
如上图所示,距离超平面最近的这几个训练样本点使公式(3)的等号成立,它们被称为“支持向量(support vector)”,两个异类支持向量到超平面的距离之和为公式(4)所示,它被称为“间隔(margin)”。
γ
=
2
∣
∣
w
∣
∣
(
4
)
\gamma = \frac{2}{||w||}\quad\quad\quad(4)
γ=∣∣w∣∣2(4)
注释:
- 函数间隔 y ( w T x + b ) y(w^T x+b) y(wTx+b)对于训练集中m个样本点对应的m个函数间隔的最小值,就是整个训练集的函数间隔。找到训练样本中函数间隔最小的那个样本,并且要让它的函数间隔最大!这就是SVM的目标函数。
- 间隔貌似仅与 w w w有关,但事实上 b b b通过约束隐式地影响着 w w w的取值,进而对间隔产生影响。
欲找到具有“最大间隔(maximum margin)”的划分超平面,即:找到满足(3)式中约束的参数
w
w
w和
b
b
b,使得
γ
\gamma
γ最大,有:
m
a
x
⎵
w
,
b
2
∣
∣
w
∣
∣
s
.
t
.
y
i
(
w
T
x
i
+
b
)
≥
1
,
i
=
1
,
2
,
.
.
.
,
m
\underbrace{max}_{w,b}\frac{2}{||w||}\\ s.t. \quad y_i(w^Tx_i+b)\geq 1,\quad i=1,2,...,m
w,b
max∣∣w∣∣2s.t.yi(wTxi+b)≥1,i=1,2,...,m
- 为了最大化间隔,仅需最大化 ∣ ∣ w ∣ ∣ − 1 ||w||^{-1} ∣∣w∣∣−1,这等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2,于是“支持向量机(Support Vector Machine)”的基本型如下式所示:
{ m i n ⎵ w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m ( 5 ) \begin{cases} \underbrace{min}_{w,b}\frac{1}{2}||w||^2\\ \\ s.t. \quad y_i(w^Tx_i+b)\geq 1,\quad i=1,2,...,m \end{cases}\quad\quad\quad(5) ⎩⎪⎪⎪⎨⎪⎪⎪⎧w,b min21∣∣w∣∣2s.t.yi(wTxi+b)≥1,i=1,2,...,m(5)
5.例题,加深理解
目前无需纠结解法,只需要理解SVM公式的使用,具体解法我们会在下一节中讲述。
已知一个如下图所示的训练数据集,其正例点是
x
1
=
(
3
,
3
)
T
x_1=(3,3)^T
x1=(3,3)T,
x
2
=
(
4
,
3
)
T
x_2=(4,3)^T
x2=(4,3)T,负例点是
x
3
=
(
1
,
1
)
T
x_3=(1,1)^T
x3=(1,1)T,试列出求最大间隔分离超平面的公式。
解:根据训练数据集构造约束最优化问题:
{
m
i
n
⎵
w
,
b
1
2
(
w
1
2
+
w
2
2
)
s
.
t
.
3
w
1
+
3
w
2
+
b
≥
1
4
w
1
+
3
w
2
+
b
≥
1
−
w
1
−
w
2
−
b
≥
1
\begin{cases}\underbrace{min}_{w,b} \frac{1}{2}(w_1^2+w_2^2)\\ \\ s.t.\quad 3w_1+3w_2+b \geq1\\ \quad\quad \quad 4w_1+3w_2+b \geq 1\\ \quad\quad\quad -w_1-w_2-b \geq 1 \end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧w,b
min21(w12+w22)s.t.3w1+3w2+b≥14w1+3w2+b≥1−w1−w2−b≥1
注意:
- x是几维,就有几个w。
- xi代表样本点在每一维度上坐标点的值。
二、硬间隔SVM对偶问题
1.先用拉格朗日乘子法
我们可以通过拉格朗日乘子法将我们的优化目标公式(5)转换为无约束的优化函数,对公式(5)的每条约束添加拉格朗日乘子
α
i
≥
0
\alpha_i \geq 0
αi≥0,则该问题的拉格朗日函数可写为:
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
2
∣
∣
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
(
6
)
L(w,b,\alpha)=\frac{1}{2}||w^2||+\sum_{i=1}^{m}\alpha_i(1-y_i(w^Tx_i+b))\quad\quad\quad(6)
L(w,b,α)=21∣∣w2∣∣+i=1∑mαi(1−yi(wTxi+b))(6)
其中
α
=
(
α
1
,
α
2
,
.
.
.
,
α
m
)
\alpha = (\alpha_1,\alpha_2,...,\alpha_m)
α=(α1,α2,...,αm),这样可以通过每个样本点的
α
\alpha
α取值,知道该样本点相对于支持向量的位置。
拓展:拉格朗日乘子法——不等式约束优化
给定不等式约束问题:
m
i
n
⎵
x
f
(
x
)
s
.
t
.
h
(
x
)
=
0
g
(
x
)
≤
0
\underbrace{min}_{x}f(x)\\ s.t.\quad h(x)=0\\ \quad g(x)\leq 0
x
minf(x)s.t.h(x)=0g(x)≤0
等式约束和不等式约束:
h
(
x
)
=
0
,
g
(
x
)
≤
0
h(x)=0,g(x) \leq 0
h(x)=0,g(x)≤0分别是由一个等式方程和一个不等式方程组成的方程组。
拉格朗日乘子: λ = ( λ 1 , λ 2 , . . . , λ m ) α = ( α 1 , α 2 , . . . , α n ) \lambda = (\lambda_1,\lambda_2,...,\lambda_m) \quad \alpha=(\alpha_1,\alpha_2,...,\alpha_n) λ=(λ1,λ2,...,λm)α=(α1,α2,...,αn)
拉格朗日函数: L ( x , λ , α ) = f ( x ) + λ h ( x ) + α g ( x ) L(x,\lambda,\alpha) = f(x)+\lambda h(x)+\alpha g(x) L(x,λ,α)=f(x)+λh(x)+αg(x)
注释:将拉格朗日乘子法应用于SVM
给定不等式约束问题: f ( x ) = m i n ⎵ w , b 1 2 ∣ ∣ w ∣ ∣ 2 f(x) = \underbrace{min}_{w,b}\frac{1}{2}||w||^2 f(x)=w,b min21∣∣w∣∣2
不等式约束: g ( x ) = 1 − y i ( w T x i + b ≤ 0 ) g(x)=1-y_i(w^T x_i+b \leq 0) g(x)=1−yi(wTxi+b≤0)
拉格朗日乘子: α = ( α 1 , α 2 , . . . , α m ) \alpha = (\alpha_1,\alpha_2,...,\alpha_m) α=(α1,α2,...,αm)
拉格朗日函数: L ( w , b , α ) = f ( x ) + α g ( x ) L(w,b,\alpha)=f(x)+\alpha g(x) L(w,b,α)=f(x)+αg(x)
由于引入了拉格朗日乘子,我们的优化目标变成了:
m
i
n
⎵
w
,
b
m
a
x
⎵
a
i
≥
0
L
(
w
,
b
,
α
)
\underbrace{min}_{w,b} \quad \underbrace{max}_{a_i \geq 0} L(w,b,\alpha)
w,b
minai≥0
maxL(w,b,α)
解释:为什么可以转换为
m
i
n
⎵
w
,
b
m
a
x
⎵
a
i
≥
0
L
(
w
,
b
,
α
)
\underbrace{min}_{w,b} \quad \underbrace{max}_{a_i \geq 0} L(w,b,\alpha)
w,b
minai≥0
maxL(w,b,α)
- 我们要求解的目标为 m i n ⎵ w , b 1 2 ∣ ∣ w ∣ ∣ 2 \underbrace{min}_{w,b} \frac{1}{2}||w||^2 w,b min21∣∣w∣∣2,即 m i n ⎵ x f ( x ) \underbrace{min}_{x}f(x) x minf(x)
- 可以把 f ( x ) f(x) f(x)写为 m a x ⎵ a i ≥ 0 L ( w , b , α ) \underbrace{max}_{a_i \geq 0} L(w,b,\alpha) ai≥0 maxL(w,b,α)。因为 α i ≥ 0 , g ( x i ) ≤ 0 \alpha_i \geq 0 ,g(x_i) \leq 0 αi≥0,g(xi)≤0,所以 α i × g ( x i ) ≤ 0 \alpha_i \times g(x_i) \leq 0 αi×g(xi)≤0,只有在 α i × g ( x i ) = 0 \alpha_i \times g(x_i) = 0 αi×g(xi)=0的情况下 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)才能取得最大值,此时 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)等于 f ( x ) f(x) f(x)。所以 f ( x ) = m a x ⎵ a i ≥ 0 L ( w , b , α ) f(x)=\underbrace{max}_{a_i \geq 0} L(w,b,\alpha) f(x)=ai≥0 maxL(w,b,α)
- 结合上述1、2知:最终求解目标转换为 m i n ⎵ w , b m a x ⎵ a i ≥ 0 L ( w , b , α ) \underbrace{min}_{w,b} \quad \underbrace{max}_{a_i \geq 0} L(w,b,\alpha) w,b minai≥0 maxL(w,b,α)
2.对偶问题
我们的这个规划问题是“强对偶关系”,所以可以直接转换为求解:
m
a
x
⎵
a
i
≥
0
m
i
n
⎵
w
,
b
L
(
w
,
b
,
α
)
(
7
)
\underbrace{max}_{a_i \geq 0}\quad \underbrace{min}_{w,b} L(w,b,\alpha)\quad\quad\quad(7)
ai≥0
maxw,b
minL(w,b,α)(7)
拓展:
3.求解min L(w,b,a):
高中数学,求极值先对变量求导等于0,再把求得的变量值代回原函数,即可得到原函数的极值。
令
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α)对
w
w
w和
b
b
b的偏导为零:
最终求得结果如下:
{
w
=
∑
i
=
1
m
α
i
y
i
x
i
0
=
∑
i
=
1
m
α
i
y
i
(
8
)
\begin{cases} w = \sum_{i=1}^{m}\alpha_i y_i x_i\\ \\ 0=\sum_{i=1}^{m}\alpha_i y_i \end{cases}\quad\quad\quad(8)
⎩⎪⎨⎪⎧w=∑i=1mαiyixi0=∑i=1mαiyi(8)
从上式中我们已经求得了
w
w
w和
α
\alpha
α的关系,只要我们后面能够求出优化函数极大化对应的
α
\alpha
α,就可以求出我们的
w
w
w了;至于
b
b
b,由于上述两式中已经没有
b
b
b,所以最后的
b
b
b可以有多个。
将公式(8)带入公式(6),即可将
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α)中的
w
w
w和
b
b
b消去:
所以,最终求得:
m
a
x
⎵
a
i
≥
0
m
i
n
⎵
w
,
b
L
(
w
,
b
,
α
)
=
m
a
x
⎵
a
i
≥
0
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
\underbrace{max}_{a_i \geq 0}\quad \underbrace{min}_{w,b} L(w,b,\alpha) = \underbrace{max}_{a_i \geq 0}\quad \sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i \alpha_j y_i y_j x_i^T x_j
ai≥0
maxw,b
minL(w,b,α)=ai≥0
maxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj
从上面可以看出,通过对
w
w
w和
b
b
b极小化以后,我们的优化函数仅仅只有
α
\alpha
α向量做参数,只要我们能够极大化上式,就可以求出此时对应的
α
\alpha
α,进而求出
w
w
w和
b
b
b。对于上式,可以去掉负号,转换为等价的极小化问题如下:
{
m
i
n
⎵
a
i
≥
0
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
−
∑
i
=
1
m
α
i
s
.
t
.
∑
i
=
1
m
α
i
y
i
=
0
α
i
≥
0
i
=
1
,
2
,
.
.
.
,
m
(
9
)
\begin{cases} \underbrace{min}_{a_i \geq 0}\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i \alpha_j y_i y_j x_i^T x_j -\sum_{i=1}^{m}\alpha_i\\ \\ s.t. \quad \sum_{i=1}^{m}\alpha_i y_i = 0\\ \quad \quad \quad \alpha_i \geq0 \quad i=1,2,...,m \end{cases}\quad\quad\quad\quad\quad(9)
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧ai≥0
min21∑i=1m∑j=1mαiαjyiyjxiTxj−∑i=1mαis.t.∑i=1mαiyi=0αi≥0i=1,2,...,m(9)
注意到公式(5)中含有约束条件,所以在上述求解的过程中需要满足KKT条件:
K
K
T
条件
{
∂
L
∂
w
=
0
;
∂
L
∂
b
=
0
;
∂
L
∂
α
=
0
α
i
≥
0
;
y
i
(
w
T
x
i
+
b
)
−
1
≥
0
;
α
i
(
y
i
(
w
T
x
i
+
b
)
−
1
)
=
0.
KKT\text{条件}\quad\begin{cases} \frac{\partial L}{\partial w} = 0;\frac{\partial L}{\partial b} = 0;\frac{\partial L}{\partial \alpha} = 0 \\ \\ \alpha_i \geq 0;\\ \\ y_i (w^Tx_i+b)-1 \geq 0;\\ \\ \alpha_i(y_i(w^Tx_i+b)-1)=0. \end{cases}
KKT条件⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧∂w∂L=0;∂b∂L=0;∂α∂L=0αi≥0;yi(wTxi+b)−1≥0;αi(yi(wTxi+b)−1)=0.
注释:原问题和对偶问题具有强对偶关系的充要条件是:满足KKT条件!所以由上述的强对偶关系,可以直接得到KKT条件。
4.求得最优w和最优b
由KKT条件可以求解出最优的 w ∗ w^* w∗和 b ∗ b^* b∗
对于线性可分训练数据集,假设对偶最优化问题,也就是公式(9)对
α
\alpha
α的解为
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
m
∗
)
\alpha^* = (\alpha_1^*,\alpha_2^*,...,\alpha_m^*)
α∗=(α1∗,α2∗,...,αm∗),可以由
a
∗
a^*
a∗求得原始最优化问题公式(5)对(w,b)的解
w
∗
,
b
∗
w^*,b^*
w∗,b∗。
w
∗
=
∑
i
=
1
M
α
i
∗
y
i
x
i
(
10
)
b
∗
=
y
j
−
∑
i
=
1
M
α
i
∗
y
i
(
x
i
⋅
x
j
)
(
11
)
w^* = \sum_{i=1}^{M}\alpha_i^*y_ix_i\quad\quad\quad(10)\\ b^*=y_j-\sum_{i=1}^{M}\alpha_i^*y_i(x_i \cdot x_j) \quad\quad\quad(11)
w∗=i=1∑Mαi∗yixi(10)b∗=yj−i=1∑Mαi∗yi(xi⋅xj)(11)
求解
α
\alpha
α的值可以用凸优化或SMO算法进行求解,我会在下一篇博客中对SMO算法做详细讲解,这里不多做赘述(对于样本的特征较多、维度较高时,这时可以采用SMO算法求解
α
\alpha
α)。
在这里,我们假设通过SMO算法,得到了对应 α \alpha α的最优值 α ∗ \alpha^* α∗
4.1.求解最优w
由KKT条件第一行,将公式(6)对
w
w
w求导可得最优
w
∗
w^*
w∗:
w
∗
=
∑
i
=
1
M
α
i
∗
y
i
x
i
w^* = \sum_{i=1}^{M}\alpha_i^* y_i x_i
w∗=i=1∑Mαi∗yixi
然后将求解的最优
α
\alpha
α带入上式中,即可求出最优
w
∗
w^*
w∗。
4.2.求解最优b
由于b求偏导后的结果中不带b,所以另寻他法。由KKT条件第2~4行知:对任意训练样本 ( x i , y i ) (x_i,y_i) (xi,yi),总有 α i = 0 \alpha_i = 0 αi=0或 y i f ( x i ) = 1 y_i f(x_i)=1 yif(xi)=1。若 α i = 0 \alpha_i = 0 αi=0,则该样本将不会在公式(10)中出现,也就不会对模型有任何影响;若 α i > 0 \alpha_i > 0 αi>0,则必有 y i ( w T x i + b ) = 1 y_i (w^Tx_i+b)=1 yi(wTxi+b)=1,所对应的样本点位于最大间隔边界上,是一个支持向量。也就是说只有支持向量上的样本才会对模型有影响,根据这条性质我们可以求出b的最优解。
重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。
∃
(
x
k
,
y
k
)
,
s
.
t
.
1
−
y
k
(
w
∗
T
x
k
+
b
∗
)
=
0
  
⟹
  
y
k
(
w
∗
T
x
k
+
b
∗
)
=
1
  
⟹
  
y
k
2
(
w
∗
T
x
k
+
b
∗
)
=
y
k
(
因
为
y
取
值
为
+
1
或
−
1
,
所
以
y
2
=
1
)
  
⟹
  
(
w
∗
T
x
k
+
b
∗
)
=
y
k
  
⟹
  
b
∗
=
y
k
−
w
∗
T
x
k
  
⟹
  
b
∗
=
y
k
−
∑
i
=
0
M
α
i
∗
y
i
(
x
i
⋅
x
k
)
\exists(x_k,y_k),s.t.\quad 1-y_k(w^{*T}x_k+b^*)=0\\ \qquad\qquad\implies y_k(w^{*T}x_k+b^*)=1\\[2ex] \qquad\quad\qquad\qquad\qquad\qquad\qquad\qquad\quad\implies y_k^2(w^{*T}x_k+b^*)=y_k \quad(因为y取值为+1或-1,所以y^2=1)\\[3ex] \qquad\qquad\quad\implies(w^{*T}x_k+b^*)=y_k\\[2ex] \qquad\quad\implies b^*=y_k-w^{*T}x_k\\[2ex] \qquad\quad\quad\qquad\implies b^*=y_k-\sum_{i=0}^{M}\alpha_i^* y_i( x_i \cdot x_k)
∃(xk,yk),s.t.1−yk(w∗Txk+b∗)=0⟹yk(w∗Txk+b∗)=1⟹yk2(w∗Txk+b∗)=yk(因为y取值为+1或−1,所以y2=1)⟹(w∗Txk+b∗)=yk⟹b∗=yk−w∗Txk⟹b∗=yk−i=0∑Mαi∗yi(xi⋅xk)
然后将求解的最优
α
\alpha
α带入上式中,即可求出最优
b
∗
b^*
b∗。
现实任务中采用一种更鲁棒的做法:求出所有支持向量所对应的 b ∗ b^* b∗,然后将其平均值作为最后的结果。
4.3.求得的模型
最终求得分离超平面为:
w
∗
⋅
x
+
b
∗
=
0
w^* \cdot x + b^* = 0
w∗⋅x+b∗=0
综上所述:对于给定的线性可分训练数据集,可以首先求对偶问题公式(9)的解
α
∗
\alpha^*
α∗;再利用公式(10)和(11)求得原始问题的解
w
∗
,
b
∗
w^*,b^*
w∗,b∗;从而得到分离超平面。这种算法称为线性可分支持向量机的对偶学习算法,是线性可分支持向量机学习的基本算法。
4.4.线性可分硬SVM算法过程
4.5.例题,加深理解
已知一个如上图所示的训练数据集,其正例点是
x
1
=
(
3
,
3
)
T
x_1=(3,3)^T
x1=(3,3)T,
x
2
=
(
4
,
3
)
T
x_2=(4,3)^T
x2=(4,3)T,负例点是
x
3
=
(
1
,
1
)
T
x_3=(1,1)^T
x3=(1,1)T,试用求线性可分支持向量机。
4.6 sklearn实现上述例题
导入包:
from sklearn import svm
输入样本并训练模型:
x = [[3,3],[4,3],[1,1]]
y = [1,1,-1]
model = svm.SVC(kernel='linear')
model.fit(x,y)
打印支持向量:
print(model.support_vectors_)
>>>[[1. 1.]
[3. 3.]]
输出哪些样本点为支持向量:
print(model.support_)
>>>[2 0]
输出每一边各有几个支持向量:
print(model.n_support_)
>>>[1 1]
预测为哪个类别:
print(model.predict([[4,3]]))
>>>[1]
计算每个 w 的值:
print(model.coef_)
>>>[[0.5 0.5]]
计算 b 的值:
print(model.intercept_)
>>>[-2.]
三、软间隔SVM
在前面的讨论中,我们一直假定训练样本空间或特征空间中是i阿宁可分得,即存在一个超平面能将不同类的样本完全划分开。然而,在现实任务中往往很难确定合适的核函数使得训练样本在特征空间中线性可分。如下图所示:红色圈出了一些不满足约束的样本。
硬间隔线性可分SVM面临的问题:
- 有时候数据本来是可分的,但由于混入了异常点,导致不能线性可分。
- 模型依然线性可分,但效果不好。如果不考虑异常点,则可能会得到一个很好的模型,此类异常点的存在会严重影响分类模型预测效果。
SVM引入了软间隔最大化的方法来解决上述问题:允许支持向量机在一些样本上出错,即:允许某些样本不满足约束 y i ( w i T + b ) ≥ 1 y_i(w^T_i+b) \geq1 yi(wiT+b)≥1。(当然,在最大化间隔的同时不满足约束的样本应尽可能少。)
1.引入松弛变量
对训练集里面的每个样本
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)引入了一个松弛变量
ξ
i
≥
0
\xi_i\geq0
ξi≥0,使函数间隔加上松弛变量大于等于1。
y
i
(
w
T
x
i
+
b
)
≥
1
−
ξ
i
y_i(w^Tx_i +b)\geq1-\xi_i
yi(wTxi+b)≥1−ξi
显然,每一个样本都有一个对应的松弛变量。
我们认为:
- ξ = 0 \xi=0 ξ=0时,样本在被支持向量正确分类。
- 0 < ξ < 1 0<\xi<1 0<ξ<1时,样本在函数间隔与超平面之间。
- ξ = 1 \xi=1 ξ=1时,样本在函数间隔上。
- ξ ≥ 1 \xi\geq1 ξ≥1时,样本此时为异常点。
当然,松弛变量不能白加,这是有成本的,这样就得到了软间隔最大化SVM学习条件如下:
{
m
i
n
⎵
w
,
b
,
ξ
i
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
m
ξ
i
s
.
t
.
y
i
(
w
T
x
i
+
b
)
≥
1
−
ξ
i
ξ
i
≥
0
i
=
1
,
2
,
.
.
.
,
m
(
12
)
\begin{cases} \underbrace{min}_{w,b,\xi_i}\frac{1}{2}||w||^2+C\sum_{i=1}^{m}\xi_i\\ \\ s.t. \quad y_i(w^Tx_i+b)\geq1-\xi_i\\ \quad \quad \quad \xi_i \geq0 \quad i=1,2,...,m \end{cases}\quad\quad\quad\quad\quad(12)
⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧w,b,ξi
min21∣∣w∣∣2+C∑i=1mξis.t.yi(wTxi+b)≥1−ξiξi≥0i=1,2,...,m(12)
其中
C
>
0
C>0
C>0是一个常数,为惩罚参数。我们希望
1
2
∣
∣
w
∣
∣
2
\frac{1}{2}||w||^2
21∣∣w∣∣2尽量小,误分类的点尽可能的少,
C
C
C是协调两者关系的正则化惩罚系数。
C
C
C越大,对误分类的惩罚越大;
C
C
C越小,对误分类的惩罚越小。
2.软间隔SVM最大化目标优化函数
首先将软价格最大化的约束问题用拉格朗日函数转化为无约束问题如下:
- 待求目标: f ( x ) = m i n ⎵ w , b , ξ i 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 m ξ i f(x)=\underbrace{min}_{w,b,\xi_i}\frac{1}{2}||w||^2+C\sum_{i=1}^{m}\xi_i f(x)=w,b,ξi min21∣∣w∣∣2+C∑i=1mξi
- 不等式约束:
g
(
x
)
=
1
−
ξ
i
−
y
i
(
w
T
x
i
+
b
)
≤
0
g(x)=1-\xi_i-y_i(w^Tx_i+b)\leq0
g(x)=1−ξi−yi(wTxi+b)≤0
h ( x ) = − ξ i ≤ 0 \quad \qquad \qquad h(x)=-\xi_i\leq0 h(x)=−ξi≤0 - 拉格朗日乘子:
α
=
(
α
1
,
α
2
,
⋯
 
,
α
m
)
\alpha=(\alpha_1,\alpha_2,\cdots,\alpha_m)
α=(α1,α2,⋯,αm)
μ = ( μ 1 , μ 2 , ⋯   , μ m ) \qquad \qquad \qquad \mu=(\mu_1,\mu_2,\cdots,\mu_m) μ=(μ1,μ2,⋯,μm) - 拉格朗日函数: L ( w , v , ξ , α , μ ) = f ( x ) + α g ( x ) + μ h ( x ) L(w,v,\xi,\alpha,\mu)=f(x)+\alpha g(x)+\mu h(x) L(w,v,ξ,α,μ)=f(x)+αg(x)+μh(x)
整理得:
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
m
ξ
i
+
∑
i
=
1
m
α
i
(
1
−
ξ
i
−
y
i
(
w
T
x
i
+
b
)
)
−
∑
i
=
1
m
μ
i
ξ
i
(
13
)
L(w,b,\xi,\alpha,\mu)=\frac{1}{2}||w||^2+C\sum_{i=1}^{m}\xi_i+\sum_{i=1}^{m}\alpha_i(1-\xi_i-y_i(w^Tx_i+b))-\sum_{i=1}^{m}\mu_i\xi_i\qquad\qquad\qquad(13)
L(w,b,ξ,α,μ)=21∣∣w∣∣2+Ci=1∑mξi+i=1∑mαi(1−ξi−yi(wTxi+b))−i=1∑mμiξi(13)
也就是说,我们现在要优化的目标函数是:
m
i
n
⎵
w
,
b
,
ξ
m
a
x
⎵
α
≥
0
;
μ
≥
0
L
(
w
,
b
,
ξ
,
α
,
μ
)
\underbrace{min}_{w,b,\xi}\underbrace{max}_{\alpha\geq0;\mu\geq0}L(w,b,\xi,\alpha,\mu)
w,b,ξ
minα≥0;μ≥0
maxL(w,b,ξ,α,μ)
这个优化目标也满足KKT条件,可以通过拉格朗日对偶将这个优化问题转化为等价的对偶问题来求解:
m
a
x
⎵
α
≥
0
;
μ
≥
0
m
i
n
⎵
w
,
b
,
ξ
L
(
w
,
b
,
ξ
,
α
,
μ
)
(
14
)
\underbrace{max}_{\alpha\geq0;\mu\geq0}\underbrace{min}_{w,b,\xi}L(w,b,\xi,\alpha,\mu)\qquad\qquad\qquad(14)
α≥0;μ≥0
maxw,b,ξ
minL(w,b,ξ,α,μ)(14)
3.求解 m i n    L ( w , b , ξ , α , μ ) min\;L(w,b,\xi,\alpha,\mu) minL(w,b,ξ,α,μ)
首先来求优化函数对于
w
,
b
,
ξ
w,b,\xi
w,b,ξ的极小值,这个可以通过求偏导数求得:
{
∂
L
∂
w
=
0
  
⟹
  
w
=
∑
i
=
1
m
α
i
y
i
x
i
∂
L
∂
b
=
0
  
⟹
  
0
=
∑
i
=
1
m
α
i
y
i
∂
L
∂
ξ
=
0
  
⟹
  
C
=
α
i
−
μ
i
\begin{cases}\frac{\partial L}{\partial w}=0\implies w=\sum_{i=1}^{m}\alpha_iy_ix_i \\[2ex] \frac{\partial L}{\partial b}=0\implies 0=\sum_{i=1}^{m}\alpha_iy_i\\[2ex] \frac{\partial L}{\partial \xi}=0\implies C=\alpha_i-\mu_i\end{cases}
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧∂w∂L=0⟹w=∑i=1mαiyixi∂b∂L=0⟹0=∑i=1mαiyi∂ξ∂L=0⟹C=αi−μi
利用上面三个师子消除
w
w
w和
b
b
b:
优化目标的数学形式:
{
m
a
x
⎵
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s
.
t
.
  
∑
i
=
1
m
α
i
y
i
=
0
C
−
α
i
−
μ
i
=
0
α
i
≥
0
(
i
=
1
,
2
,
⋯
 
,
m
)
μ
i
≥
0
(
i
=
1
,
2
,
⋯
 
,
m
)
\begin{cases}\underbrace{max}_{\alpha}\sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j\\[2ex] s.t.\;\sum_{i=1}^{m}\alpha_iy_i=0\\[2ex] C-\alpha_i-\mu_i=0\\[2ex] \alpha_i\geq0\quad(i=1,2,\cdots ,m)\\[2ex] \mu_i\geq0\quad(i=1,2,\cdots,m)\end{cases}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧α
max∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjxiTxjs.t.∑i=1mαiyi=0C−αi−μi=0αi≥0(i=1,2,⋯,m)μi≥0(i=1,2,⋯,m)
对于上述中后三个式子,可以消去
μ
i
\mu_i
μi,只留下
α
i
\alpha_i
αi,即:
0
≤
α
≤
C
0\leq\alpha\leq C
0≤α≤C,同时将优化目标函数变号,求极小值:
{
m
a
x
⎵
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s
.
t
.
  
∑
i
=
1
m
α
i
y
i
=
0
0
≤
α
i
≤
C
(
15
)
\begin{cases}\underbrace{max}_{\alpha}\sum_{i=1}^{m}\alpha_i-\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j\\[2ex] s.t.\;\sum_{i=1}^{m}\alpha_iy_i=0\\[2ex] 0\leq\alpha_i\leq C\end{cases}\qquad\qquad\qquad(15)
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧α
max∑i=1mαi−21∑i=1m∑j=1mαiαjyiyjxiTxjs.t.∑i=1mαiyi=00≤αi≤C(15)
这就是软间隔SVM优化目标形式,和硬间隔SVM相比,仅仅只多了一个约束条件
0
≤
α
i
≤
C
0\leq\alpha_i\leq C
0≤αi≤C。依然可以通过SMO算法来求上式极小化对应的
α
\alpha
α,然后即可求出
w
w
w和
b
b
b了。
4.软间隔KKT条件
对软间隔SVM,KKT条件要求:
{
α
i
≥
0
,
μ
i
≥
0
,
y
i
(
w
T
x
i
+
b
)
−
1
+
ξ
i
≥
0
,
α
i
(
y
i
(
w
T
x
i
+
b
)
−
1
+
ξ
i
)
=
0
ξ
i
≥
0
,
μ
i
ξ
i
=
0
(
16
)
\begin{cases}\alpha_i\geq0, \qquad \mu_i \geq0,\\[2ex] y_i(w^Tx_i+b)-1+\xi_i \geq 0,\\[2ex] \alpha_i(y_i(w^Tx_i+b)-1+\xi_i)=0\\[2ex] \xi_i\geq0,\quad \mu_i\xi_i=0\end{cases}\qquad\qquad\qquad(16)
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧αi≥0,μi≥0,yi(wTxi+b)−1+ξi≥0,αi(yi(wTxi+b)−1+ξi)=0ξi≥0,μiξi=0(16)
根据软间隔最大化时KKT条件中的对偶互补条件
α
i
(
y
i
(
w
T
x
i
+
b
)
−
1
+
ξ
i
)
=
0
\alpha_i(y_i(w^Tx_i+b)-1+\xi_i)=0
αi(yi(wTxi+b)−1+ξi)=0可知:
- 如果 α i = 0 \alpha_i = 0 αi=0,那么 y i ( w T x i + b ) − 1 ≥ 0 y_i(w^Tx_i+b)-1\geq0 yi(wTxi+b)−1≥0,则样本不会对模型产生任何影响,即:样本已经被正确分类。如下图中所有远离间隔边界的点。
- 如果
α
i
>
0
\alpha_i>0
αi>0,则必有
y
i
(
w
T
x
i
+
b
)
=
1
−
ξ
i
y_i(w^Tx_i+b)=1-\xi_i
yi(wTxi+b)=1−ξi,即:该样本是支持向量,由
C
=
α
i
+
μ
i
C=\alpha_i+\mu_i
C=αi+μi和
μ
i
ξ
i
=
0
\mu_i\xi_i=0
μiξi=0可知:
- 如果 α i < C \alpha_i<C αi<C,则 μ i > 0 \mu_i>0 μi>0,进而有 ξ i = 0 \xi_i=0 ξi=0,即该样本恰在最大间隔边界上;
- 如果
α
i
=
C
\alpha_i=C
αi=C,则
μ
i
=
0
\mu_i=0
μi=0,此时:
- 如果 0 ≤ ξ i ≤ 1 0\leq\xi_i\leq1 0≤ξi≤1,则样本已被正确分类,但是却在超平面和自己类别的间隔边界之间。如图中的样本2和4;
- 如果
ξ
i
>
1
\xi_i>1
ξi>1,则该样本被错误分类。如图中的样本1和3。
5.软间隔SVM算法流程
\qquad
软间隔SVM算法流程通硬间隔SVM,这里不再赘述。
【参考文献】
- 机器学习-白板推到系列:https://www.bilibili.com/video/av28186618?from=search&seid=6646758741854824399
- 机器学习算法基础:https://www.bilibili.com/video/av37947862/?p=76
- 西瓜书PumpkinBook :https://datawhalechina.github.io/pumpkin-book/#/
- 刘建平 博客园:https://www.cnblogs.com/pinard/
- 周志华 《机器学习》
- 李航 《统计学方法》