前言
\quad\quad
支持向量机基本思想就是
间隔最大化
,看上去很简单,但是要想理解它并不是很容易。本篇将由基本概念出发,对公式进行推导,然后通过一些案例加以展示来介绍支持向量机。本篇篇幅比较长,需耐心仔细看完,适当动手跟着推导及代码实现。
由于博主也在学习中,所以本篇中难免会有些理解错误的地方,还望大家赐教,共同学习。
本篇的代码可见:
Github
一、
SVM
涉及的概念
SVM
\quad\quad
支持向量机(support vector machines,SVM)是一种二类分类模型。它的
基本模型
是
定义在特征空间上的间隔最大的线性分类器
,支持向量机的学习策略就是
间隔最大化
,可形式化为求解
凸二次规划的问题
。
1、分类任务
\quad\quad
分类任务就是确定对象属于哪个预定义的目标类。分类任务的输入数据是记录的集合,每条记录也称为实例或样例,用元祖
(
x
,
y
)
(x,y)
(
x
,
y
)
表示,其中
x
x
x
是属性的集合,
y
y
y
是类标记(也称目标属性)。在回归模型中,目标属性值是连续的;而在分类模型中,目标属性时离散的。
考虑二分类任务,其目标属性为
y
∈
{
0
,
1
}
y \in \{0,1\}
y
∈
{
0
,
1
}
,而线性回归模型参数的预测值
z
=
w
T
x
+
b
z = w^Tx+b
z
=
w
T
x
+
b
是实值,于是我们需要将实值
z
z
z
转换为目标属性值 0 或 1 。当然最理想的就是单位阶跃函数,但是单位阶跃函数不连续,于是使用
sigmoid函数
作为替代函数。
sigmoid函数
表达式如下:
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1 + e^{-z}}
g
(
z
)
=
1
+
e
−
z
1
Logistic回归
目的是从特征中学习出一个 0/1 分类模型,而这个分类模型是将特征的线性组合作为自变量,由于自变量的取值范围是
(
−
∞
,
+
∞
)
(-\infty, + \infty)
(
−
∞
,
+
∞
)
。因此,使用
sigmoid函数
将自变量映射到
(
0
,
1
)
(0,1)
(
0
,
1
)
上,映射后的值被认为是属于
y
=
1
y = 1
y
=
1
的概率。
假设函数为:
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}}
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
+
e
−
θ
T
x
1
根据
sigmoid函数
的特性,假设:
p
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
p(y=1|x;\theta) = h_{\theta}(x)
p
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
p
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
p(y=0|x;\theta) =1 – h_{\theta}(x)
p
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
上式表示,已知样本
xx
x
和参数
θ\theta
θ
的情况下,样本
xx
x
属于正样本 (
y=
1
y = 1
y
=
1
)和负样本(
y=
0
y = 0
y
=
0
)的条件概率。若
hθ
(
x
)
>
0.5
h_\theta(x) > 0.5
h
θ
(
x
)
>
0
.
5
则属于正样本,反之属于负样本。
进一步的,
h
θ
(
x
)
h_\theta(x)
h
θ
(
x
)
只和
θ
T
x
\theta^Tx
θ
T
x
有关,
θ
T
x
>
0
\theta^Tx>0
θ
T
x
>
0
,那么
h
θ
(
x
)
>
0.5
h_\theta(x) > 0.5
h
θ
(
x
)
>
0
.
5
,而
g
(
z
)
g(z)
g
(
z
)
只是用来映射的,真实的类别决定权在于
θ
T
x
\theta^Tx
θ
T
x
。当
θ
T
x
≫
0
\theta^Tx \gg 0
θ
T
x
≫
0
时,
h
θ
(
x
)
h_\theta(x)
h
θ
(
x
)
趋于1,反之趋于0。如果我们只从
θ
T
x
\theta^Tx
θ
T
x
出发,那么模型应该尽可能的让训练数据中
y
=
1
y =1
y
=
1
的特征
θ
T
x
≫
0
\theta^Tx \gg 0
θ
T
x
≫
0
,而
y
=
0
y = 0
y
=
0
的特征
θ
T
x
≪
0
\theta^Tx \ll 0
θ
T
x
≪
0
。
Logistic回归
就是要学习得到参数
θ
\theta
θ
,使得正例的特征远远大于0,负例的特征远远小于0,而且要在全部训练数据上达到这个目标。
接下来,尝试把
Logistic回归
做个变形:
-
首先将目标属性
y∈
{
0
,
1
}
y \in \{0,1\}
y
∈
{
0
,
1
}
替换为
y∈
{
−
1
,
1
}
y \in \{-1,1\}
y
∈
{
−
1
,
1
}
; -
将
θT
x
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
\theta^Tx = \theta_0 + \theta_1 x_1+ \theta_2 x_2+…+ \theta_n x_n
θ
T
x
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
中
θ0
\theta_0
θ
0
替换为
bb
b
; -
最后将
θ1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
\theta_1 x_1+ \theta_2 x_2+…+ \theta_n x_n
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
替换为
wT
x
=
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
w^Tx = \theta_1 x_1+ \theta_2 x_2+…+ \theta_n x_n
w
T
x
=
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
; -
得到
θT
x
=
w
T
x
+
b
\theta^Tx =w^Tx +b
θ
T
x
=
w
T
x
+
b
。
就是说,除了
yy
y
由 0 变为 -1,线性分类函数跟
Logistic回归
的形式化表示
hθ
(
x
)
=
g
(
θ
T
x
)
=
g
(
w
T
x
+
b
)
h_\theta(x) = g(\theta^Tx) = g(w^Tx +b)
h
θ
(
x
)
=
g
(
θ
T
x
)
=
g
(
w
T
x
+
b
)
没区别。
将假设函数
h
w
,
b
(
x
)
=
g
(
w
T
x
+
b
)
h_{w,b}(x) = g(w^Tx+b)
h
w
,
b
(
x
)
=
g
(
w
T
x
+
b
)
中的
g
(
z
)
g(z)
g
(
z
)
做一个简化,将其映射到
y
=
−
1
y = -1
y
=
−
1
和
y
=
1
y = 1
y
=
1
上,映射如下:
g
(
z
)
=
{
1
,
z
⩾
0
−
1
,
z
<
0
g(z) = \begin{cases} 1,& z \geqslant 0 \\ -1, & z < 0 \end{cases}
g
(
z
)
=
{
1
,
−
1
,
z
⩾
0
z
<
0
2、线性分类器
线性可分数据集:
存在某个超平面S能够将数据集的正实例和负实例完全划分到超平面的两侧,则称为线性可分数据集;否则,线性不可分。
如上图,这些数据就是线性可分的,所以可以用一条直线将这两类数据分开,二维中是一条直线,在多维中就是一个超平面。
这个超平面可以用分类函数
f
(
x
)
=
w
T
x
+
b
f(x) = w^Tx + b
f
(
x
)
=
w
T
x
+
b
表示,在进行分类时,将
x
x
x
代入
f
(
x
)
f(x)
f
(
x
)
中,如果
f
(
x
)
=
0
f(x) = 0
f
(
x
)
=
0
表示数据点在超平面上;
f
(
x
)
>
0
f(x) > 0
f
(
x
)
>
0
对应
y
=
1
y =1
y
=
1
的数据点;
f
(
x
)
<
0
f(x) < 0
f
(
x
)
<
0
对应
y
=
−
1
y=-1
y
=
−
1
的数据点。
3、
SVM
在做什么?
SVM
\quad\quad
假定给定数据如上图,圆的为正类,方的为负类,要想通过一个划分超平面(这里是二维,所以是条直线)将不同类别的样本分开。从图中我们就可以看出,能将训练样本分开的划分超平面可能有很多,但是我们应该去选择哪一个呢?
\quad\quad
直观上,我们应该选择中间红色的那个,因为它对于训练样本局部扰动的“容忍”性最好,比如,训练集外的样本可能比图中的样本更接近两类的划分超平面,这将使许多划分超平面出现错误,而红色的超平面受到的影响是最小的,也就是说,这个划分超平面的分类结果是最鲁棒的,对未知示例的泛化能力最强。
\quad\quad
找出这个划分超平面就成了关键,之前我们介绍的
感知机(点击链接)
也是寻找这个超平面,将训练集划分开,但是感知机利用误分类最小的策略,求得划分超平面,而且解有无穷多个;在所有的划分超平面中,有一个平面是最好的,它可以尽可能地让所有的样本点都离该划分超平面最远,这就是
SVM
要做的。
4、函数间隔
如图,有三个实例
A
、
B
、
C
A、B、C
A
、
B
、
C
均在划分超平面的正类一侧,预测它们的类,点
A
A
A
距离超平面较远,若预测为正类,就比较确信预测是正确的;点
C
C
C
距离超平面较近,若预测为正类就不那么确信了;点
B
B
B
介于
A
、
C
A、C
A
、
C
之间,预测其为正类的确信度也在
A
、
C
A、C
A
、
C
之间。
一般来说,一个点距离超平面的远近可以相对地表示分类预测的确信程度。
我们注意到:当一个点
x
x
x
被正确预测时,那么
w
x
+
b
wx+b
w
x
+
b
的符合与类标记
y
y
y
的符号相同。
所以可用
y
(
w
⋅
x
+
b
)
y(w\cdot x+b)
y
(
w
⋅
x
+
b
)
来表示分类的正确性及确信度。
对于给定的训练数据集
T
T
T
和超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
:
(1)定义超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
关于样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
的
函数间隔
为:
δ
i
=
y
i
(
w
⋅
x
i
+
b
)
\delta_i = y_i(w \cdot x_i+b)
δ
i
=
y
i
(
w
⋅
x
i
+
b
)
(2)定义超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
关于训练数据集
T
T
T
的函数间隔为超平面 $(w,b) $关于
T
T
T
中所有样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
的函数间隔之
最小值
,即:
δ
=
min
i
=
1
,
2
,
.
.
.
,
N
δ
i
\delta = \min_{i = 1,2,…,N}\delta_i
δ
=
i
=
1
,
2
,
.
.
.
,
N
min
δ
i
函数间隔可以表示分类预测的正确性和确信度
5、几何间隔(点到超平面距离)
样本空间中任意点
x
x
x
到超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
的距离可写为:
r
=
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
r = \frac{|w^Tx+b|}{||w||}
r
=
∣
∣
w
∣
∣
∣
w
T
x
+
b
∣
补充:
点
x
0
x_0
x
0
到超平面
S
:
w
x
+
b
=
0
S:wx+b=0
S
:
w
x
+
b
=
0
的距离
d
d
d
:
-
设
x0
x_0
x
0
在
SS
S
上面的投影为
x1
x_1
x
1
,则
wx
1
+
b
=
0
wx_1+b=0
w
x
1
+
b
=
0
; -
由向量
x0
x
1
⃗
\vec{x_0x_1}
x
0
x
1
与
SS
S
平面的法向量平行:
∣w
⋅
x
0
x
1
⃗
∣
=
(
w
1
)
2
+
(
w
2
)
2
+
.
.
.
+
(
w
N
)
2
d
=
∣
∣
w
∣
∣
d
|w \cdot \vec{x_0x_1}| = \sqrt{(w^1)^2 + (w^2)^2+…+(w^N)^2}d = ||w||d
∣
w
⋅
x
0
x
1
∣
=
(
w
1
)
2
+
(
w
2
)
2
+
.
.
.
+
(
w
N
)
2
d
=
∣
∣
w
∣
∣
d
-
∣∣
w
∣
∣
为
L
2
范
数
||w||为L_2范数
∣
∣
w
∣
∣
为
L
2
范
数
-
又:
w⋅
x
0
x
1
⃗
=
w
1
(
x
0
1
−
x
1
1
)
+
w
2
(
x
0
2
−
x
1
2
)
+
.
.
.
+
w
N
(
x
0
N
−
x
1
N
)
w \cdot \vec{x_0x_1} = w^1(x_0^1-x_1^1)+w^2(x_0^2-x_1^2)+…+w^N(x_0^N-x_1^N)
w
⋅
x
0
x
1
=
w
1
(
x
0
1
−
x
1
1
)
+
w
2
(
x
0
2
−
x
1
2
)
+
.
.
.
+
w
N
(
x
0
N
−
x
1
N
)
=w
1
x
0
1
+
w
2
x
0
2
+
.
.
.
+
w
N
x
0
N
−
(
w
1
x
1
1
+
w
2
x
1
2
+
.
.
.
+
w
N
x
1
N
)
=w^1x_0^1+w^2x_0^2+…+w^Nx_0^N-(w^1x_1^1+w^2x_1^2+…+w^Nx_1^N)
=
w
1
x
0
1
+
w
2
x
0
2
+
.
.
.
+
w
N
x
0
N
−
(
w
1
x
1
1
+
w
2
x
1
2
+
.
.
.
+
w
N
x
1
N
)
-
又有:
w⋅
x
+
b
=
0
w \cdot x + b = 0
w
⋅
x
+
b
=
0
=w
1
x
0
1
+
w
2
x
0
2
+
.
.
.
+
w
N
x
0
N
−
(
−
b
)
=w^1x_0^1+w^2x_0^2+…+w^Nx_0^N-(-b)
=
w
1
x
0
1
+
w
2
x
0
2
+
.
.
.
+
w
N
x
0
N
−
(
−
b
)
-
故:
∣∣
w
∣
∣
d
=
∣
w
⋅
x
0
+
b
∣
||w||d = |w \cdot x_0 + b|
∣
∣
w
∣
∣
d
=
∣
w
⋅
x
0
+
b
∣
d=
∣
w
⋅
x
0
+
b
∣
∣
∣
w
∣
∣
d =\frac{|w \cdot x_0 + b|}{||w||}
d
=
∣
∣
w
∣
∣
∣
w
⋅
x
0
+
b
∣
对于给定的训练数据集
T
T
T
和超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
:
(1)定义超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
关于样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
的几何间隔为:
γ
i
=
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
\gamma_i = y_i(\frac{w}{||w||} \cdot x_i+\frac{b}{||w||})
γ
i
=
y
i
(
∣
∣
w
∣
∣
w
⋅
x
i
+
∣
∣
w
∣
∣
b
)
(2)定义超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
关于训练数据集
T
T
T
的几何间隔为超平面
(
w
,
b
)
(w,b)
(
w
,
b
)
关于
T
T
T
中所有样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
的几何间隔之最小值,即:
γ
=
min
i
=
1
,
2
,
.
.
.
,
N
γ
i
\gamma = \min_{i = 1,2,…,N}\gamma_i
γ
=
i
=
1
,
2
,
.
.
.
,
N
min
γ
i
几何间隔与函数间隔的关系:
γ=
δ
∣
∣
w
∣
∣
\gamma = \frac{\delta}{||w||}
γ
=
∣
∣
w
∣
∣
δ
以上内容可参考:
点到直线的距离
6、支持向量
\quad\quad
训练数据集的样本点中与分离超平面距离最近的样本点的实例称为支持向量,即图中在黑色线上的实例点。
7、拉格朗日对偶性
\quad\quad
在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转化为对偶问题。通过求解对偶问题而得到原始问题的解。
\quad\quad
支持向量机和最大熵模型都用用到,下面我们来简单介绍下拉格朗日对偶性的主要概念和结果。
1.原始问题:
假设
f
(
x
)
,
c
i
(
x
)
,
h
j
(
x
)
f(x),c_i(x),h_j(x)
f
(
x
)
,
c
i
(
x
)
,
h
j
(
x
)
是定义在
R
n
R^n
R
n
上的连续可微函数,考虑约束最优化问题:
min
x
∈
R
n
f
(
x
)
\min_{x \in R^n} f(x)
x
∈
R
n
min
f
(
x
)
s
.
t
.
c
i
(
x
)
⩽
0
,
i
=
1
,
2
,
.
.
.
,
k
s.t. c_i(x) \leqslant 0,i = 1,2,…,k
s
.
t
.
c
i
(
x
)
⩽
0
,
i
=
1
,
2
,
.
.
.
,
k
h
j
(
x
)
=
0
,
j
=
1
,
2
,
.
.
.
,
l
h_j(x) = 0,j = 1,2,…,l
h
j
(
x
)
=
0
,
j
=
1
,
2
,
.
.
.
,
l
称此约束最优化问题为原始最优化问题或原始问题。
首先,引进广义拉格朗日函数:
L
(
x
,
α
,
β
)
=
f
(
x
)
+
∑
i
=
1
k
α
i
c
i
(
x
)
+
∑
j
=
1
k
β
j
h
j
(
x
)
L(x,\alpha,\beta) = f(x) +\sum_{i=1}^{k}\alpha_ic_i(x)+\sum_{j=1}^{k}\beta_jh_j(x)
L
(
x
,
α
,
β
)
=
f
(
x
)
+
i
=
1
∑
k
α
i
c
i
(
x
)
+
j
=
1
∑
k
β
j
h
j
(
x
)
这里,
x
=
(
x
(
1
)
,
x
(
2
)
,
。
。
。
,
x
(
n
)
)
T
∈
R
n
,
α
i
,
β
j
x=(x^{(1)},x^{(2)},。。。,x^{(n)})^T \in R^n, \alpha_i, \beta_j
x
=
(
x
(
1
)
,
x
(
2
)
,
。
。
。
,
x
(
n
)
)
T
∈
R
n
,
α
i
,
β
j
是拉格朗日乘子,
α
i
⩾
0
\alpha_i \geqslant 0
α
i
⩾
0
。
那么原始问题就是:
θ
p
(
x
)
=
max
α
,
β
:
α
i
⩾
0
L
(
x
,
α
,
β
)
\theta_p(x)=\max_{\alpha,\beta:\alpha_i \geqslant0} L(x,\alpha,\beta)
θ
p
(
x
)
=
α
,
β
:
α
i
⩾
0
max
L
(
x
,
α
,
β
)
假设给定某个
x
x
x
,如果
x
x
x
违反了约束条件,即存在某个
i
i
i
使得
c
i
(
w
)
>
0
c_i(w)>0
c
i
(
w
)
>
0
或者存在某个
j
j
j
使得
h
j
(
w
)
≠
0
h_j(w) \neq 0
h
j
(
w
)
̸
=
0
,那么就有:
θ
p
(
x
)
=
max
α
,
β
:
α
i
⩾
0
L
(
x
,
α
,
β
)
=
+
∞
\theta_p(x)=\max_{\alpha,\beta:\alpha_i \geqslant0} L(x,\alpha,\beta) = +\infty
θ
p
(
x
)
=
α
,
β
:
α
i
⩾
0
max
L
(
x
,
α
,
β
)
=
+
∞
因为若某个
ii
i
使得
ci
(
w
)
>
0
c_i(w)>0
c
i
(
w
)
>
0
,则可令
αi
→
+
∞
,
\alpha_i \rightarrow +\infty,
α
i
→
+
∞
,
若某个
jj
j
使得
hj
(
w
)
≠
0
h_j(w) \neq 0
h
j
(
w
)
̸
=
0
,则可令
βj
\beta_j
β
j
使
βj
h
j
(
x
)
→
+
∞
\beta_jh_j(x) \rightarrow +\infty
β
j
h
j
(
x
)
→
+
∞
,而其余各
αi
,
β
j
\alpha_i,\beta_j
α
i
,
β
j
均为0
相反地,如果满足约束条件,则
∑
i
=
1
k
α
i
c
i
(
x
)
⩽
0
,
∑
j
=
1
k
β
j
h
j
(
x
)
=
0
\sum_{i=1}^{k}\alpha_ic_i(x) \leqslant 0,\sum_{j=1}^{k}\beta_jh_j(x)=0
∑
i
=
1
k
α
i
c
i
(
x
)
⩽
0
,
∑
j
=
1
k
β
j
h
j
(
x
)
=
0
,由于
f
(
x
)
f(x)
f
(
x
)
加上一个小于等于的数,最大值就是加上0,所以
θ
p
(
x
)
=
f
(
x
)
\theta_p(x) = f(x)
θ
p
(
x
)
=
f
(
x
)
综上:
θ
p
(
x
)
=
{
f
(
x
)
,
x
满
足
原
始
问
题
约
束
+
∞
,
其
他
\theta_p(x) = \begin{cases} f(x), & x满足原始问题约束 \\ +\infty, & 其他\end{cases}
θ
p
(
x
)
=
{
f
(
x
)
,
+
∞
,
x
满
足
原
始
问
题
约
束
其
他
所以,如果考虑极小化问题
min
x
θ
p
(
x
)
=
min
x
max
α
,
β
:
α
i
⩾
0
L
(
x
,
α
,
β
)
\min_x \theta_p(x) = \min_x \max_{\alpha,\beta : \alpha_i \geqslant 0}L(x,\alpha,\beta)
x
min
θ
p
(
x
)
=
x
min
α
,
β
:
α
i
⩾
0
max
L
(
x
,
α
,
β
)
它与原始问题最优化问题等价的,即他们有相同的解。这也称为广义拉格朗日 函数的极小极大问题。
2.对偶问题:
定义:
θ
D
(
α
,
β
)
=
min
x
L
(
x
,
α
,
β
)
\theta_D(\alpha,\beta)=\min_xL(x,\alpha,\beta)
θ
D
(
α
,
β
)
=
x
min
L
(
x
,
α
,
β
)
再考虑极大化上式,即
max
α
,
β
:
α
i
⩾
0
θ
D
(
α
,
β
)
=
max
α
,
β
:
α
i
⩾
0
min
x
L
(
x
,
α
,
β
)
\max_{\alpha,\beta : \alpha_i \geqslant 0}\theta_D(\alpha,\beta)=\max_{\alpha,\beta : \alpha_i \geqslant 0}\min_xL(x,\alpha,\beta)
α
,
β
:
α
i
⩾
0
max
θ
D
(
α
,
β
)
=
α
,
β
:
α
i
⩾
0
max
x
min
L
(
x
,
α
,
β
)
此称为广义拉格朗日函数的极大极小问题。
可以将广义拉格朗日函数的极大极小问题表示为约束最优化问题:
max
α
,
β
θ
D
(
α
,
β
)
=
max
α
,
β
min
x
L
(
x
,
α
,
β
)
\max_{\alpha,\beta }\theta_D(\alpha,\beta)=\max_{\alpha,\beta }\min_xL(x,\alpha,\beta)
α
,
β
max
θ
D
(
α
,
β
)
=
α
,
β
max
x
min
L
(
x
,
α
,
β
)
s
.
t
.
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
k
s.t. \alpha_i \geqslant 0 ,i =1,2,…,k
s
.
t
.
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
k
称为原始问题的对偶问题。
补充:
若原始问题和对偶问题都有最优解,则:
d
∗
=
max
α
,
β
;
α
i
⩾
0
min
x
L
(
x
,
α
,
β
)
⩽
min
x
max
α
,
β
;
α
i
⩾
0
L
(
x
,
α
,
β
)
=
p
∗
d^* = \max_{\alpha,\beta;\alpha_i \geqslant 0} \min_x L(x,\alpha, \beta) \leqslant \min_x \max_{\alpha,\beta;\alpha_i \geqslant 0} L(x, \alpha, \beta) = p^*
d
∗
=
α
,
β
;
α
i
⩾
0
max
x
min
L
(
x
,
α
,
β
)
⩽
x
min
α
,
β
;
α
i
⩾
0
max
L
(
x
,
α
,
β
)
=
p
∗
对任意的
α
,
β
\alpha, \beta
α
,
β
和
x
x
x
,有:
θ
D
(
α
,
β
)
=
min
x
L
(
x
,
α
,
β
)
⩽
L
(
x
,
α
,
β
)
⩽
max
α
,
β
:
α
i
⩾
0
L
(
x
,
α
,
β
)
=
θ
p
(
x
)
\theta_D(\alpha,\beta)=\min_xL(x,\alpha,\beta) \leqslant L(x,\alpha,\beta) \leqslant \max_{\alpha,\beta:\alpha_i \geqslant0} L(x,\alpha,\beta) = \theta_p(x)
θ
D
(
α
,
β
)
=
x
min
L
(
x
,
α
,
β
)
⩽
L
(
x
,
α
,
β
)
⩽
α
,
β
:
α
i
⩾
0
max
L
(
x
,
α
,
β
)
=
θ
p
(
x
)
即:
θ
D
(
α
,
β
)
⩽
θ
p
(
x
)
\theta_D(\alpha,\beta) \leqslant \theta_p(x)
θ
D
(
α
,
β
)
⩽
θ
p
(
x
)
由于原始问题和对偶问题都有最优解,所以:
max
α
,
β
:
α
i
⩾
0
θ
D
(
α
,
β
)
⩽
min
x
θ
p
(
x
)
\max_{\alpha,\beta:\alpha_i \geqslant0}\theta_D(\alpha,\beta) \leqslant \min_x\theta_p(x)
α
,
β
:
α
i
⩾
0
max
θ
D
(
α
,
β
)
⩽
x
min
θ
p
(
x
)
即:
d
∗
⩽
p
∗
d^* \leqslant p^*
d
∗
⩽
p
∗
\quad\quad
在满足某些条件下,原始问题和对偶问题的最优解相等,即
d
∗
=
p
∗
d^* = p^*
d
∗
=
p
∗
,这是可以通过解对偶问题替代求原始问题,往往原始问题求解最优解比较困难,但是求它的对偶问题比较容易。
\quad\quad
假设函数
f
(
x
)
f(x)
f
(
x
)
和
c
i
(
x
)
c_i(x)
c
i
(
x
)
是凸函数,
h
j
(
x
)
h_j(x)
h
j
(
x
)
是仿射函数,并且不等式约束
c
i
(
x
)
c_i(x)
c
i
(
x
)
是严格可行的,则
x
∗
x^*
x
∗
和
α
∗
,
β
∗
\alpha^*,\beta^*
α
∗
,
β
∗
分别是原始问题和对偶问题的解的充分必要条件是
x
∗
,
α
∗
,
β
∗
x^*,\alpha^*,\beta^*
x
∗
,
α
∗
,
β
∗
满足
KTT
条件:
∇
x
L
(
x
∗
,
α
∗
,
β
∗
)
=
0
\nabla_xL(x^*,\alpha^*,\beta^*) = 0
∇
x
L
(
x
∗
,
α
∗
,
β
∗
)
=
0
α
i
∗
c
i
(
x
∗
)
=
0
,
i
=
1
,
2
,
.
.
.
,
k
\alpha_i^*c_i(x^*) = 0, \quad\quad i=1,2,…,k
α
i
∗
c
i
(
x
∗
)
=
0
,
i
=
1
,
2
,
.
.
.
,
k
c
i
(
x
∗
)
⩽
0
,
i
=
1
,
2
,
.
.
.
,
k
c_i(x^*) \leqslant 0, \quad\quad i=1,2,…,k
c
i
(
x
∗
)
⩽
0
,
i
=
1
,
2
,
.
.
.
,
k
α
i
∗
⩾
0
,
i
=
1
,
2
,
.
.
.
,
k
\alpha_i^* \geqslant 0, \quad\quad i=1,2,…,k
α
i
∗
⩾
0
,
i
=
1
,
2
,
.
.
.
,
k
h
j
(
x
∗
)
=
0
,
j
=
1
,
2
,
.
.
.
,
l
h_j(x^*) = 0, \quad\quad j=1,2,…,l
h
j
(
x
∗
)
=
0
,
j
=
1
,
2
,
.
.
.
,
l
\quad\quad
以上介绍了理解支持向量机需要的基本概念,接下来我们将分别介绍线性可分支持向量机、线性支持向量机和线性不可分支持向量机。
3.拉格朗日乘子法帮助理解
待优化目标:
y
=
0.6
∗
(
θ
1
+
θ
2
)
2
−
θ
1
∗
θ
2
y=0.6 * (\theta_1 +\theta_2)^2 – \theta_1 * \theta_2
y
=
0
.
6
∗
(
θ
1
+
θ
2
)
2
−
θ
1
∗
θ
2
约束条件:
x
2
−
x
+
1
=
0
x
∈
[
−
4
,
4
]
x^2 – x + 1=0 \quad\quad x \in [-4,4]
x
2
−
x
+
1
=
0
x
∈
[
−
4
,
4
]
上图中曲面为待优化目标,红点形成的曲线便是约束条件,表示要在约束条件下找到目标函数的最优解(最小值)
代码可见:
01_拉格朗日乘子法.py
二、线性可分支持向量机
\quad\quad
我们知道,支持向量机的学习目标是
在特征空间找到一个分离超平面,能将实例分到不同的类。
\quad\quad
当训练数据集线性可分时,存在无穷个分离超平面将两类数据正确分开。感知机利用误分类最小化的策略,求得分离超平面,不过这时的解有无穷多个。
线性可分支持向量机利用间隔最大化求最优分离超平面,并且解是唯一的。
\quad\quad
那么我们如何使得间隔最大化并求得分离超平面呢?
1、间隔最大化(硬间隔)
\quad\quad
间隔最大化的直观解释是:对训练数据集找到
几何间隔最大
的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而求对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开,这样的超平面对于未知的新实例有很好的分类预测能力。
\quad\quad
下面我们考虑如何求得一个几何间隔最大的分离超平面,即最大间隔分离超平面。我们可以将这个问题表示为下面的约束最优化问题:
max
w
,
b
γ
s
.
t
.
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
⩾
γ
,
i
=
1
,
2
,
.
.
.
,
N
\max_{w,b} \quad \gamma \\ s.t. \quad y_i(\frac{w}{||w||} \cdot x_i + \frac{b}{||w||}) \geqslant \gamma, \quad i = 1,2,…,N
w
,
b
max
γ
s
.
t
.
y
i
(
∣
∣
w
∣
∣
w
⋅
x
i
+
∣
∣
w
∣
∣
b
)
⩾
γ
,
i
=
1
,
2
,
.
.
.
,
N
即我们希望最大化超平面
(w
,
b
)
(w,b)
(
w
,
b
)
关于训练数据集的几何间隔
γ\gamma
γ
;
约束条件表示:超平面关于每个样本点的几何间隔至少是
γ\gamma
γ
进一步地,我们考虑几何间隔和函数间隔的关系。
γ
=
δ
∣
∣
w
∣
∣
\gamma =\frac{\delta}{||w||}
γ
=
∣
∣
w
∣
∣
δ
此处:
δ
\delta
δ
为函数间隔
y
i
(
w
⋅
x
i
+
b
)
y_i(w\cdot x_i +b)
y
i
(
w
⋅
x
i
+
b
)
这是可将上面的约束问题改为:
max
w
,
b
δ
∣
∣
w
∣
∣
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
⩾
δ
,
i
=
1
,
2
,
.
.
.
,
N
\max_{w,b} \quad \frac{\delta}{||w||} \\ s.t. \quad y_i(w\cdot x_i +b) \geqslant \delta, \quad i = 1,2,…,N
w
,
b
max
∣
∣
w
∣
∣
δ
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
⩾
δ
,
i
=
1
,
2
,
.
.
.
,
N
这是我们需要注意到,
函数间隔
δ
\delta
δ
的取值并不影响最优化问题的解。
这里,假设我们将
w,
b
w,b
w
,
b
按比例改为
λw
,
λ
b
\lambda w,\lambda b
λ
w
,
λ
b
,这是函数间隔变为
yi
(
λ
w
⋅
x
i
+
λ
b
)
=
λ
δ
y_i(\lambda w \cdot x_i + \lambda b) = \lambda \delta
y
i
(
λ
w
⋅
x
i
+
λ
b
)
=
λ
δ
;
此时,函数间隔的改变并没有改变上面的约束,对目标函数的优化也没用影响,也就是说,它产生一个等价的最优化问题;
这样,我们就可以把函数间隔
δ\delta
δ
特殊化,取
δ=
1
\delta = 1
δ
=
1
将上面
δ=
1
\delta = 1
δ
=
1
,带入原来最优化问题中,注意到最大化
1∣
∣
w
∣
∣
\frac{1}{||w||}
∣
∣
w
∣
∣
1
和最小化
12
∣
∣
w
∣
∣
2
\frac{1}{2}||w||^2
2
1
∣
∣
w
∣
∣
2
是等价的。
我们将得到
线性支持向量机学习的最优化问题:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\min_{w,b} \quad \frac{1}{2}||w||^2 \\ s.t. \quad y_i(w\cdot x_i +b) – 1 \geqslant 0, \quad i = 1,2,…,N
w
,
b
min
2
1
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
上面这个约束最优化问题是一个凸二次规划的问题。
如果求出了约束最优化问题的解
(
w
∗
,
b
∗
)
(w^*,b^*)
(
w
∗
,
b
∗
)
,那么就可以得到最大间隔分离超平面
w
∗
⋅
x
+
b
∗
=
0
w^* \cdot x+b^*=0
w
∗
⋅
x
+
b
∗
=
0
及分类决策函数
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
f(x) = sign(w^* \cdot x+b^*)
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
,即线性可分支持向量机。
2、线性可分支持向量机学习算法——最大间隔法如下:
输入:线性可分训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T = \{(x_1,y_1),(x_2,y_2),…,(x_N,y_N)\}
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,其中,
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
x_i \in \mathcal{X} = R^n,y_i \in \mathcal{Y}=\{-1,+1\},i=1,2,…,N
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
;
输出:最大间隔分离超平面和分类决策函数。
(1)构造并求解约束最优化问题:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\min_{w,b} \quad \frac{1}{2}||w||^2 \\ s.t. \quad y_i(w\cdot x_i +b) – 1 \geqslant 0, \quad i = 1,2,…,N
w
,
b
min
2
1
∣
∣
w
∣
∣
2
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
求得最优解
w
∗
,
b
∗
w^*,b^*
w
∗
,
b
∗
;
(2)由此得到分离超平面:
w
∗
⋅
x
+
b
∗
=
0
w^* \cdot x+b^*=0
w
∗
⋅
x
+
b
∗
=
0
分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
f(x) = sign(w^* \cdot x+b^*)
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
若训练数据集线性可分,则可将训练数据集中的样本点完全正确分开的最大间隔分离超平面存在且唯一。
我们知道
支持向量
就是距离分离超平面最近的实例点。注意到上面约束问题,支持向量便是使约束条件等号成立的点,即:
y
i
(
w
⋅
x
+
b
)
−
1
=
0
y_i(w\cdot x+b) – 1 =0
y
i
(
w
⋅
x
+
b
)
−
1
=
0
在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用,如果移动支持向量将改变所求的解;但是如果在间隔边界以外移动其他实例点,甚至去掉这些点,则解是不会改变的。
3、对偶算法
\quad\quad
为了求解线性可分支持向量机的最优化问题,将原来的约束最优化问题作为原始问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。
这样做的有点:
对偶问题往往更容易求解
自然引入核函数,进而推广到非线性分类问题(这在后面会介绍)
现在我们就开始构建原始问题的对偶问题:
(1)首先构建拉格朗日函数
L
(
w
,
b
,
α
)
=
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
N
α
i
[
y
i
(
w
⋅
x
+
b
)
−
1
]
L(w,b,\alpha) = \frac{1}{2}||w||^2-\sum_{i=1}^N \alpha_i[y_i(w \cdot x + b) – 1]
L
(
w
,
b
,
α
)
=
2
1
∣
∣
w
∣
∣
2
−
i
=
1
∑
N
α
i
[
y
i
(
w
⋅
x
+
b
)
−
1
]
其中,
α
i
⩾
0
,
α
=
(
α
1
,
α
2
,
.
.
.
,
α
N
)
T
\alpha_i \geqslant 0,\alpha = (\alpha_1,\alpha_2,…,\alpha_N)^T
α
i
⩾
0
,
α
=
(
α
1
,
α
2
,
.
.
.
,
α
N
)
T
为拉格朗日乘子向量。
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题。
max
α
min
w
,
b
L
(
w
,
b
,
α
)
\max_\alpha \min_{w,b} L(w,b,\alpha)
α
max
w
,
b
min
L
(
w
,
b
,
α
)
即,需要先求
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L
(
w
,
b
,
α
)
对
w
,
b
w,b
w
,
b
的极小,再求对
α
\alpha
α
的极大。
(2)求
min
w
,
b
L
(
w
,
b
,
α
)
\min_{w,b} L(w,b,\alpha)
min
w
,
b
L
(
w
,
b
,
α
)
将拉格朗日函数
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L
(
w
,
b
,
α
)
分别对
w
,
b
w,b
w
,
b
求偏导并令其等于0
∇
w
L
(
w
,
b
,
α
)
=
w
−
∑
i
=
1
N
α
i
y
i
x
i
=
0
∇
b
L
(
w
,
b
,
α
)
=
0
\nabla_wL(w,b,\alpha)=w-\sum_{i=1}^{N}\alpha_iy_ix_i=0 \\ \nabla_bL(w,b,\alpha)=0
∇
w
L
(
w
,
b
,
α
)
=
w
−
i
=
1
∑
N
α
i
y
i
x
i
=
0
∇
b
L
(
w
,
b
,
α
)
=
0
得:
w
=
∑
i
=
1
N
α
i
y
i
x
i
∑
i
=
1
N
α
i
y
i
=
0
w=\sum_{i=1}^{N}\alpha_iy_ix_i \\ \sum_{i=1}^{N}\alpha_iy_i=0
w
=
i
=
1
∑
N
α
i
y
i
x
i
i
=
1
∑
N
α
i
y
i
=
0
代入拉格朗日函数中,即得:
L
(
w
,
b
,
α
)
=
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
y
i
(
(
∑
j
=
1
N
α
j
y
j
x
j
)
⋅
x
i
+
b
)
+
∑
i
=
1
N
α
i
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
L(w,b,\alpha) = \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)-\sum_{i=1}^N\alpha_iy_i((\sum_{j=1}^N\alpha_jy_jx_j)\cdot x_i+b)+\sum_{i=1}^N\alpha_i \\ = -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)+\sum_{i=1}^N\alpha_i
L
(
w
,
b
,
α
)
=
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
i
=
1
∑
N
α
i
y
i
(
(
j
=
1
∑
N
α
j
y
j
x
j
)
⋅
x
i
+
b
)
+
i
=
1
∑
N
α
i
=
−
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
i
=
1
∑
N
α
i
即:
min
w
,
b
L
(
w
,
b
,
α
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
\min_{w,b} L(w,b,\alpha)= -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)+\sum_{i=1}^N\alpha_i
w
,
b
min
L
(
w
,
b
,
α
)
=
−
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
i
=
1
∑
N
α
i
(3)求
min
w
,
b
L
(
w
,
b
,
α
)
\min_{w,b} L(w,b,\alpha)
min
w
,
b
L
(
w
,
b
,
α
)
对
α
\alpha
α
的极大,即是对偶问题:
max
α
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\max_\alpha \quad -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)+\sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^{N}\alpha_iy_i=0 \\ \alpha_i \geqslant 0, \quad i=1,2,…,N
α
max
−
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
将上式的目标函数由求极大转换为求极小,得到等价的
对偶最优化问题:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\min_\alpha \quad \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)-\sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^{N}\alpha_iy_i=0 \\ \alpha_i \geqslant 0, \quad i=1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
对于线性可分训练数据集,假设对偶最优化问题对
α\alpha
α
的解为
α∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
\alpha^*=(\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^T
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
,可以由
α∗
\alpha^*
α
∗
求得原始最优化问题对
(w
,
b
)
(w,b)
(
w
,
b
)
的解
w∗
,
b
∗
w^*,b^*
w
∗
,
b
∗
- 上式可以通过SMO算法求解,具体内容后面将介绍
存在以下定理:
假设
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
\alpha^*=(\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^T
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
是对偶最优化问题的解,则存在下标
j
j
j
,使得
α
j
∗
>
0
\alpha_j^* > 0
α
j
∗
>
0
,并可求得原始最优化问题的解
w
∗
,
b
∗
w^*,b^*
w
∗
,
b
∗
:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
w^* = \sum_{i=1}^N\alpha_i^*y_ix_i \\ b^* = y_j – \sum_{i=1}^N\alpha_i^*y_i(x_i \cdot x_j)
w
∗
=
i
=
1
∑
N
α
i
∗
y
i
x
i
b
∗
=
y
j
−
i
=
1
∑
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
至此,分离超平面可以写成:
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
=
0
\sum_{i=1}^N\alpha_i^*y_i( x \cdot x_i)+b^* = 0
i
=
1
∑
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
=
0
分类决策函数可以写为:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
)
f(x) = sign(\sum_{i=1}^N\alpha_i^*y_i( x \cdot x_i)+b^* )
f
(
x
)
=
s
i
g
n
(
i
=
1
∑
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
)
这就是说,分类决策函数只依赖于输入
xx
x
和训练数据集样本输入的内积。
4、线性可分支持向量机学习算法——对偶算法:
输入:线性可分训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T = \{(x_1,y_1),(x_2,y_2),…,(x_N,y_N)\}
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,其中,
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
x_i \in \mathcal{X} = R^n,y_i \in \mathcal{Y}=\{-1,+1\},i=1,2,…,N
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
;
输出:最大间隔分离超平面和分类决策函数。
(1)构造并求解约束最优化问题:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\min_\alpha \quad \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)-\sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^{N}\alpha_iy_i=0 \\ \alpha_i \geqslant 0, \quad i=1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
求得最优解
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
\alpha^*=(\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^T
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
;
(2)计算:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^* = \sum_{i=1}^N\alpha_i^*y_ix_i
w
∗
=
i
=
1
∑
N
α
i
∗
y
i
x
i
并选择
α
∗
\alpha^*
α
∗
的一个正分量
α
j
∗
>
0
\alpha_j^* > 0
α
j
∗
>
0
,计算:
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^* = y_j – \sum_{i=1}^N\alpha_i^*y_i(x_i \cdot x_j)
b
∗
=
y
j
−
i
=
1
∑
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
(3)求得分离超平面:
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
=
0
\sum_{i=1}^N\alpha_i^*y_i( x \cdot x_i)+b^* = 0
i
=
1
∑
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
=
0
分类决策函数:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
)
f(x) = sign(\sum_{i=1}^N\alpha_i^*y_i( x \cdot x_i)+b^* )
f
(
x
)
=
s
i
g
n
(
i
=
1
∑
N
α
i
∗
y
i
(
x
⋅
x
i
)
+
b
∗
)
5、下面通过具体的数据,比较两个算法的计算:
数据如下图:正例点是
x
1
=
(
3
,
3
)
T
,
x
2
=
(
4
,
3
)
T
,
负
例
点
是
x
3
=
(
1
,
1
)
T
x_1 = (3,3)^T,x_2 = (4,3)^T,负例点是x_3 = (1,1)^T
x
1
=
(
3
,
3
)
T
,
x
2
=
(
4
,
3
)
T
,
负
例
点
是
x
3
=
(
1
,
1
)
T
问题:试求最大间隔分离超平面?
1.最大间隔法求解:
解:按照最大间隔法,根据训练数据集构造约束最优化问题:
min
w
,
b
1
2
(
w
1
2
+
w
2
2
)
s
.
t
.
3
w
1
+
3
w
2
+
b
⩾
0
4
w
1
+
3
w
2
+
b
⩾
0
−
1
w
1
−
1
w
2
−
b
⩾
0
\min_{w,b} \quad \frac{1}{2}(w_1^2+w_2^2) \\ s.t. \quad 3w_1+3w_2 + b \geqslant 0 \\ \quad \ \ \ \ \ \ 4w_1+3w_2 + b \geqslant 0 \\ \quad \ \ \ \ \ \ -1w_1-1w_2 – b \geqslant 0
w
,
b
min
2
1
(
w
1
2
+
w
2
2
)
s
.
t
.
3
w
1
+
3
w
2
+
b
⩾
0
4
w
1
+
3
w
2
+
b
⩾
0
−
1
w
1
−
1
w
2
−
b
⩾
0
求得此最优化问题的解为:
w
1
=
w
2
=
1
2
,
b
=
−
2
w_1=w_2=\frac{1}{2},b=-2
w
1
=
w
2
=
2
1
,
b
=
−
2
。于是最大间隔分离超平面为:
1
2
x
(
1
)
+
1
2
x
(
2
)
−
2
=
0
\frac{1}{2}x^{(1)}+\frac{1}{2}x^{(2)}-2 = 0
2
1
x
(
1
)
+
2
1
x
(
2
)
−
2
=
0
其中,
x
1
=
(
3
,
3
)
T
与
x
3
=
(
1
,
1
)
T
x_1 = (3,3)^T 与 x_3 = (1,1)^T
x
1
=
(
3
,
3
)
T
与
x
3
=
(
1
,
1
)
T
是支持向量。
2.对偶算法求解:
解:根据所给数据,对偶问题是:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
=
1
2
(
18
α
1
2
+
25
α
2
2
+
2
α
3
2
+
42
α
1
α
2
−
12
α
1
α
3
−
14
α
2
α
3
)
−
α
1
−
α
2
−
α
3
s
.
t
.
α
1
+
α
2
−
α
3
=
0
α
i
⩾
0
,
i
=
1
,
2
,
3
\min_\alpha \quad \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i \cdot x_j)-\sum_{i=1}^N\alpha_i \\ = \frac{1}{2}(18\alpha_1^2+25\alpha_2^2+2\alpha_3^2+42\alpha_1\alpha_2-12\alpha_1\alpha_3-14\alpha_2\alpha_3)-\alpha_1-\alpha_2-\alpha_3 \\ s.t. \alpha_1+\alpha_2-\alpha_3=0 \\ \alpha_i \geqslant 0, \quad i=1,2,3
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
i
=
1
∑
N
α
i
=
2
1
(
1
8
α
1
2
+
2
5
α
2
2
+
2
α
3
2
+
4
2
α
1
α
2
−
1
2
α
1
α
3
−
1
4
α
2
α
3
)
−
α
1
−
α
2
−
α
3
s
.
t
.
α
1
+
α
2
−
α
3
=
0
α
i
⩾
0
,
i
=
1
,
2
,
3
解这一最优化问题,将
α
3
=
α
1
+
α
2
\alpha_3 = \alpha_1+\alpha_2
α
3
=
α
1
+
α
2
代入目标函数并记为:
s
(
α
1
,
α
2
)
=
4
α
1
2
+
13
2
α
2
2
+
10
α
1
α
2
−
2
α
1
−
2
α
2
s(\alpha_1,\alpha_2) = 4\alpha_1^2+\frac{13}{2}\alpha_2^2+10\alpha_1\alpha_2-2\alpha_1-2\alpha_2
s
(
α
1
,
α
2
)
=
4
α
1
2
+
2
1
3
α
2
2
+
1
0
α
1
α
2
−
2
α
1
−
2
α
2
对
α
1
,
α
2
\alpha_1,\alpha_2
α
1
,
α
2
求偏导数并令其为0,易知
s
(
α
1
,
α
2
)
s(\alpha_1,\alpha_2)
s
(
α
1
,
α
2
)
在点
(
3
2
,
−
1
)
T
(\frac{3}{2},-1)^T
(
2
3
,
−
1
)
T
取极值,但该点不满足约束条件
α
2
⩾
0
\alpha_2 \geqslant 0
α
2
⩾
0
,所以极小值应在边界上达到。
当
α
1
=
0
\alpha_1 = 0
α
1
=
0
时,最小值
s
(
0
,
2
13
)
=
−
2
13
s(0, \frac{2}{13}) = -\frac{2}{13}
s
(
0
,
1
3
2
)
=
−
1
3
2
;当
α
2
=
0
\alpha_2 = 0
α
2
=
0
时,最小值
s
(
1
4
,
0
)
=
−
1
4
s(\frac{1}{4},0) = -\frac{1}{4}
s
(
4
1
,
0
)
=
−
4
1
。于是,
s
(
α
1
,
α
2
)
s(\alpha_1,\alpha_2)
s
(
α
1
,
α
2
)
在
α
1
=
1
4
,
α
2
=
0
\alpha_1=\frac{1}{4},\alpha_2=0
α
1
=
4
1
,
α
2
=
0
达到最小,此时
α
3
=
α
1
+
α
2
=
1
4
\alpha_3 = \alpha_1+\alpha_2 = \frac{1}{4}
α
3
=
α
1
+
α
2
=
4
1
这样,
α
1
∗
=
α
3
∗
=
1
4
\alpha_1^*=\alpha_3^* = \frac{1}{4}
α
1
∗
=
α
3
∗
=
4
1
对应的实例点
x
1
,
x
3
x_1,x_3
x
1
,
x
3
是支持向量,根据:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^* = \sum_{i=1}^N\alpha_i^*y_ix_i
w
∗
=
i
=
1
∑
N
α
i
∗
y
i
x
i
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^* = y_j – \sum_{i=1}^N\alpha_i^*y_i(x_i \cdot x_j)
b
∗
=
y
j
−
i
=
1
∑
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
计算得:
w
∗
=
1
4
(
1
)
(
3
,
3
)
+
1
4
(
−
1
)
(
1
,
1
)
=
(
1
2
,
1
2
)
w
1
∗
=
w
2
∗
=
1
2
w^* = \frac{1}{4}(1)(3,3)+\frac{1}{4}(-1)(1,1) = (\frac{1}{2},\frac{1}{2})\\ w_1^*=w_2^* = \frac{1}{2}
w
∗
=
4
1
(
1
)
(
3
,
3
)
+
4
1
(
−
1
)
(
1
,
1
)
=
(
2
1
,
2
1
)
w
1
∗
=
w
2
∗
=
2
1
取点
x
1
=
(
3
,
3
)
T
求
b
∗
,
此
时
j
=
1
,
y
j
=
1
x_1=(3,3)^T求b^*,此时j=1,y_j=1
x
1
=
(
3
,
3
)
T
求
b
∗
,
此
时
j
=
1
,
y
j
=
1
b
∗
=
1
−
[
1
4
(
1
)
(
x
1
⋅
x
1
)
+
1
4
(
−
1
)
(
x
3
⋅
x
1
)
]
=
1
−
(
1
4
∗
18
−
1
4
∗
6
)
=
−
2
b^* = 1 – [\frac{1}{4}(1)(x_1 \cdot x_1)+\frac{1}{4}(-1)(x_3 \cdot x_1)] \\ = 1-(\frac{1}{4}*18-\frac{1}{4}*6)= -2
b
∗
=
1
−
[
4
1
(
1
)
(
x
1
⋅
x
1
)
+
4
1
(
−
1
)
(
x
3
⋅
x
1
)
]
=
1
−
(
4
1
∗
1
8
−
4
1
∗
6
)
=
−
2
于是分离超平面为:
1
2
x
(
1
)
+
1
2
x
(
2
)
−
2
=
0
\frac{1}{2}x^{(1)}+\frac{1}{2}x^{(2)}-2 = 0
2
1
x
(
1
)
+
2
1
x
(
2
)
−
2
=
0
分类决策函数为:
f
(
x
)
=
s
i
g
n
(
1
2
x
(
1
)
+
1
2
x
(
2
)
−
2
)
f(x) = sign(\frac{1}{2}x^{(1)}+\frac{1}{2}x^{(2)}-2 )
f
(
x
)
=
s
i
g
n
(
2
1
x
(
1
)
+
2
1
x
(
2
)
−
2
)
由上面两种方法可见,两种方法得到的超平面是一样的,也验证了对偶方法的有效性。
至此,我们得到目标函数:
max
α
i
⩾
0
L
(
w
,
b
,
α
)
=
max
α
i
⩾
0
1
2
∣
∣
w
∣
∣
2
−
∑
i
=
1
N
α
i
[
y
i
(
w
⋅
x
+
b
)
−
1
]
\max_{\alpha_i \geqslant 0}L(w,b,\alpha) = \max_{\alpha_i \geqslant 0} \frac{1}{2}||w||^2-\sum_{i=1}^N \alpha_i[y_i(w \cdot x + b) – 1]
α
i
⩾
0
max
L
(
w
,
b
,
α
)
=
α
i
⩾
0
max
2
1
∣
∣
w
∣
∣
2
−
i
=
1
∑
N
α
i
[
y
i
(
w
⋅
x
+
b
)
−
1
]
注意到,如果
x
i
x_i
x
i
是支持向量的话,上式中
y
i
(
w
⋅
x
+
b
)
−
1
=
0
y_i(w \cdot x + b) – 1 = 0
y
i
(
w
⋅
x
+
b
)
−
1
=
0
(因为至此向量的函数间隔为1),而对于非支持向量来说,函数间隔会大于1,因此
y
i
(
w
⋅
x
+
b
)
−
1
>
0
y_i(w \cdot x + b) – 1 > 0
y
i
(
w
⋅
x
+
b
)
−
1
>
0
,而
α
i
⩾
0
\alpha_i \geqslant 0
α
i
⩾
0
,为了满足最大化,
α
i
\alpha_i
α
i
必须等于0。
到目前为止,线性可分支持向量机只能处理线性可分数据集,不过,在得到了对偶问题形式之后,通过核函数(
Kernel
)推广到非线性的情况就变成了一个非常容易的事情了。
三、核函数
Kernel
Kernel
\quad\quad
在现实任务中,我们得到的一般都不是线性可分的,这时线性可分支持向量机就不适用了。因为这时我们之前所提到的不等式约束并不能都成立。那么对于非线性的数据
SVM
是如何处理的呢?
\quad\quad
对于非线性的情况,
SVM
的处理方法是选择一个核函数
k
(
⋅
,
⋅
)
k(\cdot,\cdot)
k
(
⋅
,
⋅
)
,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。
\quad\quad
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优的分离超平面,从而把平面上本身不好分的非线性数据分开。如图所示,一维数据在二维空间无法划分,从而映射到三维空间里划分:
因此,在没有核函数之前,当我们希望用前面线性分类问题的方法来解决这个问题,就需要选择一个非线性特征集,并将数据改写成新的表达方式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性分类器。
f
(
x
)
=
∑
i
=
1
N
w
i
ϕ
i
(
x
)
+
b
f(x) = \sum_{i=1}^N w_i \phi_i(x) + b
f
(
x
)
=
i
=
1
∑
N
w
i
ϕ
i
(
x
)
+
b
其中,
ϕ
\phi
ϕ
:表示从输入空间到某个特征空间的映射,这意味着线性分类方法求解非线性分类问题一般分为两步:
- 使用一个变换将原空间的数据映射到新空间;
- 在新空间里使用线性分类学习方法从训练数据中学习分类模型。
1、核函数:如何处理非线性数据
\quad\quad
假设我们有如下图所示的两类数据,分别为两个圆圈的形状,很明显这样的数据是线性不可分的,那么我们如何把这两类数据分开呢?
\quad\quad
事实上,上图数据集使用两个不同半径的圆圈加上少量噪声生成得到的,所以,一个理想的分类应该是一个“圆圈”而不是一条直线(超平面),如果用
X
1
X_1
X
1
和
X
2
X_2
X
2
来表示这个二维平面的两个坐标,我们知道一个二次曲线的方程可以写成如下形式:
a
1
X
1
+
a
2
X
1
2
+
a
3
X
2
+
a
4
X
2
2
+
a
5
X
1
X
2
+
a
6
=
0
a_1X_1 + a_2X_1^2+a_3X_2+a_4X_2^2+a_5X_1X_2+a_6=0
a
1
X
1
+
a
2
X
1
2
+
a
3
X
2
+
a
4
X
2
2
+
a
5
X
1
X
2
+
a
6
=
0
注意上面的形式,如果我们构造另一个五维的空间,其中五个坐标的值分别为:
Z
1
=
X
1
,
Z
2
=
X
1
2
,
Z
3
=
X
2
,
Z
4
=
X
2
2
,
Z
5
=
X
1
X
2
Z_1 = X_1,Z_2=X_1^2,Z_3=X_2,Z_4=X_2^2,Z_5=X_1X_2
Z
1
=
X
1
,
Z
2
=
X
1
2
,
Z
3
=
X
2
,
Z
4
=
X
2
2
,
Z
5
=
X
1
X
2
那么,上面的方程就可以写成:
∑
i
=
1
5
a
i
Z
i
+
a
6
=
0
\sum_{i=1}^5a_iZ_i + a_6 =0
i
=
1
∑
5
a
i
Z
i
+
a
6
=
0
\quad\quad
关于新的坐标
Z
Z
Z
,如果我们做一个映射
ϕ
:
R
2
→
R
5
\phi:R_2 \rightarrow R_5
ϕ
:
R
2
→
R
5
,将
X
X
X
按照上面的规则映射为
Z
Z
Z
,那么在的新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了,这正是
Kernel
方法处理非线性问题的基本思想。
\quad\quad
再进一步描述
Kernel
的细节之前,不妨再来看看上述例子在映射过后的直观形态。当然,我们无法把五维空间画出来,不过由于我们生成数据的时候用了特殊的情形,所以这里的超平面实际的方程是这个样子的(圆心在
X
2
X_2
X
2
轴上的一个正圆):
∑
i
=
1
5
a
i
Z
i
+
a
6
=
0
\sum_{i=1}^5a_iZ_i + a_6 =0
i
=
1
∑
5
a
i
Z
i
+
a
6
=
0
\quad\quad
因此我只需要把它映射到
Z
1
=
X
1
2
,
Z
2
=
X
2
2
,
Z
3
=
X
2
Z_1 = X_1^2,Z_2 = X_2^2,Z_3 = X_2
Z
1
=
X
1
2
,
Z
2
=
X
2
2
,
Z
3
=
X
2
,这样一个三维空间中即可,下图即是映射之后的结果,将坐标经过适当的旋转,就可以很明显地看出,数据是可以通过的一个平面来分开的,如下图:
核函数相当于把原来的分类函数:
f
(
x
)
=
∑
i
=
1
n
α
i
y
i
⟨
x
i
,
x
⟩
+
b
f(x) = \sum_{i=1}^n\alpha_iy_i \langle x_i, x \rangle + b
f
(
x
)
=
i
=
1
∑
n
α
i
y
i
⟨
x
i
,
x
⟩
+
b
映射成:
f
(
x
)
=
∑
i
=
1
n
α
i
y
i
⟨
ϕ
(
x
i
)
,
ϕ
(
x
)
⟩
+
b
f(x) = \sum_{i=1}^n\alpha_iy_i \langle \phi(x_i), \phi(x) \rangle + b
f
(
x
)
=
i
=
1
∑
n
α
i
y
i
⟨
ϕ
(
x
i
)
,
ϕ
(
x
)
⟩
+
b
而其中的
α
\alpha
α
可以通过求解如下对偶问题得到:
max
α
∑
i
=
1
n
α
i
−
1
2
∑
i
,
j
=
1
n
α
i
α
j
y
i
y
j
⟨
ϕ
(
x
i
)
,
ϕ
(
x
)
⟩
\max_\alpha \sum_{i=1}^n \alpha_i – \frac{1}{2} \sum_{i,j=1}^n \alpha_i \alpha_j y_i y_j\langle \phi(x_i), \phi(x) \rangle
α
max
i
=
1
∑
n
α
i
−
2
1
i
,
j
=
1
∑
n
α
i
α
j
y
i
y
j
⟨
ϕ
(
x
i
)
,
ϕ
(
x
)
⟩
s
.
t
.
α
i
⩾
0
i
=
1
,
2
,
.
.
.
,
n
s.t. \quad \alpha_i \geqslant0 \quad\quad i = 1,2,…,n
s
.
t
.
α
i
⩾
0
i
=
1
,
2
,
.
.
.
,
n
∑
i
=
1
n
α
i
y
i
=
0
\sum_{i=1}^n \alpha_i y_i =0
i
=
1
∑
n
α
i
y
i
=
0
得到以上对偶问题,似乎我们就可以解决非线性问题,我们只需要找到一个映射
ϕ
(
⋅
)
\phi(\cdot)
ϕ
(
⋅
)
,然后将非线性数据映射到新空间中,再做线性
SVM
即可,然而事实上并没有这么简单。
- 在最初的例子里,我们对一个二维空间最映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到五维空间;
-
如果原始空间是三维的,那么我们就会得到:3个一次项+3个二次交叉项+3个平方项+1个三次交叉项+6个一次和二次交叉项=19维的空间,这个数目层指数级爆炸增长,从而必定给
ϕ(
⋅
)
\phi(\cdot)
ϕ
(
⋅
)
的计算带来困难,而且如果遇到无穷维的情况,就根本无法计算了。
这时候,
Kernel
核函数就派上用场了。
我们还使用前面的二维原始空间,设两个向量
x
1
=
(
η
1
,
η
2
)
T
x_1 = (\eta_1, \eta_2)^T
x
1
=
(
η
1
,
η
2
)
T
和
x
2
=
(
ξ
1
,
ξ
2
)
T
x_2 = (\xi_1, \xi_2)^T
x
2
=
(
ξ
1
,
ξ
2
)
T
,而
ϕ
(
⋅
)
\phi(\cdot)
ϕ
(
⋅
)
即是前面说的五维空间的映射,因此映射后的内积为:
⟨
ϕ
(
x
1
)
,
ϕ
(
x
2
)
⟩
=
η
1
ξ
1
+
η
1
2
ξ
1
2
+
η
2
ξ
2
+
η
2
2
ξ
2
2
+
η
1
η
2
ξ
1
ξ
2
\langle \phi(x_1),\phi(x_2)\rangle = \eta_1\xi_1 + \eta_1^2\xi_1^2+\eta_2\xi_2+\eta_2^2\xi_2^2+\eta_1\eta_2\xi_1\xi_2
⟨
ϕ
(
x
1
)
,
ϕ
(
x
2
)
⟩
=
η
1
ξ
1
+
η
1
2
ξ
1
2
+
η
2
ξ
2
+
η
2
2
ξ
2
2
+
η
1
η
2
ξ
1
ξ
2
上式可通过如下推导得到:
- 将
x1
、
x
2
x_1、x_2
x
1
、
x
2
通过
ϕ(
⋅
)
\phi(\cdot)
ϕ
(
⋅
)
映射到五维空间,然后计算内积:
ϕ(
x
1
)
→
(
η
1
,
η
1
2
,
η
2
,
η
2
2
,
η
1
η
2
)
ϕ
(
x
1
)
→
(
ξ
1
,
ξ
1
2
,
ξ
2
,
ξ
2
2
,
ξ
1
ξ
2
)
\phi(x_1) \rightarrow (\eta_1,\eta_1^2,\eta_2,\eta_2^2,\eta_1\eta_2) \quad\quad \phi(x_1) \rightarrow (\xi_1,\xi_1^2,\xi_2,\xi_2^2,\xi_1\xi_2)
ϕ
(
x
1
)
→
(
η
1
,
η
1
2
,
η
2
,
η
2
2
,
η
1
η
2
)
ϕ
(
x
1
)
→
(
ξ
1
,
ξ
1
2
,
ξ
2
,
ξ
2
2
,
ξ
1
ξ
2
)
计算内积,对应位置相乘相加即可
另外,我们注意到:
(
⟨
x
1
,
x
2
⟩
+
1
)
2
=
⟨
x
1
,
x
2
⟩
2
+
2
⟨
x
1
,
x
2
⟩
+
1
=
(
η
1
ξ
1
+
η
2
ξ
2
)
2
+
2
(
η
1
ξ
1
+
η
2
ξ
2
)
+
1
=
2
η
1
ξ
1
+
η
1
2
ξ
1
2
+
2
η
2
ξ
2
+
η
2
2
ξ
2
2
+
2
η
1
η
2
ξ
1
ξ
2
+
1
(\langle x_1,x_2\rangle + 1)^2 = \langle x_1,x_2\rangle^2+2\langle x_1,x_2\rangle+1\\ =(\eta_1\xi_1+\eta_2\xi_2)^2 + 2(\eta_1\xi_1+\eta_2\xi_2) + 1\\ = 2\eta_1\xi_1+\eta_1^2\xi_1^2+2\eta_2\xi_2+ \eta_2^2\xi_2^2 +2\eta_1\eta_2\xi_1\xi_2 +1
(
⟨
x
1
,
x
2
⟩
+
1
)
2
=
⟨
x
1
,
x
2
⟩
2
+
2
⟨
x
1
,
x
2
⟩
+
1
=
(
η
1
ξ
1
+
η
2
ξ
2
)
2
+
2
(
η
1
ξ
1
+
η
2
ξ
2
)
+
1
=
2
η
1
ξ
1
+
η
1
2
ξ
1
2
+
2
η
2
ξ
2
+
η
2
2
ξ
2
2
+
2
η
1
η
2
ξ
1
ξ
2
+
1
可以发现,上面的两个式子有很多相同的地方,实际上,我们只需要把某几个维度线性缩放一下,然后加上一个常数维度,具体来说,上面这个式子的计算实际上和映射:
φ
(
X
1
,
X
2
)
=
(
2
X
1
,
X
1
2
,
2
X
2
,
X
2
2
,
2
X
1
X
2
,
1
)
T
\varphi(X_1,X_2) = (\sqrt2 X_1,X_1^2,\sqrt2X_2, X_2^2,\sqrt2X_1X_2,1)^T
φ
(
X
1
,
X
2
)
=
(
2
X
1
,
X
1
2
,
2
X
2
,
X
2
2
,
2
X
1
X
2
,
1
)
T
这个式子是根据上式凑出来的
然后计算内积
⟨
φ
(
X
1
)
,
φ
(
X
2
)
⟩
\langle \varphi(X_1),\varphi(X_2)\rangle
⟨
φ
(
X
1
)
,
φ
(
X
2
)
⟩
的结果是相同的,那么区别在于什么地方呢?
- 一个是映射到高维空间中,然后再根据内积的公式计算;
-
而另一个则
直接在原始空间中计算,而不需要显式地写出映射后的结果
。
现在我们回忆下前面提到的维度爆炸,在前一种方法已经无法计算的情况下,后一种方法却依旧能处理,甚至无穷维度也没有问题。
我们把这里的
计算两个向量在隐式映射过后在空间中的内积的函数叫做核函数
,例如,前面的例子中,核函数为:
k
(
x
1
,
x
2
)
=
(
⟨
x
1
,
x
2
⟩
+
1
)
2
k(x_1,x_2)=(\langle x_1,x_2\rangle + 1)^2
k
(
x
1
,
x
2
)
=
(
⟨
x
1
,
x
2
⟩
+
1
)
2
由此可以发现,核函数
能够简化映射空间中的内积运算
2、核函数的定义
设
X
\mathcal{X}
X
是输入空间,
H
\mathcal{H}
H
为特征空间,如果存在一个从
X
\mathcal{X}
X
到
H
\mathcal{H}
H
的映射:
ϕ
(
x
)
:
X
→
H
\phi(x):\mathcal{X} \rightarrow \mathcal{H}
ϕ
(
x
)
:
X
→
H
使得对所有
x
,
z
∈
X
,
x,z \in \mathcal{X},
x
,
z
∈
X
,
函数
K
(
x
,
z
)
K(x,z)
K
(
x
,
z
)
满足条件:
K
(
x
,
z
)
=
ϕ
(
x
)
⋅
ϕ
(
z
)
K(x,z) = \phi(x) \cdot \phi(z)
K
(
x
,
z
)
=
ϕ
(
x
)
⋅
ϕ
(
z
)
则称
K
(
x
,
z
)
K(x,z)
K
(
x
,
z
)
为核函数,
ϕ
(
x
)
\phi(x)
ϕ
(
x
)
为映射函数,式中
ϕ
(
x
)
⋅
ϕ
(
z
)
\phi(x) \cdot \phi(z)
ϕ
(
x
)
⋅
ϕ
(
z
)
为内积
核技巧的想法:在学习与预测中只定义核函数
K(
x
,
z
)
K(x,z)
K
(
x
,
z
)
,而不显式地定义映射函数
ϕ\phi
ϕ
;
因为通常计算
K(
x
,
z
)
K(x,z)
K
(
x
,
z
)
比较容易,而通过
ϕ(
x
)
和
ϕ
(
z
)
\phi(x)和\phi(z)
ϕ
(
x
)
和
ϕ
(
z
)
的内积来计算
K(
x
,
z
)
K(x,z)
K
(
x
,
z
)
并不容易;
ϕ\phi
ϕ
是输入空间到特征空间的映射,特征空间
H\mathcal{H}
H
往往是高维的,甚至是无穷维;
对于给定的核
K(
x
,
z
)
K(x,z)
K
(
x
,
z
)
,特征空间
H\mathcal{H}
H
和映射函数
ϕ\phi
ϕ
的取法并不唯一。
\quad\quad
在我们之前学习线性可分支持向量机和线性支持向量机时,无论是目标函数还是决策函数(分离超平面)都只涉及
输入实例与实例之间的内积
。在对偶问题的目标函数中的内积
x
i
,
x
j
x_i,x_j
x
i
,
x
j
,可以用核函数
K
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
⋅
ϕ
(
x
j
)
K(x_i,x_j) = \phi(x_i) \cdot \phi(x_j)
K
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
⋅
ϕ
(
x
j
)
来代替。此时对偶问题的目标函数成为:
W
(
α
)
=
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
α
i
W(\alpha)=\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i
W
(
α
)
=
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
i
=
1
∑
N
α
i
分类决策函数变为:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
s
α
i
∗
y
i
K
(
x
i
,
x
)
+
b
∗
)
f(x) = sign(\sum_{i=1}^{N_s}\alpha_i^*y_iK(x_i,x)+b^*)
f
(
x
)
=
s
i
g
n
(
i
=
1
∑
N
s
α
i
∗
y
i
K
(
x
i
,
x
)
+
b
∗
)
这就等价于:
经过映射函数
ϕ\phi
ϕ
将原来的输入空间变换到一个新的特征空间,将输入空间中的内积
xi
⋅
x
j
x_i \cdot x_j
x
i
⋅
x
j
变换为特征空间中的内积
ϕ(
x
i
)
⋅
ϕ
(
x
j
)
\phi(x_i) \cdot \phi(x_j)
ϕ
(
x
i
)
⋅
ϕ
(
x
j
)
,在新的特征空间里,从训练样本中学习线性支持向量机,当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性模型。
\quad\quad
在核函数
K
(
x
,
z
)
K(x,z)
K
(
x
,
z
)
给定的条件下,可以利用求解线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行,不需要显式地定义特征空间和映射函数,这样的技巧称为
核技巧
。
- 使用核技巧,这样一来计算的问题就解决了,避开了直接在高维空间中进行计算,而结果却是等价的。当然,我们前面使用的例子是相对简单的,可以手工造出对应的
ϕ(
⋅
)
\phi(\cdot)
ϕ
(
⋅
)
的核函数,如果对于一个任意的映射,想要造出对应的核函数就很困难了。- 所以,我们通常是在常用的核函数中进行选择——根据问题和数据的不同,选择不同的参数,实际上就是得到不同的核函数。
3、常用的核函数
(1)多项式核
k
(
x
i
,
x
j
)
=
(
x
i
T
x
j
)
p
p
⩾
1
为
多
项
式
的
次
数
k(x_i,x_j) = (x_i^Tx_j)^p \quad\quad p \geqslant 1为多项式的次数
k
(
x
i
,
x
j
)
=
(
x
i
T
x
j
)
p
p
⩾
1
为
多
项
式
的
次
数
\quad\quad
前面我们举的例子便是这里多项式核的一个特例
(
R
=
1
,
d
=
2
)
(R=1,d=2)
(
R
=
1
,
d
=
2
)
。虽然比较麻烦,而且没有必要,不够这个核所对应的映射实际上是可以写出来的,该空间的维度是
(
m
+
d
d
)
\left(\begin{matrix} m+d\\ d\end{matrix}\right)
(
m
+
d
d
)
,其中m是原始空间的维度。
(2)高斯核
k
(
x
i
,
x
j
)
=
e
x
p
(
−
∣
∣
x
i
−
x
j
∣
∣
2
2
σ
2
)
σ
⩾
1
为
高
斯
核
的
带
宽
k(x_i,x_j) = exp(-\frac{||x_i-x_j||^2}{2\sigma^2}) \quad\quad \sigma \geqslant 1为高斯核的带宽
k
(
x
i
,
x
j
)
=
e
x
p
(
−
2
σ
2
∣
∣
x
i
−
x
j
∣
∣
2
)
σ
⩾
1
为
高
斯
核
的
带
宽
这个核可以将原始空间映射为高维空间(也就是我们前面提到的空间映射)。
-
如果
σ\sigma
σ
选得过大的话,高次特征上的权重实际上衰减的非常快,所以实际上相当于一个低维的子空间; -
如果
σ\sigma
σ
选得过小的话,则可以将任意的数据映射为线性可分的——当然这并不完全是好事,因为随之而来的是非常严重的过拟合问题; -
总的来说,通过调控参数
σ\sigma
σ
,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一
(3)线性核
k
(
x
i
,
x
j
)
=
x
i
T
x
j
k(x_i,x_j) = x_i^Tx_j
k
(
x
i
,
x
j
)
=
x
i
T
x
j
\quad\quad
这实际上就是原始空间中的内积,这个核存在的主要目的是使得“映射后空间中的问题”和“映射前空间中的问题”两者在形式上同意起来,也就是说,我们在写代码或公式的时候,只要写个模板或通用表达式,然后代入不同的核,就可以了,于是便在形式上统一了起来,不要再分别写一个线性的和一个非线性的
4、核函数的本质
\quad\quad
通常我们遇到的数据都是线性不可分的,我们需要将其映射到高维空间,但是这可能带来维度灾难,这时候,核函数便是一种很好的解决方法,核函数的价值就在于它虽然也是件特征进行从低维到高维的映射,但是核函数就绝在它事先在低维上进行计算,而将实质上的分类效果表现在高维上,这样做也就避免了在高维空间中的复杂运算。
下面我们引用例子来展示核函数解决非线性问题的直观效果:
\quad\quad
假设现在你是一个农场主,圈养了一批羊,但为了预防狼群袭击羊群,你需要搭建一个篱笆来把羊和狼分开,但是篱笆应该建在哪儿呢?比较以下这几种不同的分类器,我们可以看出SVM完成了一个很完美的解决方案。
这个例子说明了SVM使用非线性分类器的优势,而逻辑回归以及决策树都是使用了直线方法。
四、线性支持向量机
\quad\quad
前面我们介绍了处理线性可分数据集的线性可分支持向量机,也对线性不可分数据集问题通过核函数对原来的线性SVN进行了推广,使得非线性的情况也能处理。但是如果数据并不是因为本身是非线性结构的,而是因为数据有噪声,再如果有些噪声点正好是支持向量,那么对于分类器的影响是很大的。
\quad\quad
缓解该问题的一个办法就是允许支持向量机在一些样本上出错。这就需要我们将
硬间隔最大化改为软间隔最大化
1、软间隔
我们之前提到的硬间隔,是要求所有样本都满足约束条件,而软间隔则是允许某些样本不满足约束:
y
i
(
w
⋅
x
i
+
b
)
⩾
1
y_i(w \cdot x_i+b) \geqslant 1
y
i
(
w
⋅
x
i
+
b
)
⩾
1
自然,在最大化间隔的同时,不满足约束的样本应尽可能的少。
为了解决某些样本不满足约束条件,可以对每个样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
引入一个松弛变量
ξ
i
⩾
0
\xi_i \geqslant 0
ξ
i
⩾
0
,是函数间隔加上松弛变量大于等于1,这样,约束条件就变为:
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
y_i(w \cdot x_i+b) \geqslant 1-\xi_i
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
同时,对每个松弛变量
ξ
i
\xi_i
ξ
i
,支付一个代价
ξ
i
\xi_i
ξ
i
。目标函数由原来的
1
2
∣
∣
w
∣
∣
2
\frac{1}{2}||w||^2
2
1
∣
∣
w
∣
∣
2
变成:
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i
2
1
∣
∣
w
∣
∣
2
+
C
i
=
1
∑
N
ξ
i
这里,
C
>
0
C > 0
C
>
0
称为惩罚系数,
C
C
C
值大时对误分类的惩罚增加,
C
C
C
值小时对误分类的惩罚减小。
此时,最优化的目标函数包括两个含义:
-
使
12
∣
∣
w
∣
∣
2
\frac{1}{2}||w||^2
2
1
∣
∣
w
∣
∣
2
尽量小即间隔尽量大 - 使误分类点的个数尽量小
CC
C
是调和二者的系数
有了上面的思路,可以和线性可分支持向量机一样来考虑线性支持向量机的学习问题。
线性不可分的线性支持向量机的学习问题就变为如下凸二次规划问题(原始问题):
min
w
,
b
,
ξ
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
.
.
.
,
N
ξ
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\min_{w,b,\xi} \quad \frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i \\ s.t. \quad y_i(w \cdot x_i+b) \geqslant 1-\xi_i,i = 1,2,…,N \\ \xi_i \geqslant 0,i = 1,2,…,N
w
,
b
,
ξ
min
2
1
∣
∣
w
∣
∣
2
+
C
i
=
1
∑
N
ξ
i
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
.
.
.
,
N
ξ
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
通过求解以上凸二次规划问题,即软间隔最大化问题,得到的分离超平面为:
w
∗
⋅
x
+
b
∗
=
0
w^*\cdot x + b^* = 0
w
∗
⋅
x
+
b
∗
=
0
以及相应的分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
f(x) = sign(w^*\cdot x + b^*)
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
这就称为:线性支持向量机
2、对偶算法
对偶问题的构建和线性可分支持向量机的对偶问题的构建类似。
为了让大家更容易理解,现在我们再来构建一次:
(1)首先构建拉格朗日函数
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
−
∑
i
=
1
N
α
i
(
y
i
(
w
⋅
x
i
+
b
)
−
1
+
ξ
i
)
−
∑
i
=
1
N
μ
i
ξ
i
L(w,b,\xi,\alpha,\mu) = \frac{1}{2}||w||^2 + C\sum_{i=1}^N\xi_i – \sum_{i=1}^N\alpha_i(y_i(w \cdot x_i + b) -1 + \xi_i) – \sum_{i=1}^N\mu_i\xi_i
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
2
1
∣
∣
w
∣
∣
2
+
C
i
=
1
∑
N
ξ
i
−
i
=
1
∑
N
α
i
(
y
i
(
w
⋅
x
i
+
b
)
−
1
+
ξ
i
)
−
i
=
1
∑
N
μ
i
ξ
i
其中,
α
i
⩾
0
,
μ
i
⩾
0
\alpha_i \geqslant 0,\mu_i \geqslant 0
α
i
⩾
0
,
μ
i
⩾
0
(2)求
min
w
,
b
,
ξ
L
(
w
,
b
,
ξ
,
α
,
μ
)
\min_{w,b,\xi} \ L(w,b,\xi,\alpha,\mu)
min
w
,
b
,
ξ
L
(
w
,
b
,
ξ
,
α
,
μ
)
拉格朗日函数
L
(
w
,
b
,
ξ
,
α
,
μ
)
L(w,b,\xi,\alpha,\mu)
L
(
w
,
b
,
ξ
,
α
,
μ
)
依次对
w
,
b
,
ξ
w,b,\xi
w
,
b
,
ξ
求偏导数并令为0:
∇
w
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
w
−
∑
i
=
1
N
α
i
y
i
x
i
=
0
∇
b
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
−
∑
i
=
1
N
α
i
y
i
=
0
∇
ξ
i
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
C
−
α
i
−
μ
i
=
0
\nabla_wL(w,b,\xi,\alpha,\mu) = w – \sum_{i=1}^N\alpha_iy_ix_i = 0\\ \nabla_bL(w,b,\xi,\alpha,\mu) = -\sum_{i=1}^N\alpha_iy_i = 0\\ \nabla_{\xi_i}L(w,b,\xi,\alpha,\mu) = C – \alpha_i – \mu_i = 0
∇
w
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
w
−
i
=
1
∑
N
α
i
y
i
x
i
=
0
∇
b
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
−
i
=
1
∑
N
α
i
y
i
=
0
∇
ξ
i
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
C
−
α
i
−
μ
i
=
0
得:
w
=
∑
i
=
1
N
α
i
y
i
x
i
∑
i
=
1
N
α
i
y
i
=
0
C
−
α
i
−
μ
i
=
0
w = \sum_{i=1}^N\alpha_iy_ix_i \\ \sum_{i=1}^N\alpha_iy_i = 0 \\ C – \alpha_i – \mu_i = 0
w
=
i
=
1
∑
N
α
i
y
i
x
i
i
=
1
∑
N
α
i
y
i
=
0
C
−
α
i
−
μ
i
=
0
代入拉格朗日函数,得:
min
w
,
b
,
ξ
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
\min_{w,b,\xi} \ L(w,b,\xi,\alpha,\mu) = -\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i \cdot x_j) + \sum_{i=1}^N\alpha_i
w
,
b
,
ξ
min
L
(
w
,
b
,
ξ
,
α
,
μ
)
=
−
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
i
=
1
∑
N
α
i
(3)再对
min
w
,
b
,
ξ
L
(
w
,
b
,
ξ
,
α
,
μ
)
\min_{w,b,\xi} \ L(w,b,\xi,\alpha,\mu)
min
w
,
b
,
ξ
L
(
w
,
b
,
ξ
,
α
,
μ
)
求
α
\alpha
α
的极大,即得对偶问题:
max
α
−
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
C
−
α
i
−
μ
i
=
0
α
i
⩾
0
μ
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
\max_{\alpha} \quad – \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i \cdot x_j) +\sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^N \alpha_iy_i = 0 \\ C – \alpha_i – \mu_i = 0 \\ \alpha_i \geqslant 0 \\ \mu_i \geqslant 0, i = 1,2,…,N
α
max
−
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
+
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
C
−
α
i
−
μ
i
=
0
α
i
⩾
0
μ
i
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
将上式的目标函数由求极大转换为求极小,再将约束条件合并,得到等价的
对偶最优化问题:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
\min_{\alpha} \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i \cdot x_j) – \sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^N \alpha_iy_i = 0 \\ 0 \leqslant \alpha_i \leqslant C,i = 1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
线性支持向量机对偶算法:
输入:线性可分训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T = \{(x_1,y_1),(x_2,y_2),…,(x_N,y_N)\}
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,其中,
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
x_i \in \mathcal{X} = R^n,y_i \in \mathcal{Y}=\{-1,+1\},i=1,2,…,N
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
;
输出:最大间隔分离超平面和分类决策函数。
(1)选择惩罚系数
C
>
0
C > 0
C
>
0
,构造并求解约束最优化问题:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
\min_{\alpha} \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i \cdot x_j) – \sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^N \alpha_iy_i = 0 \\ 0 \leqslant \alpha_i \leqslant C,i = 1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
求得最优解
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
\alpha^*=(\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^T
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
;
(2)计算:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^* = \sum_{i=1}^N\alpha_i^*y_ix_i
w
∗
=
i
=
1
∑
N
α
i
∗
y
i
x
i
并选择
α
∗
\alpha^*
α
∗
的一个分量
α
j
∗
\alpha_j^*
α
j
∗
适合条件
0
<
α
j
∗
<
C
0 < \alpha_j^* < C
0
<
α
j
∗
<
C
,计算:
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
b^* = y_j – \sum_{i=1}^N\alpha_i^*y_i(x_i \cdot x_j)
b
∗
=
y
j
−
i
=
1
∑
N
α
i
∗
y
i
(
x
i
⋅
x
j
)
(3)求得分离超平面:
w
∗
⋅
x
+
b
∗
=
0
w^* \cdot x+b^* = 0
w
∗
⋅
x
+
b
∗
=
0
分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
f(x) = sign(w^* \cdot x+b^* )
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
3、软间隔支持向量
软间隔的支持向量
x
i
x_i
x
i
或在间隔边界上,或在间隔边界与分离超平面之间,或在分离超平面误分一侧。
-
若
αi
∗
<
C
\alpha_i^* <C
α
i
∗
<
C
,则
ξi
=
0
\xi_i=0
ξ
i
=
0
,支持向量
xi
x_i
x
i
恰好落在间隔边界上; -
若
αi
∗
=
C
\alpha_i^*=C
α
i
∗
=
C
,
0<
ξ
i
<
1
0 < \xi_i < 1
0
<
ξ
i
<
1
,则
yi
(
w
⋅
x
i
+
b
)
>
1
−
ξ
i
>
0
y_i(w \cdot x_i+b) > 1-\xi_i >0
y
i
(
w
⋅
x
i
+
b
)
>
1
−
ξ
i
>
0
,则正确分类,支持向量
xi
x_i
x
i
在间隔边界与分离超平面之间; -
若
αi
∗
=
C
\alpha_i^* = C
α
i
∗
=
C
,
ξi
=
1
\xi_i=1
ξ
i
=
1
,支持向量
xi
x_i
x
i
在分离超平面上; -
若
αi
∗
=
C
\alpha_i^* = C
α
i
∗
=
C
,
ξi
>
1
\xi_i > 1
ξ
i
>
1
,支持向量
xi
x_i
x
i
在分离超平面误分一侧;
五、非线性支持向量机
通过一个分析,我们可以将非线性支持向量机算法描述如下:
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T = \{(x_1,y_1),(x_2,y_2),…,(x_N,y_N)\}
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,其中
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
x_i \in \mathcal{X} = R^n,y_i \in \mathcal{Y} = \{-1,+1\},i = 1,2,…,N
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
;
输出:分类决策函数。
(1)选取适当的核函数
K
(
x
,
z
)
K(x,z)
K
(
x
,
z
)
和适当的参数
C
C
C
,构造并求解最优化问题:
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
\min_\alpha \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^N\alpha_iy_i = 0 \\ 0 \leqslant \alpha_i \leqslant C,i=1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
求得最优解
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
\alpha^* = (\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^T
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
T
。
(2)选择
α
∗
\alpha^*
α
∗
的一个正分量
0
<
α
j
<
C
0 < \alpha_j < C
0
<
α
j
<
C
,计算:
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
K
(
x
i
,
x
j
)
b^* = y_j – \sum_{i=1}^N\alpha_i^*y_iK(x_i,x_j)
b
∗
=
y
j
−
i
=
1
∑
N
α
i
∗
y
i
K
(
x
i
,
x
j
)
(3)构造决策函数:
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
α
i
∗
y
i
K
(
x
,
x
i
)
+
b
∗
)
f(x) = sign(\sum_{i=1}^N\alpha_i^*y_iK(x,x_i)+b^*)
f
(
x
)
=
s
i
g
n
(
i
=
1
∑
N
α
i
∗
y
i
K
(
x
,
x
i
)
+
b
∗
)
当
K(
x
,
z
)
K(x,z)
K
(
x
,
z
)
是正定核函数时,该问题为凸二次规划问题,解是存在的。
六、
SMO
算法
SMO
通过前面的介绍,相信大家已经对支持向量机有了一定的了解,我们知道,支持向量机的学习问题可以形式化为
求解凸二次规划问题
。
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
\min_\alpha \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)- \sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^N\alpha_iy_i =0 \\ 0 \leqslant \alpha_i \leqslant C,\quad i = 1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
其中,一个变量
α
i
\alpha_i
α
i
对应一个样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
;
这样的凸二次规划问题具有全局最优解,也有许多最优化算法可以用于求解这一问题,但是当训练数据集容量很大时,这些算法往往变得非常低效。
接下来介绍的
SMO
算法(序列最小最优化算法)便是可以快速求解此问题的算法。
1、
SMO
算法概念
SMO
\quad\quad
SMO
算法是由
J
o
h
n
P
l
a
t
t
,
1998
John Platt,1998
J
o
h
n
P
l
a
t
t
,
1
9
9
8
提出,是一种启发式算法。
SMO
算法是
将大优化问题分解为多个小优化问题求解的
,这些小优化问题往往很容易求解,并且对它们进行顺序求解的结果与将它们作为整体来说求解的结果是一样的。
SMO
算法的目标是求出一系列
α
\alpha
α
和
b
b
b
,一旦求出这些
α
\alpha
α
,就很容易计算出权重向量
w
w
w
并且得到分离超平面。
SMO
算法的基本思路:
如果所有变量(即拉格朗日乘子
α
i
\alpha_i
α
i
)的解都满足此最优化问题的
K
K
T
KKT
K
K
T
条件,那么这个最优化问题的解就得到了(因为
K
K
T
KKT
K
K
T
条件是该最优化问题的充分必要条件)。
此最优化问题的
K
T
T
KTT
K
T
T
条件:
α
i
=
0
⇔
y
i
g
(
x
i
)
⩾
1
0
<
α
i
<
C
⇔
y
i
g
(
x
i
)
=
1
α
i
=
C
⇔
y
i
g
(
x
i
)
⩽
1
\alpha_i = 0 \Leftrightarrow y_ig(x_i) \geqslant 1 \\ 0 < \alpha_i < C \Leftrightarrow y_ig(x_i)=1 \\ \alpha_i = C \Leftrightarrow y_ig(x_i) \leqslant 1
α
i
=
0
⇔
y
i
g
(
x
i
)
⩾
1
0
<
α
i
<
C
⇔
y
i
g
(
x
i
)
=
1
α
i
=
C
⇔
y
i
g
(
x
i
)
⩽
1
其中:
g
(
x
i
)
=
∑
j
=
1
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
g(x_i) = \sum_{j=1}^N\alpha_jy_jK(x_i,x_j)+b
g
(
x
i
)
=
j
=
1
∑
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
那么问题就是:如何使所有变量都满足
K
T
T
KTT
K
T
T
条件呢?
-
先固定
αi
\alpha_i
α
i
之外的所有参数,然后求
αi
\alpha_i
α
i
上的极值。由于约束条件
∑i
=
1
N
α
i
y
i
=
0
\sum_{i=1}^N\alpha_iy_i =0
∑
i
=
1
N
α
i
y
i
=
0
的存在,若固定其他变量,那么
αi
\alpha_i
α
i
可由其他变量导出。 -
于是,
SMO
算法每次循环选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题,这个二次规划问题关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小。 -
小优化问题(子问题)可以通过解析方法求解,这样可以大大提高整个算法的计算速度,子问题有两个变量,一个是违背
KK
T
KKT
K
K
T
条件最严重的那一个,一个是由约束条件自动确定。如此,
SMO
算法将原始问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。 -
整个
SMO
算法包括两个部分:求解两个变量二次规划的解析方法和选择变量的启发式方法。
2、两个变量二次规划的求解方法
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
\min_\alpha \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)- \sum_{i=1}^N\alpha_i \\ s.t. \quad \sum_{i=1}^N\alpha_iy_i =0 \\ 0 \leqslant \alpha_i \leqslant C,\quad i = 1,2,…,N
α
min
2
1
i
=
1
∑
N
j
=
1
∑
N
α
i
α
j
y
i
y
j
K
(
x
i
,
x
j
)
−
i
=
1
∑
N
α
i
s
.
t
.
i
=
1
∑
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
.
,
N
不失一般性,假设选择的两个变量为
α
1
,
α
2
\alpha_1,\alpha_2
α
1
,
α
2
,其他变量
α
i
(
i
=
3
,
4
,
.
.
.
,
N
)
\alpha_i(i=3,4,…,N)
α
i
(
i
=
3
,
4
,
.
.
.
,
N
)
是固定的,于是上面的最优化问题的子问题就可以写为(注意:这里面去掉了不包含
α
1
,
α
2
\alpha_1,\alpha_2
α
1
,
α
2
的常数项):
min
α
1
,
α
2
W
(
α
1
,
α
2
)
=
1
2
K
11
α
1
2
+
1
2
K
22
α
2
2
+
y
1
y
2
K
12
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
α
1
∑
i
=
3
N
y
i
α
i
K
i
1
+
y
2
α
2
∑
i
=
3
N
y
i
α
i
K
i
2
s
.
t
.
α
1
y
1
+
α
2
y
2
=
−
∑
i
=
3
N
y
i
α
i
=
ς
0
⩽
α
i
⩽
C
,
i
=
1
,
2
\min_{\alpha_1,\alpha_2} \quad W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{22}\alpha_2^2+y_1y_2K_{12}\alpha_1\alpha_2 \\ -(\alpha_1+\alpha_2)+y_1\alpha_1\sum_{i=3}^Ny_i\alpha_iK_{i1}+y_2\alpha_2\sum_{i=3}^Ny_i\alpha_iK_{i2} \\ s.t. \quad \alpha_1y_1+\alpha_2y_2 = – \sum_{i=3}^Ny_i\alpha_i = \varsigma \\ 0 \leqslant \alpha_i \leqslant C, \quad i=1,2
α
1
,
α
2
min
W
(
α
1
,
α
2
)
=
2
1
K
1
1
α
1
2
+
2
1
K
2
2
α
2
2
+
y
1
y
2
K
1
2
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
α
1
i
=
3
∑
N
y
i
α
i
K
i
1
+
y
2
α
2
i
=
3
∑
N
y
i
α
i
K
i
2
s
.
t
.
α
1
y
1
+
α
2
y
2
=
−
i
=
3
∑
N
y
i
α
i
=
ς
0
⩽
α
i
⩽
C
,
i
=
1
,
2
其中,
K
i
j
=
K
(
x
i
,
x
j
)
=
K
j
i
,
i
,
j
=
1
,
2
,
.
.
.
,
N
K_{ij} = K(x_i,x_j)=K_{ji},\quad i,j =1,2,…,N
K
i
j
=
K
(
x
i
,
x
j
)
=
K
j
i
,
i
,
j
=
1
,
2
,
.
.
.
,
N
,
ς
\varsigma
ς
是常数,
y
i
2
=
1
y_i^2 = 1
y
i
2
=
1
。
为了求解两个变量的二次规划问题,首先,我们先来分析约束条件,然后在约束条件下求极小。
因为只有两个变量,我们可以在二维空间表示,由约束条件:
0
⩽
α
i
⩽
C
,
i
=
1
,
2
0 \leqslant \alpha_i \leqslant C, \quad i=1,2
0
⩽
α
i
⩽
C
,
i
=
1
,
2
可画出二维空间图,如下:
由约束条件:
α
1
y
1
+
α
2
y
2
=
−
∑
i
=
3
N
y
i
α
i
=
ς
\alpha_1y_1+\alpha_2y_2 = – \sum_{i=3}^Ny_i\alpha_i = \varsigma
α
1
y
1
+
α
2
y
2
=
−
i
=
3
∑
N
y
i
α
i
=
ς
可用图中虚线表示,该虚线是平行于对角线的。因此要求的是目标函数在一条平行于对角线的线段(即虚线)上的最优解。
我们可以将两个变量的优化问题变为实质上的单变量的最优化问题,不妨考虑变量为
α
2
\alpha_2
α
2
的最优化问题。
假设两个变量的初始可行解为
α
1
o
l
d
,
α
2
o
l
d
\alpha_1^{old},\alpha_2^{old}
α
1
o
l
d
,
α
2
o
l
d
,最优解为
α
1
n
e
w
,
α
2
n
e
w
\alpha_1^{new},\alpha_2^{new}
α
1
n
e
w
,
α
2
n
e
w
,并且假设在沿着约束方向未经剪辑(即未考虑不等式约束
0
⩽
α
i
⩽
C
0 \leqslant \alpha_i \leqslant C
0
⩽
α
i
⩽
C
)时
α
2
\alpha_2
α
2
的最优解为
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α
2
n
e
w
,
u
n
c
由于
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
满足不等式约束
0
⩽
α
i
⩽
C
0 \leqslant \alpha_i \leqslant C
0
⩽
α
i
⩽
C
,因此最优解
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
的取值范围必须满足条件:
L
⩽
α
2
n
e
w
⩽
H
L \leqslant \alpha_2^{new} \leqslant H
L
⩽
α
2
n
e
w
⩽
H
其中,若
y
1
≠
y
2
y_1 \neq y_2
y
1
̸
=
y
2
异号,根据
α
1
o
l
d
y
1
+
α
2
o
l
d
y
2
=
ς
\alpha_1^{old}y_1+\alpha_2^{old}y_2 = \varsigma
α
1
o
l
d
y
1
+
α
2
o
l
d
y
2
=
ς
得,
α
1
o
l
d
−
α
2
o
l
d
=
ς
\alpha_1^{old}-\alpha_2^{old} = \varsigma
α
1
o
l
d
−
α
2
o
l
d
=
ς
,所以:
L
=
m
a
x
(
0
,
−
ς
)
H
=
m
i
n
(
C
,
C
−
ς
)
L = max(0, -\varsigma) \\ H = min(C, C-\varsigma)
L
=
m
a
x
(
0
,
−
ς
)
H
=
m
i
n
(
C
,
C
−
ς
)
若
y
1
=
y
2
y_1=y_2
y
1
=
y
2
同号,则:
L
=
m
a
x
(
0
,
ς
−
C
)
H
=
m
i
n
(
C
,
ς
)
L = max(0, \varsigma-C) \\ H = min(C,\varsigma)
L
=
m
a
x
(
0
,
ς
−
C
)
H
=
m
i
n
(
C
,
ς
)
如此,根据
y
1
、
y
2
y_1、y_2
y
1
、
y
2
异号或同号,可得出
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
的上下界为:
{
L
=
m
a
x
(
0
,
α
2
o
l
d
−
α
1
o
l
d
)
,
H
=
m
i
n
(
C
,
C
+
α
2
o
l
d
−
α
1
o
l
d
)
y
1
≠
y
2
L
=
m
a
x
(
0
,
α
2
o
l
d
+
α
1
o
l
d
−
C
)
,
H
=
m
i
n
(
C
,
α
2
o
l
d
+
α
1
o
l
d
)
y
1
=
y
2
\begin{cases} L = max(0, \alpha_2^{old}-\alpha_1^{old}),H =min(C,C+ \alpha_2^{old}-\alpha_1^{old}) \quad\quad y_1\neq y_2 \\ L = max(0, \alpha_2^{old}+\alpha_1^{old}-C),H =min(C,\alpha_2^{old}+\alpha_1^{old}) \quad\quad y_1= y_2 \end{cases}
{
L
=
m
a
x
(
0
,
α
2
o
l
d
−
α
1
o
l
d
)
,
H
=
m
i
n
(
C
,
C
+
α
2
o
l
d
−
α
1
o
l
d
)
y
1
̸
=
y
2
L
=
m
a
x
(
0
,
α
2
o
l
d
+
α
1
o
l
d
−
C
)
,
H
=
m
i
n
(
C
,
α
2
o
l
d
+
α
1
o
l
d
)
y
1
=
y
2
下面我们先求沿着约束方向未经剪辑时
α
2
\alpha_2
α
2
的最优解
α
2
n
e
w
,
u
n
c
\alpha_2^{new,unc}
α
2
n
e
w
,
u
n
c
;然后再就剪辑后
α
2
\alpha_2
α
2
的最优解
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
。
再求之前,我们先记:
g
(
x
i
)
=
∑
j
=
1
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
g(x_i) = \sum_{j=1}^N\alpha_jy_jK(x_i,x_j)+b
g
(
x
i
)
=
j
=
1
∑
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
令:
E
i
=
g
(
x
i
)
−
y
i
=
(
∑
j
=
1
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
)
−
y
i
,
i
=
1
,
2
E_i = g(x_i) – y_i = (\sum_{j=1}^N\alpha_jy_jK(x_i,x_j)+b)-y_i, \quad i=1,2
E
i
=
g
(
x
i
)
−
y
i
=
(
j
=
1
∑
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
)
−
y
i
,
i
=
1
,
2
当
i
=
1
,
2
i=1,2
i
=
1
,
2
时,
E
i
E_i
E
i
为函数
g
(
x
)
g(x)
g
(
x
)
对输入
x
i
x_i
x
i
的预测值与真实输出
y
i
y_i
y
i
之差
。
定理:
最优化问题沿着约束方向未经剪辑时的解为:
α
2
n
e
w
,
u
n
c
=
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
η
\alpha_2^{new,unc} = \alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta}
α
2
n
e
w
,
u
n
c
=
α
2
o
l
d
+
η
y
2
(
E
1
−
E
2
)
其中:
η
=
K
11
+
K
22
−
2
K
12
\eta = K_{11}+ K_{22}-2 K_{12}
η
=
K
1
1
+
K
2
2
−
2
K
1
2
经剪辑后
α
2
\alpha_2
α
2
的解是:
α
2
n
e
w
=
{
H
,
α
2
n
e
w
,
u
n
c
>
H
α
2
n
e
w
,
u
n
c
,
L
⩽
α
2
n
e
w
,
u
n
c
⩽
H
L
,
α
2
n
e
w
,
u
n
c
<
L
\alpha_2^{new} = \begin{cases} H, \quad \quad \quad \quad \alpha_2^{new,unc} > H \\ \alpha_2^{new,unc}, \quad \ L \leqslant \alpha_2^{new,unc} \leqslant H \\ L, \quad \quad \quad \quad \alpha_2^{new,unc}<L \end{cases}
α
2
n
e
w
=
⎩
⎪
⎨
⎪
⎧
H
,
α
2
n
e
w
,
u
n
c
>
H
α
2
n
e
w
,
u
n
c
,
L
⩽
α
2
n
e
w
,
u
n
c
⩽
H
L
,
α
2
n
e
w
,
u
n
c
<
L
由
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
求得
α
1
n
e
w
\alpha_1^{new}
α
1
n
e
w
是:
α
1
n
e
w
=
α
1
o
l
d
+
y
1
y
2
(
α
2
o
l
d
−
α
2
n
e
w
)
\alpha_1^{new} = \alpha_1^{old}+y_1y_2(\alpha_2^{old}-\alpha_2^{new})
α
1
n
e
w
=
α
1
o
l
d
+
y
1
y
2
(
α
2
o
l
d
−
α
2
n
e
w
)
证明:
引进记号:
v
i
=
∑
j
=
3
N
α
j
y
j
K
(
x
i
,
x
j
)
=
g
(
x
i
)
−
∑
j
=
1
2
α
j
y
j
K
(
x
i
,
x
j
)
−
b
,
i
=
1
,
2
v_i = \sum_{j=3}^N\alpha_jy_jK(x_i,x_j) = g(x_i) – \sum_{j=1}^2\alpha_jy_jK(x_i,x_j)-b, \quad i=1,2
v
i
=
j
=
3
∑
N
α
j
y
j
K
(
x
i
,
x
j
)
=
g
(
x
i
)
−
j
=
1
∑
2
α
j
y
j
K
(
x
i
,
x
j
)
−
b
,
i
=
1
,
2
目标函数可写成:
W
(
α
1
,
α
2
)
=
1
2
K
11
α
1
2
+
1
2
K
22
α
2
2
+
y
1
y
2
K
12
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
v
1
α
1
+
y
2
v
2
α
2
W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{22}\alpha_2^2+y_1y_2K_{12}\alpha_1\alpha_2 -(\alpha_1+\alpha_2)+y_1v_1\alpha_1+y_2v_2\alpha_2
W
(
α
1
,
α
2
)
=
2
1
K
1
1
α
1
2
+
2
1
K
2
2
α
2
2
+
y
1
y
2
K
1
2
α
1
α
2
−
(
α
1
+
α
2
)
+
y
1
v
1
α
1
+
y
2
v
2
α
2
由
α
1
y
1
=
ς
−
α
2
y
2
\alpha_1y_1 = \varsigma – \alpha_2y_2
α
1
y
1
=
ς
−
α
2
y
2
以及
y
i
2
=
1
y_i^2 =1
y
i
2
=
1
,可将
α
1
\alpha_1
α
1
表示为:
α
1
=
(
ς
−
y
2
α
2
)
y
1
\alpha_1 = (\varsigma-y_2\alpha_2)y_1
α
1
=
(
ς
−
y
2
α
2
)
y
1
代入改写后的目标函数得:
W
(
α
1
,
α
2
)
=
1
2
K
11
(
ς
−
y
2
α
2
)
2
+
1
2
K
22
α
2
2
+
y
2
K
12
(
ς
−
y
2
α
2
)
α
2
−
(
ς
−
y
2
α
2
)
y
1
−
α
2
+
v
1
(
ς
−
y
2
α
2
)
+
y
2
v
2
α
2
W(\alpha_1,\alpha_2) = \frac{1}{2}K_{11}(\varsigma-y_2\alpha_2)^2+\frac{1}{2}K_{22}\alpha_2^2+y_2K_{12}(\varsigma-y_2\alpha_2)\alpha_2 -(\varsigma-y_2\alpha_2)y_1-\alpha_2+v_1(\varsigma-y_2\alpha_2)+y_2v_2\alpha_2
W
(
α
1
,
α
2
)
=
2
1
K
1
1
(
ς
−
y
2
α
2
)
2
+
2
1
K
2
2
α
2
2
+
y
2
K
1
2
(
ς
−
y
2
α
2
)
α
2
−
(
ς
−
y
2
α
2
)
y
1
−
α
2
+
v
1
(
ς
−
y
2
α
2
)
+
y
2
v
2
α
2
对
α
2
\alpha_2
α
2
求偏导:
∂
W
∂
α
2
=
K
11
α
2
+
K
22
α
2
−
2
K
12
α
2
−
K
11
ς
y
2
+
K
12
ς
y
2
+
y
1
y
2
−
1
−
v
1
y
2
+
y
2
v
2
\frac{\partial W}{\partial \alpha_2} = K_{11}\alpha_2+K_{22}\alpha_2-2K_{12}\alpha_2-K_{11}\varsigma y_2+K_{12}\varsigma y_2+y_1y_2-1-v_1y_2+y_2v_2
∂
α
2
∂
W
=
K
1
1
α
2
+
K
2
2
α
2
−
2
K
1
2
α
2
−
K
1
1
ς
y
2
+
K
1
2
ς
y
2
+
y
1
y
2
−
1
−
v
1
y
2
+
y
2
v
2
令偏导数为0,得到:
(
K
11
+
K
22
−
2
K
12
)
α
2
=
y
2
(
y
2
−
y
1
+
ς
K
11
−
ς
K
12
+
v
1
−
v
2
)
=
y
2
[
y
2
−
y
1
+
ς
K
11
−
ς
K
12
+
(
g
(
x
1
)
−
∑
j
=
1
2
y
j
α
j
K
1
j
−
b
)
−
(
g
(
x
2
)
−
∑
j
=
1
2
y
j
α
j
K
2
j
−
b
)
]
(K_{11}+K_{22}-2K_{12})\alpha_2 = y_2(y_2-y_1+\varsigma K_{11}-\varsigma K_{12}+v_1-v_2) \\ = y_2\Big[y_2-y_1+\varsigma K_{11}-\varsigma K_{12}+\Big(g(x_1) – \sum_{j=1}^2y_j\alpha_jK_{1j}-b\Big)-\Big(g(x_2) – \sum_{j=1}^2y_j\alpha_jK_{2j}-b\Big)\Big]
(
K
1
1
+
K
2
2
−
2
K
1
2
)
α
2
=
y
2
(
y
2
−
y
1
+
ς
K
1
1
−
ς
K
1
2
+
v
1
−
v
2
)
=
y
2
[
y
2
−
y
1
+
ς
K
1
1
−
ς
K
1
2
+
(
g
(
x
1
)
−
j
=
1
∑
2
y
j
α
j
K
1
j
−
b
)
−
(
g
(
x
2
)
−
j
=
1
∑
2
y
j
α
j
K
2
j
−
b
)
]
将
ς
=
α
1
o
l
d
y
1
+
α
2
o
l
d
y
2
\varsigma = \alpha_1^{old}y_1+\alpha_2^{old}y_2
ς
=
α
1
o
l
d
y
1
+
α
2
o
l
d
y
2
代入,得到:
(
K
11
+
K
22
−
2
K
12
)
α
2
n
e
w
,
u
n
c
=
y
2
(
(
K
11
+
K
22
−
2
K
12
)
α
2
o
l
d
y
2
+
y
2
−
y
1
+
g
(
x
1
)
−
g
(
x
2
)
)
=
(
K
11
+
K
22
−
2
K
12
)
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
(K_{11}+K_{22}-2K_{12})\alpha_2^{new,unc}=y_2\Big((K_{11}+K_{22}-2K_{12})\alpha_2^{old}y_2+y_2-y_1+g(x_1)-g(x_2)\Big) \\ = (K_{11}+K_{22}-2K_{12})\alpha_2^{old}+y_2(E_1-E_2)
(
K
1
1
+
K
2
2
−
2
K
1
2
)
α
2
n
e
w
,
u
n
c
=
y
2
(
(
K
1
1
+
K
2
2
−
2
K
1
2
)
α
2
o
l
d
y
2
+
y
2
−
y
1
+
g
(
x
1
)
−
g
(
x
2
)
)
=
(
K
1
1
+
K
2
2
−
2
K
1
2
)
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
将
η
=
K
11
+
K
22
−
2
K
12
\eta = K_{11}+K_{22}-2K_{12}
η
=
K
1
1
+
K
2
2
−
2
K
1
2
代入,得到:
α
2
n
e
w
.
u
n
c
=
α
2
o
l
d
+
y
2
(
E
1
−
E
2
)
η
\alpha_2^{new.unc} = \alpha_2^{old}+\frac{y_2(E_1-E_2)}{\eta}
α
2
n
e
w
.
u
n
c
=
α
2
o
l
d
+
η
y
2
(
E
1
−
E
2
)
要是其满足不等式约束必须限制在
[
L
,
H
]
[L,H]
[
L
,
H
]
内,从而得到
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
的表达式:
α
2
n
e
w
=
{
H
,
α
2
n
e
w
,
u
n
c
>
H
α
2
n
e
w
,
u
n
c
,
L
⩽
α
2
n
e
w
,
u
n
c
⩽
H
L
,
α
2
n
e
w
,
u
n
c
<
L
\alpha_2^{new} = \begin{cases} H, \quad \quad \quad \quad \alpha_2^{new,unc} > H \\ \alpha_2^{new,unc}, \quad \ L \leqslant \alpha_2^{new,unc} \leqslant H \\ L, \quad \quad \quad \quad \alpha_2^{new,unc}<L \end{cases}
α
2
n
e
w
=
⎩
⎪
⎨
⎪
⎧
H
,
α
2
n
e
w
,
u
n
c
>
H
α
2
n
e
w
,
u
n
c
,
L
⩽
α
2
n
e
w
,
u
n
c
⩽
H
L
,
α
2
n
e
w
,
u
n
c
<
L
由等式约束:
α
1
y
1
+
α
2
y
2
=
ς
\alpha_1y_1+\alpha_2y_2 = \varsigma
α
1
y
1
+
α
2
y
2
=
ς
得到
α
1
n
e
w
\alpha_1^{new}
α
1
n
e
w
的表达式:
α
1
n
e
w
=
α
1
o
l
d
+
y
1
y
2
(
α
2
o
l
d
−
α
2
n
e
w
)
\alpha_1^{new} = \alpha_1^{old}+y_1y_2(\alpha_2^{old}-\alpha_2^{new})
α
1
n
e
w
=
α
1
o
l
d
+
y
1
y
2
(
α
2
o
l
d
−
α
2
n
e
w
)
至此,我们就得到了最优化问题的解:
(
α
1
n
e
w
,
α
2
n
e
w
)
(\alpha_1^{new},\alpha_2^{new})
(
α
1
n
e
w
,
α
2
n
e
w
)
3、变量的选择方法
SMO
称选择第一个变量的过程为外层循环,外层循环在训练样本中选违反
K
K
T
KKT
K
K
T
条件最严重的样本点,并将其对应的变量作为第一个变量。具体地,检验训练样本点
(
x
i
,
y
i
)
(x_i,y_i)
(
x
i
,
y
i
)
是否满足
K
K
T
KKT
K
K
T
条件。
SMO
称选择第二个变量的过程为内层循环。假设在外层循环中已经找到第一个变量
α
1
\alpha_1
α
1
,现在要在内层循环中找第二个变量
α
2
\alpha_2
α
2
。第二个变量选择的标准是希望能使
α
2
\alpha_2
α
2
有足够大的变化。有前面的公式可知,
α
2
n
e
w
\alpha_2^{new}
α
2
n
e
w
依赖于
∣
E
1
−
E
2
∣
|E_1-E_2|
∣
E
1
−
E
2
∣
,一种简单的做法就是使其对应的
∣
E
1
−
E
2
∣
|E_1-E_2|
∣
E
1
−
E
2
∣
最大,因为
α
1
\alpha_1
α
1
已定,
E
1
E_1
E
1
也就确定了。那么,如果
E
1
E_1
E
1
为正的,那么选择最小的
E
i
E_i
E
i
作为
E
2
E_2
E
2
;如果
E
1
E_1
E
1
为负的,那么选择最大的
E
i
E_i
E
i
作为
E
2
E_2
E
2
。
一般情况下,采用启发式规则选择第二个变量
α
2
\alpha_2
α
2
。遍历在间隔边界上的支持向量点,依次将其对应的变量作为
α
2
\alpha_2
α
2
试用,直到目标函数有足够的下降。若找不到合适的
α
2
\alpha_2
α
2
,那么遍历整个训练数据集;若找不到合适的
α
2
\alpha_2
α
2
,则放弃第一个
α
2
\alpha_2
α
2
,再通过外层循环寻找另一个
α
1
\alpha_1
α
1
。
4、计算阀值
b
b
b
和差值
E
i
E_i
E
i
在每次完成两个变量的优化后,都要重新计算阀值
b
b
b
,当
0
<
α
1
n
e
w
<
C
0 < \alpha_1^{new} < C
0
<
α
1
n
e
w
<
C
时,由
K
K
T
KKT
K
K
T
条件可知:
∑
i
=
1
N
α
i
y
i
K
i
1
+
b
=
y
1
\sum_{i=1}^N\alpha_iy_iK_{i1} + b = y_1
i
=
1
∑
N
α
i
y
i
K
i
1
+
b
=
y
1
于是:
b
1
n
e
w
=
y
1
−
∑
i
=
3
N
α
i
y
i
K
i
1
−
α
1
n
e
w
y
1
K
11
−
α
2
n
e
w
y
2
K
21
b_1^{new} = y_1 – \sum_{i=3}^N\alpha_iy_iK_{i1} – \alpha_1^{new}y_1K_{11} – \alpha_2^{new}y_2K_{21}
b
1
n
e
w
=
y
1
−
i
=
3
∑
N
α
i
y
i
K
i
1
−
α
1
n
e
w
y
1
K
1
1
−
α
2
n
e
w
y
2
K
2
1
由前面我们定义式
E
i
E_i
E
i
得:
E
1
=
∑
i
=
3
N
α
i
y
i
K
i
1
+
α
1
o
l
d
y
1
K
11
+
α
2
o
l
d
y
2
K
21
+
b
o
l
d
−
y
1
E_1 = \sum_{i=3}^N\alpha_iy_iK_{i1} +\alpha_1^{old}y_1K_{11} + \alpha_2^{old}y_2K_{21} + b^{old}-y_1
E
1
=
i
=
3
∑
N
α
i
y
i
K
i
1
+
α
1
o
l
d
y
1
K
1
1
+
α
2
o
l
d
y
2
K
2
1
+
b
o
l
d
−
y
1
根据上面式子得:
y
1
−
∑
i
=
3
N
α
i
y
i
K
i
1
=
−
E
1
+
α
1
o
l
d
y
1
K
11
+
α
2
o
l
d
y
2
K
21
+
b
o
l
d
y_1 – \sum_{i=3}^N\alpha_iy_iK_{i1} = -E_1+ \alpha_1^{old}y_1K_{11} + \alpha_2^{old}y_2K_{21} + b^{old}
y
1
−
i
=
3
∑
N
α
i
y
i
K
i
1
=
−
E
1
+
α
1
o
l
d
y
1
K
1
1
+
α
2
o
l
d
y
2
K
2
1
+
b
o
l
d
代入上面
b
1
n
e
w
b_1^{new}
b
1
n
e
w
式子得:
b
1
n
e
w
=
−
E
1
−
y
1
K
11
(
α
1
n
e
w
−
α
1
o
l
d
)
−
y
2
K
21
(
α
2
n
e
w
−
α
2
o
l
d
)
+
b
o
l
d
b_1^{new} = -E_1 – y_1K_{11}(\alpha_1^{new}-\alpha_1^{old}) – y_2K_{21}(\alpha_2^{new}-\alpha_2^{old}) + b^{old}
b
1
n
e
w
=
−
E
1
−
y
1
K
1
1
(
α
1
n
e
w
−
α
1
o
l
d
)
−
y
2
K
2
1
(
α
2
n
e
w
−
α
2
o
l
d
)
+
b
o
l
d
同样,如果
0
<
α
2
n
e
w
<
C
0 < \alpha_2^{new} < C
0
<
α
2
n
e
w
<
C
,那么:
b
2
n
e
w
=
−
E
2
−
y
1
K
12
(
α
1
n
e
w
−
α
1
o
l
d
)
−
y
2
K
22
(
α
2
n
e
w
−
α
2
o
l
d
)
+
b
o
l
d
b_2^{new} = -E_2 – y_1K_{12}(\alpha_1^{new}-\alpha_1^{old}) – y_2K_{22}(\alpha_2^{new}-\alpha_2^{old}) + b^{old}
b
2
n
e
w
=
−
E
2
−
y
1
K
1
2
(
α
1
n
e
w
−
α
1
o
l
d
)
−
y
2
K
2
2
(
α
2
n
e
w
−
α
2
o
l
d
)
+
b
o
l
d
如果
α1
n
e
w
,
α
2
n
e
w
\alpha_1^{new},\alpha_2^{new}
α
1
n
e
w
,
α
2
n
e
w
同时满足
0<
α
i
n
e
w
<
C
,
i
=
1
,
2
0 < \alpha_i^{new} < C, i=1,2
0
<
α
i
n
e
w
<
C
,
i
=
1
,
2
,那么
b1
n
e
w
=
b
2
n
e
w
b_1^{new} = b_2^{new}
b
1
n
e
w
=
b
2
n
e
w
;
如果
α1
n
e
w
,
α
2
n
e
w
\alpha_1^{new},\alpha_2^{new}
α
1
n
e
w
,
α
2
n
e
w
是
00
0
或者
CC
C
,那么
b1
n
e
w
,
b
2
n
e
w
b_1^{new} ,b_2^{new}
b
1
n
e
w
,
b
2
n
e
w
以及他们之前的数都满足
KK
T
KKT
K
K
T
条件的阀值,选择他们的中点作为
bn
e
w
b^{new}
b
n
e
w
,即:
bn
e
w
=
b
1
n
e
w
+
b
2
n
e
w
2
b^{new} = \frac{b_1^{new} + b_2^{new}}{2}
b
n
e
w
=
2
b
1
n
e
w
+
b
2
n
e
w
在每次计算两个变量的优化之后,还必须更新对应的
E
i
E_i
E
i
值,并保存在列表中。
E
i
E_i
E
i
值的更新需要用到
b
n
e
w
b^{new}
b
n
e
w
值,以及所有支持向量对应的
α
j
\alpha_j
α
j
:
E
i
n
e
w
=
∑
S
y
j
α
j
K
(
x
i
,
y
j
)
+
b
n
e
w
−
y
i
E_i^{new} = \sum_Sy_j\alpha_jK(x_i,y_j)+b^{new}-y_i
E
i
n
e
w
=
S
∑
y
j
α
j
K
(
x
i
,
y
j
)
+
b
n
e
w
−
y
i
其中,
S
S
S
是所有支持向量
x
j
x_j
x
j
的集合。
5、至此
S
M
O
SMO
S
M
O
算法可描述为:
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T = \{(x_1,y_1),(x_2,y_2),…,(x_N,y_N)\}
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,其中,
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
x_i \in \mathcal{X} = R^n,y_i \in \mathcal{Y} = \{-1,+1\},i =1,2,…,N
x
i
∈
X
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
,
i
=
1
,
2
,
.
.
.
,
N
,精度为
ε
\varepsilon
ε
;
输出:近似解
α
\alpha
α
(1)取初值
α
(
0
)
=
0
\alpha^{(0)} = 0
α
(
0
)
=
0
,令
k
=
0
k=0
k
=
0
;
(2)选取优化变量
α
1
(
k
)
,
α
2
(
k
)
\alpha_1^{(k)},\alpha_2^{(k)}
α
1
(
k
)
,
α
2
(
k
)
,解析求解两个变量的最优化问题,求得最优解
α
1
(
k
+
1
)
,
α
1
(
k
+
1
)
\alpha_1^{(k+1)},\alpha_1^{(k+1)}
α
1
(
k
+
1
)
,
α
1
(
k
+
1
)
;
(3)若在进度
ε
\varepsilon
ε
范围内满足停止条件:
∑
i
=
1
N
a
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
,
N
y
i
⋅
g
(
x
i
)
=
{
⩾
1
,
{
x
i
∣
α
i
=
0
}
=
1
,
{
x
i
∣
0
<
α
i
<
C
}
⩽
1
,
{
x
i
∣
α
i
=
C
}
\sum_{i=1}^Na_iy_i = 0\\ 0 \leqslant \alpha_i \leqslant C, \quad i = 1,2,..,N \\ y_i \cdot g(x_i) = \begin{cases} \geqslant 1, \quad \{x_i | \alpha_i =0 \} \\ = 1,\quad \{x_i |0 < \alpha_i <C \} \\ \leqslant 1,\quad \{x_i | \alpha_i =C \} \\ \end{cases}
i
=
1
∑
N
a
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
.
.
,
N
y
i
⋅
g
(
x
i
)
=
⎩
⎪
⎨
⎪
⎧
⩾
1
,
{
x
i
∣
α
i
=
0
}
=
1
,
{
x
i
∣
0
<
α
i
<
C
}
⩽
1
,
{
x
i
∣
α
i
=
C
}
其中,
g
(
x
i
)
=
∑
j
=
1
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
g(x_i) = \sum_{j=1}^N\alpha_jy_jK(x_i,x_j)+b
g
(
x
i
)
=
j
=
1
∑
N
α
j
y
j
K
(
x
i
,
x
j
)
+
b
则转(4);否则令
k
=
k
+
1
k = k+1
k
=
k
+
1
,转(2);
(4)取
α
=
α
(
k
+
1
)
\alpha = \alpha^{(k+1)}
α
=
α
(
k
+
1
)
。
6、简化版
SMO
算法实现
SMO
\quad\quad
通过之前的学习,我们知道
SMO
算法中的外循环确定要优化的
α
\alpha
α
,而简化版的会跳过这一部分,首先在训练数据集上遍历每一个
α
\alpha
α
,然后在剩下的
α
\alpha
α
集合中随机选取另一个
α
\alpha
α
,从而构建
α
\alpha
α
对。
这里有一点非常重要,之前我们也提到过,这里再说明一下:
我们需要同时改变两个变量
α\alpha
α
,因为约束条件:
α1
y
1
+
α
2
y
2
=
−
∑
i
=
3
N
α
i
y
i
=
ς
\alpha_1y_1+\alpha_2y_2 = -\sum_{i=3}^N\alpha_iy_i=\varsigma
α
1
y
1
+
α
2
y
2
=
−
i
=
3
∑
N
α
i
y
i
=
ς
其中,
ς\varsigma
ς
为常数
伪代码如下:
创建一个alpha向量并将其初始化为0向量
当迭代次数小于最大迭代次数时(外循环):
对数据集中的每个数据向量(内循环):
如果该数据向量可以被优化:
随机选择另一个数据向量
同时优化这两个向量
如果两个向量都不能被优化,退出内循环
如果所有向量都没有被优化,增加迭代次数,继续下一次循环
在几百个点 组成的小规模数据集上,简化版
SM
O
SMO
S
M
O
算法的运行是没有什么问题的,但是在更大的数据集上运行的速度就会很慢。
算法代码可见:
02_简化版SMO算法实现.py
画图代码可见:
00_plot.py
,需要将算法运行后得到的
b
、
w
b、w
b
、
w
和支持向量坐标手动修改代码中的坐标
7、完整版
SMO
算法实现——不加核函数
SMO
\quad\quad
在这两个版本中,实现
α
\alpha
α
的更改和代数运算的优化环节一模一样。在优化过程中,唯一不同的就是选择
α
\alpha
α
的方式。完整版
SMO
算法应用了一些能够提速的启发式方法。
SMO
算法是通过一个外循环来选择第一个
α\alpha
α
值的,并且其选择过程会在两种方式之间进行交替:
- 在所有数据集上进行单遍扫描
-
在非边界
α\alpha
α
中实现单遍扫描
所谓非边界
α
\alpha
α
,即:指那些不等于边界0或C的
α
\alpha
α
值。
对整个数据集的扫描相当容易,而实现非边界扫描,首先需要建立这些
α\alpha
α
值的列表,然后再对这个列表进行遍历,同时该步骤会跳过那些已知的不会改变的
α\alpha
α
值。
在选择第一个
α\alpha
α
值后,算法会通过一个内循环来选择第二个
α\alpha
α
值。在优化过程中通过
最大化步长
来获取第二个
α\alpha
α
值。
我们建立一个全局的缓存用于保存误差值,从中选择使得步长或者
Ei
−
E
j
E_i – E_j
E
i
−
E
j
最大的
α\alpha
α
值。
图中我们可以看出,这两个类的数据点分布在一条直线的两侧,我们可以得到两类的分割线。但倘若两类数据集分布在一个圆的内部和外部呢?
前面部分我们说明了非线性支持向量机,使用核技巧
算法代码可见:
03_完整版SMO算法实现_不加核函数.py
上图代码可见:
00_plot.py
,需要将上面算法运行结果手动修改下
8、完整版
SMO
算法实现——加核函数
SMO
假设数据如下图:
上图代码可见:
00_plotRBF.py
算法代码可见:
04_完整版SMO算法实现_加核函数.py
算法运行结果:
iteration number: 5
there are 26 Support Vectors
the training error rate is: 0.070000
the test error rate is: 0.030000
你可以尝试更换不同的
k1
k1
k
1
值以观察测试错位率、训练错误率,支持向量个数
七、案例
1、sklearn.svm.SVC:API
(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True,
probability=False,tol=0.001, cache_size=200, class_weight=None,
verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)
参数:
-
C
:C-SVC的惩罚参数C?默认值是1.0
C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
-
kernel
:核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’:线性、多项式、 RBF函数、sigmoid -
degree
:多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。 -
gamma
: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features -
coef0
:核函数的常数项。对于‘poly’和 ‘sigmoid’有用。 -
probability
:是否采用概率估计?.默认为False -
shrinking
:是否采用shrinking heuristic方法,默认为true -
tol
:停止训练的误差值大小,默认为1e-3 -
cache_size
:核函数cache缓存大小,默认为200 -
class_weight
:类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C) -
verbose
:允许冗余输出? -
max_iter
:最大迭代次数。-1为无限制。 -
decision_function_shape
:‘ovo’, ‘ovr’ or None, default=None3 -
random_state
:数据洗牌时的种子值,int值
主要调节的参数有:
C
、
kernel
、
degree
、
gamma
、
coef0
1、案例1:鸢尾花数据SVM分类
本案例基于鸢尾花数据,使用SVM进行分类。
代码可见:
05_鸢尾花数据SVM分类.py
2、案例2:鸢尾花数据不同分类器的比较
代码可见:
06_鸢尾花数据不同分类器效果比较.py
3、案例3:不同惩罚系数C比较
代码可见:
07_不同SVM惩罚参数C值不同效果比较.py
4、案例4:手写数字识别
score_svm : 0.968854
代码可见:
08_手写数字识别.py
5、案例5:自定义SVM内部核函数
代码可见:
09_自定义SVM内部核函数.py
6、案例6:使用SVM预测波士顿房价(使用的是SVR,是SVM的回归形式)
代码可见:
10_使用SVM预测波士顿房价.py
7、案例7:分类算法的比较
代码可见:
11_分类算法的比较.py
8、案例8:异常值检查(使用的API是OneClassSVM)
代码可见:
12_异常值检测.py
以上便是支持向量机的相关内容,博主也仅限于此,待今后进一步学习之后再来更新,也希望大家多多指教。