支持向量机
与感知机相同支撑向量机也是一种线性二分类模型。其与感知机不同的是,感知机的分离超平面只要求能够正确分割训练实例因此这样的超平面有无数个,而支撑向量机不但要求能够正确分离训练实例,而且要求这样的超平面要 间隔最大化,训练实例一定的情况下这样的超平面只有一个。同时在求对偶问题的时候利用 核技术可以将支撑向量机扩展至 非线性的数据。
线性可分支撑向量机与硬间隔最大化
线性可分支撑向量机
假设给定一个特征空间上的训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \rbrace
T={(x1,y1),(x2,y2),...,(xN,yN)}其中,
x
i
∈
R
n
x_i \in R^n
xi∈Rn,
y
i
∈
{
+
1
,
−
1
}
y_i \in \lbrace +1,-1 \rbrace
yi∈{+1,−1},
i
=
1
,
2
,
.
.
.
,
N
i=1,2,...,N
i=1,2,...,N
x
i
x_i
xi为第
i
i
i个特征向量,也称为实例,
y
i
y_i
yi为
x
i
x_i
xi的类标记,当
y
i
=
+
1
y_i=+1
yi=+1时,称
x
i
x_i
xi为正例;当
y
i
=
−
1
y_i=-1
yi=−1时,称
x
i
x_i
xi为负例,
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)称为样本点,再假设训练数据集是线性可分的。
给定线性可分训练数据集,通过最大间隔化或等价地求解相应的凸二次优化问题学习得到分离超平面
w
∗
⋅
x
+
b
∗
=
0
w^*·x+b^*=0
w∗⋅x+b∗=0以及相应的分类决策函数
f
(
x
)
=
s
i
g
n
(
w
∗
‘
⋅
x
+
b
∗
)
f(x)=sign(w^*`·x+b^*)
f(x)=sign(w∗‘⋅x+b∗)称为支撑向量机。
函数间隔与几何间隔
一个点距离分离超平面的远近可以表示分类预测的确信度。在超平面 w ‘ ⋅ x + b = 0 w`·x+b=0 w‘⋅x+b=0确定的情况下, ∣ w ⋅ x + b ∣ |w·x+b| ∣w⋅x+b∣能够相应地表示点 x x x距离超平面的远近。而 w ⋅ x + b w·x+b w⋅x+b的符号与类标记 y y y的符号是否一致能够表示分类是否正确。所以使用函数间隔 γ ^ i = y i ( w ⋅ x i + b ) \hat{\gamma}_i=y_i(w·x_i+b) γ^i=yi(w⋅xi+b)来表示分类的正确性及确信度。定义超平面 ( 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) (xi,yi)的函数间隔之最小值,即 γ ^ = min i = 1 , . . . , N γ ^ i \hat{\gamma}=\min_{i=1,...,N}\hat{\gamma}_i γ^=i=1,...,Nminγ^i当超平面不变的时候 w w w与 b b b成比例缩放时,函数间隔也成比例缩放为了解决这个问题在函数间隔的基础上定义几何间隔
- 超平面与单个实例的几何间隔 γ i = y i ( w ∣ ∣ w ∣ ∣ ⋅ x i + b ∣ ∣ w ∣ ∣ ) \gamma_i=y_i(\frac{w}{||w||}·x_i+\frac{b}{||w||}) γi=yi(∣∣w∣∣w⋅xi+∣∣w∣∣b)
- 超平面与训练集合的几何间隔 γ = min i = 1 , . . . , N γ i \gamma=\min_{i=1,...,N}\gamma_i γ=i=1,...,Nminγi从上式可知函数间隔与几何间隔的关系为 γ i = γ i ^ ∣ ∣ w ∣ ∣ \gamma_i=\frac{\hat{\gamma_i}}{||w||} γi=∣∣w∣∣γi^ γ = γ ^ ∣ ∣ w ∣ ∣ \gamma=\frac{\hat{\gamma}}{||w||} γ=∣∣w∣∣γ^
间隔最大化
下面考虑如何求得一个几何间隔最大的分离超平面,即最大间隔分离超平面。具体地,这个问题可以表示为下面的约束优化问题:
max
w
,
b
γ
\max_{w,b}\quad \gamma
w,bmaxγ
s
.
t
.
y
i
(
w
∣
∣
w
∣
∣
⋅
x
i
+
b
∣
∣
w
∣
∣
)
⩾
γ
,
i
=
1
,
2
,
.
.
.
,
N
s.t.\quad y_i(\frac{w}{||w||}·x_i+\frac{b}{||w||})\geqslant \gamma ,\quad i=1,2,...,N
s.t.yi(∣∣w∣∣w⋅xi+∣∣w∣∣b)⩾γ,i=1,2,...,N即我们希望最大化超平面
(
w
,
b
)
(w,b)
(w,b)关于训练数据集的几何间隔,约束条件表示的是超平面
(
w
,
b
)
(w,b)
(w,b)关于每一个训练样本点的几何间隔至少是
γ
\gamma
γ。又因为几何间隔与函数间隔之间的关系以及**
w
,
b
w,b
w,b缩放对超平面本身无影响**,因此可以最优化问题写为
min
w
,
b
1
2
∣
∣
w
∣
∣
2
\min_{w,b}\frac{1}{2}||w||^2
w,bmin21∣∣w∣∣2
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
.
.
.
,
N
s.t. \quad y_i(w·x_i+b)-1 \geqslant 0,\quad i=1,2,...,N
s.t.yi(w⋅xi+b)−1⩾0,i=1,2,...,N由于目标函数是一个二次函数,约束为一个仿射不等式因此这是一个凸二次规划问题。对凸二次问题进行优化最后得到最优解
w
∗
,
b
∗
w^*,b^*
w∗,b∗因此得到分离超平面
w
∗
x
+
b
∗
=
0
w^*x+b^*=0
w∗x+b∗=0与分离超平面最近的点成为支撑向量,支撑向量所在的超平面为,正样例:
w
∗
x
+
b
=
1
w^*x+b=1
w∗x+b=1,负样例:
w
∗
x
+
b
=
−
1
w^*x+b=-1
w∗x+b=−1几何表示为
学习的对偶问题
在实际中求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。之所以要用对偶问题而不是原始问题进行求解是因为以下两个原因:
- 对偶问题更容易求解
- 引入核函数进而推广到非线性分类问题
对于每一个不等式引入拉格朗日函数 L ( w , b , a ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 N a i y i ( w ⋅ x i + b ) + ∑ i = 1 N a i L(w,b,a)=\frac{1}{2}||w||^2-\sum_{i=1}^Na_iy_i(w·x_i+b)+\sum_{i=1}^Na_i L(w,b,a)=21∣∣w∣∣2−i=1∑Naiyi(w⋅xi+b)+i=1∑Nai其中, a = ( a 1 , a 2 , . . . , a N ) T a=(a_1,a_2,...,a_N)^T a=(a1,a2,...,aN)T为拉格朗日乘子向量。原始问题的对偶问题是 max a min w , b L ( w , b , a ) \max_a\min_{w,b}L(w,b,a) amaxw,bminL(w,b,a)先极小再极大
- 求 min w , b L ( w , b , a ) \min_{w,b}L(w,b,a) minw,bL(w,b,a)即使 Δ w L ( w , b , a ) = w − ∑ i = 1 N a i y i x i = 0 \Delta_wL(w,b,a)=w-\sum_{i=1}^Na_iy_ix_i=0 ΔwL(w,b,a)=w−i=1∑Naiyixi=0 Δ b L ( w , b , a ) = 0 \Delta_bL(w,b,a)=0 ΔbL(w,b,a)=0解的 w = ∑ i = 1 N a i y i x i w=\sum_{i=1}^Na_iy_ix_i w=i=1∑Naiyixi ∑ i = 1 N a i y i = 0 \sum_{i=1}^Na_iy_i=0 i=1∑Naiyi=0将第一个式子带入到拉格朗日函数中得 L ( w , b , a ) = − 1 2 ∑ i = 1 N ∑ j = 1 N a i a j y i y j ( x i ⋅ x j ) + ∑ i = 1 N a i L(w,b,a)=-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^Na_ia_jy_iy_j(x_i·x_j)+\sum_{i=1}^Na_i L(w,b,a)=−21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)+i=1∑Nai
- 求 min w , b L ( w , b , a ) \min_{w,b}L(w,b,a) minw,bL(w,b,a)对 a a a的极大化即对偶问题如下 min a 1 2 ∑ i = 1 N ∑ j = 1 N a i a j y i y j ( x i x j ) − ∑ i = 1 N a i \min_a\quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^Na_ia_jy_iy_j(x_ix_j)-\sum_{i=1}^Na_i amin21i=1∑Nj=1∑Naiajyiyj(xixj)−i=1∑Nai s . t . ∑ i = 1 N a i y i = 0 s.t. \quad \sum_{i=1}^Na_iy_i=0 s.t.i=1∑Naiyi=0 a i ⩾ 0 , i = 1 , 2 , . . . , N a_i \geqslant 0,\quad i=1,2,...,N ai⩾0,i=1,2,...,N根据C2定理对偶问题的最优解就是原问题的最优解假设对偶问题最优解有 ( w ∗ , b ∗ , a ∗ ) (w^*,b^*,a^*) (w∗,b∗,a∗)得 w ∗ = ∑ i = 1 N a i ∗ y i x i w^*=\sum_{i=1}^Na^*_iy_ix_i w∗=i=1∑Nai∗yixi b ∗ = y j − ∑ i = 1 N a i ∗ y i ( x i ⋅ x j ) b^*=y_j-\sum_{i=1}^Na^*_iy_i(x_i·x_j) b∗=yj−i=1∑Nai∗yi(xi⋅xj)以上也是原问题的最优解,在计算 b ∗ b^* b∗时任一选取一个时 a j ∗ > 0 a_j^*>0 aj∗>0的分量对应的样本点 ( x j , y j ) (x_j,y_j) (xj,yj)计算即可,如此就通过解对偶问题求得了原问题的最优解。
线性支持向量机与软间隔最大化
线性可分支持向量机学习方法,对线性不可分训练数据是不适用的,因此这时上述方法中的不等式并不都能成立。线性不可分意味着某些样本点
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)不能满足函数间隔大于等于1的约束条件,为了解决这个问题对每一个样本
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)引入了一个松弛变量
ξ
i
⩾
0
\xi_i\geqslant0
ξi⩾0。使函数间隔加上松弛变量大于等于1。这样,约束条件为
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
y_i(w·x_i+b)\geqslant1-\xi
yi(w⋅xi+b)⩾1−ξ目标函数变为
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
\frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i
21∣∣w∣∣2+Ci=1∑Nξi其中
C
⩾
0
C\geqslant0
C⩾0称为惩罚参数。凸二次规划形式变为
min
w
,
b
,
ξ
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
N
ξ
i
\min_{w,b,\xi}\quad \frac{1}{2}||w||^2+C\sum_{i=1}^N\xi_i
w,b,ξmin21∣∣w∣∣2+Ci=1∑Nξi
s
.
t
.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
,
i
=
1
,
2
,
.
.
.
,
N
s.t.\quad y_i(w·x_i+b)\geqslant 1-\xi,\quad i=1,2,...,N
s.t.yi(w⋅xi+b)⩾1−ξ,i=1,2,...,N
ξ
i
⩾
0
,
1
,
2
,
.
.
.
,
N
\xi_i\geqslant0,\quad 1,2,...,N
ξi⩾0,1,2,...,N线性支撑向量机(与线性可分支撑向量机的区别)的定义如下:
对于给定线性不可分的训练数据集,通过求解凸二次规划问题,即软间隔最大化问题,得到的分离超平面为
w
∗
⋅
x
+
b
∗
=
0
w^*·x+b^*=0
w∗⋅x+b∗=0以及相应的分类决策函数
f
(
x
)
=
s
i
g
n
(
w
∗
⋅
x
+
b
∗
)
f(x)=sign(w^*·x+b^*)
f(x)=sign(w∗⋅x+b∗)称为支持向量机。注意线性支持向量机在数学形式上与线性可分支持向量机是完全相同的,其区别是在优化过程中
b
b
b的取值上,在线性支持向量机中
b
b
b最后是一个均值。
学习的对偶问题
算法如下:
- 选择惩罚参数 C > 0 C>0 C>0,构造并求解凸二次规划问题 min a 1 2 ∑ i = 1 N ∑ j = 1 N a i a j y i y j ( x i ⋅ x j ) − ∑ i = 1 N a i \min_a\quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^Na_ia_jy_iy_j(x_i·x_j)-\sum_{i=1}^Na_i amin21i=1∑Nj=1∑Naiajyiyj(xi⋅xj)−i=1∑Nai s . t . ∑ i = 1 N a i y i = 0 s.t.\quad \sum_{i=1}^Na_iy_i=0 s.t.i=1∑Naiyi=0 0 ⩽ a i ⩽ C , i = 1 , 2 , . . . , N 0\leqslant a_i \leqslant C,\quad i=1,2,...,N 0⩽ai⩽C,i=1,2,...,N求得最优解 a ∗ = ( a 1 ∗ , a 2 ∗ , . . . , a N ∗ ) T a^*=(a_1^*,a_2^*,...,a_N^*)^T a∗=(a1∗,a2∗,...,aN∗)T
- 计算 w ∗ = ∑ i = 1 N a i ∗ y i x i w^*=\sum_{i=1}^Na_i^*y_ix_i w∗=i=1∑Nai∗yixi选择 a ∗ a^* a∗的一个分量$a_j^*适合条件 0 < a j ∗ < C 0<a_j^*<C 0<aj∗<C,计算 b ∗ = y i − ∑ i = 1 N y i a i ∗ ( x i ⋅ x j ) b^*=y_i-\sum_{i=1}^Ny_ia_i^*(x_i·x_j) b∗=yi−i=1∑Nyiai∗(xi⋅xj)
- 求得分离超平面 w ∗ ⋅ x + b ∗ = 0 w^*·x+b^*=0 w∗⋅x+b∗=0分类决策函数 f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ ) f(x)=sign(w^*·x+b^*) f(x)=sign(w∗⋅x+b∗)
步骤2中,对任一适合条件 0 < a j ∗ < C 0<a_j^*<C 0<aj∗<C的 a j ∗ a_j^* aj∗,都可以求出一个 b ∗ b^* b∗,但是由于原始问题对 b b b的解并不唯一,所以实际计算时可以取在所有符合条件的样本点上的平均值。
非线性支持向量机与核函数
采用软间隔的线性支持向量机对大体上是线性可分的只是有少量数据是线性不可分的非线性数据集起到很好的效果,但是对那些在高维空间线性可分低维空间线性不可分的数据集则表现不佳,因此引入了核技巧,通过核函数可以把数据映射到高维空间中,这些数据在高维空间中是可以进行线性可分的。核函数定义如下:
设输入
x
x
x是输入空间(欧式空间的子集或离散集合),又设
H
H
H为特征空间(希尔伯特空间),如果存在一个从
x
x
x到
H
H
H的映射
ϕ
(
x
)
:
χ
→
H
\phi(x):\chi \rightarrow H
ϕ(x):χ→H使得对所有
x
,
z
∈
x
x,z \in x
x,z∈x,函数
K
(
x
,
z
)
K(x,z)
K(x,z)满足条件
K
(
x
,
z
)
=
ϕ
(
x
)
⋅
ϕ
(
z
)
K(x,z)=\phi(x)·\phi(z)
K(x,z)=ϕ(x)⋅ϕ(z)则称
K
(
x
,
z
)
K(x,z)
K(x,z)为核函数,
ϕ
(
x
)
\phi(x)
ϕ(x)为映射函数,式中
ϕ
(
x
)
⋅
ϕ
(
z
)
\phi(x)·\phi(z)
ϕ(x)⋅ϕ(z)为
ϕ
(
x
)
\phi(x)
ϕ(x)和
ϕ
(
z
)
\phi(z)
ϕ(z)的内积。
核技巧的想法是,在学习过程中只定义核函数
K
(
x
,
z
)
K(x,z)
K(x,z),而不显式地定义映射函数
ϕ
\phi
ϕ。通常,直接计算
K
(
x
,
z
)
K(x,z)
K(x,z)比较容易,而通过
ϕ
(
x
)
\phi(x)
ϕ(x)和
ϕ
(
z
)
\phi(z)
ϕ(z)计算
K
(
x
,
z
)
K(x,z)
K(x,z)并不容易。
核技巧在支持向量机中的应用:
在对偶问题的目标函数中内积
x
i
⋅
x
j
x_i·x_j
xi⋅xj可以用核函数
K
(
x
i
,
x
j
)
=
ϕ
(
x
)
⋅
ϕ
(
x
j
)
K(x_i,x_j)=\phi(x)·\phi(x_j)
K(xi,xj)=ϕ(x)⋅ϕ(xj)来替代,此时对偶问题目标函数为
W
(
a
)
=
1
2
∑
i
=
1
N
∑
j
=
1
N
a
i
a
j
y
i
y
j
K
(
x
i
,
x
j
)
−
∑
i
=
1
N
a
i
W(a)=\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^Na_ia_jy_iy_jK(x_i,x_j)-\sum_{i=1}^Na_i
W(a)=21i=1∑Nj=1∑NaiajyiyjK(xi,xj)−i=1∑Nai同样,分类决策函数中的内积也可以用核函数代替,而分类决策函数式成为
f
(
x
)
=
s
i
g
n
(
∑
i
=
1
N
a
i
∗
y
i
K
(
x
i
,
x
)
+
b
∗
)
f(x)=sign(\sum_{i=1}^Na^*_iy_iK(x_i,x)+b^*)
f(x)=sign(i=1∑Nai∗yiK(xi,x)+b∗)
正定核
已知映射函数
ϕ
\phi
ϕ,可以通过
ϕ
(
x
)
\phi(x)
ϕ(x)和
ϕ
(
z
)
\phi(z)
ϕ(z)内积求得核函数
K
(
x
,
z
)
K(x,z)
K(x,z)。不用构造映射
ϕ
(
x
)
\phi(x)
ϕ(x)能否直接判断一个给定的函数
K
(
x
,
z
)
K(x,z)
K(x,z)是不是核函数?,或者说,函数
K
(
x
,
z
)
K(x,z)
K(x,z)满足什么条件才能成为核函数?,本节就是在讨论这个问题。通常来说核函数就是正定核函数。
正定核的等价定义
设
χ
⊂
R
n
\chi \subset R^n
χ⊂Rn,
K
(
x
,
z
)
K(x,z)
K(x,z)是定义在
χ
×
χ
\chi \times \chi
χ×χ上的对称函数,如果任意
x
i
∈
χ
,
i
=
1
,
2
,
.
.
.
,
m
,
K
(
x
,
z
)
x_i \in \chi,\quad i=1,2,...,m, \quad K(x,z)
xi∈χ,i=1,2,...,m,K(x,z)对应的Gram矩阵
K
=
[
K
(
x
i
,
x
j
)
]
m
×
m
K=[K(x_i,x_j)]_{m \times m}
K=[K(xi,xj)]m×m是半正定矩阵,则称
K
(
x
,
z
)
K(x,z)
K(x,z)是正定核。
常用核函数
- 多项式核函数 K ( x , z ) = ( x ⋅ z + 1 ) p K(x,z)=(x·z+1)^p K(x,z)=(x⋅z+1)p对应的支持向量机是一个 p p p次多项式分类器。
- 高斯核函数 K ( x , z ) = e x p ( − ∣ ∣ x − z ∣ ∣ 2 2 σ 2 ) K(x,z)=exp(-\frac{||x-z||^2}{2\sigma^2}) K(x,z)=exp(−2σ2∣∣x−z∣∣2)
序列最小化算法
序列最小化算法(SMO)要解如下的凸二次规划的对偶问题 min a 1 2 ∑ i = 1 N ∑ j = 1 N a i a j y i y j K ( x i , x j ) − ∑ i = 1 N a i \min_a \quad \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^Na_ia_jy_iy_jK(x_i,x_j)-\sum_{i=1}^Na_i amin21i=1∑Nj=1∑NaiajyiyjK(xi,xj)−i=1∑Nai s . t . ∑ i = 1 N a i y i = 0 s.t. \quad \sum_{i=1}^Na_iy_i=0 s.t.i=1∑Naiyi=0 0 ⩽ a i ⩽ C , i = 1 , 2 , . . . , N 0 \leqslant a_i \leqslant C,\quad i=1,2,...,N 0⩽ai⩽C,i=1,2,...,NSMO算法是一种启发式算法,简单说就是选择两个变量固定其他变量,求关于这两个变量的最优解,这两个变量的解应该更接近原始二次规划的解,因为这使得原始二次规划问题目标函数变得更小。重要的是这时子问题可以通过解析的方法求解,这样就可以大大提高算法的计算速度。子问题有两个变量一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。
两个变量二次规划的求解方法
假设选择的两个变量是 a 1 , a 2 a_1,a_2 a1,a2,其他变量 a i ( i = 3 , 4 , . . . , N ) a_i(i=3,4,...,N) ai(i=3,4,...,N)。于是SMO最优化的子问题写成 min a 1 , a 2 W ( a 1 , a 2 ) = 1 2 K 11 a 1 2 + 1 2 K 22 a 2 2 + y 1 y 2 K 12 a 1 a 2 − ( a 1 + a 2 ) + y 1 a 1 ∑ i = 3 N y i a i K i 1 + y 2 a 2 ∑ i = 3 N y i a i K i 2 \min_{a_1,a_2}\quad W(a_1,a_2)=\frac{1}{2}K_{11}a_1^2+\frac{1}{2}K_{22}a_2^2+y_1y_2K_{12}a_1a_2-(a_1+a_2)+y_1a_1\sum_{i=3}^Ny_ia_iK_{i1}+y_2a_2\sum_{i=3}^Ny_ia_iK_{i2} a1,a2minW(a1,a2)=21K11a12+21K22a22+y1y2K12a1a2−(a1+a2)+y1a1i=3∑NyiaiKi1+y2a2i=3∑NyiaiKi2 s . t . a 1 y 1 + a 2 y 2 = − ∑ i = 3 N y i a i = ζ s.t. \quad a_1y_1+a_2y_2=-\sum_{i=3}^Ny_ia_i=\zeta s.t.a1y1+a2y2=−i=3∑Nyiai=ζ 0 ⩽ a i ⩽ C , i = 1 , 2 0 \leqslant a_i \leqslant C,\quad i=1,2 0⩽ai⩽C,i=1,2其中 K i j = K ( x i , x j ) , i , j = 1 , 2 , . . . , N K_{ij}=K(x_i,x_j),i,j=1,2,...,N Kij=K(xi,xj),i,j=1,2,...,N, ζ \zeta ζ是常数,目标函数式中省略了不含 a 1 , a 2 a_1,a_2 a1,a2的常数项。最优化之后可以得到如下结果:
在不考虑不等式约束的情况下得到最优化解
a
2
n
e
w
,
u
n
c
=
a
2
o
l
d
+
y
2
(
E
1
−
E
2
)
η
a_2^{new,unc}=a_2^{old}+\frac{y_2(E_1-E_2)}{\eta}
a2new,unc=a2old+ηy2(E1−E2)其中
a
2
n
e
w
,
u
n
c
a_2^{new,unc}
a2new,unc是未经剪切的初值,
a
2
o
l
d
a_2^{old}
a2old是满足约束的初始值。
η
=
K
1
1
+
K
2
2
−
2
K
1
2
=
∣
∣
ϕ
(
x
1
)
−
ϕ
(
x
2
)
∣
∣
2
\eta=K_11+K_22-2K_12=||\phi(x_1)-\phi(x_2)||^2
η=K11+K22−2K12=∣∣ϕ(x1)−ϕ(x2)∣∣2
ϕ
(
x
)
\phi(x)
ϕ(x)是输入空间到特征空间的映射,
E
i
=
g
(
x
i
)
−
y
i
=
(
∑
j
=
1
N
a
j
y
j
K
(
x
j
,
x
i
)
+
b
)
−
y
i
E_i=g(x_i)-y_i=(\sum_{j=1}^Na_jy_jK(x_j,x_i)+b)-y_i
Ei=g(xi)−yi=(j=1∑NajyjK(xj,xi)+b)−yi表示预测值与真实值之差,
E
i
,
i
=
1
,
2
E_i,\quad i=1,2
Ei,i=1,2
经过剪辑后
a
2
n
e
w
=
{
H
,
a
2
n
e
w
.
u
n
c
>
H
a
2
n
e
w
,
u
n
c
,
L
⩽
a
2
n
e
w
.
u
n
c
⩽
H
L
,
a
2
n
e
w
,
u
n
c
<
L
a_2^{new} =\begin{cases}H, & \text{$a_2^{new.unc}>H$} \\a_2^{new,unc}, & \text{$L \leqslant a_2^{new.unc} \leqslant H$} \\L, & \text{$a_2^{new,unc}<L$} \end{cases}
a2new=⎩⎪⎨⎪⎧H,a2new,unc,L,a2new.unc>HL⩽a2new.unc⩽Ha2new,unc<L由
a
2
n
e
w
a_2^{new}
a2new求得
a
1
n
e
w
a_1^{new}
a1new是
a
1
n
e
w
=
a
1
o
l
d
+
y
1
y
2
(
a
2
o
l
d
−
a
2
n
e
w
)
a_1^{new}=a_1^{old}+y_1y_2(a_2^{old}-a_2^{new})
a1new=a1old+y1y2(a2old−a2new)如此选取完变量之后就能够计算出所选变量的最优解。现在的问题是如何这样的两个变量呢?
变量的选取
- 第一个变量的选取
如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。具体算法如下
- 取初值 a ( 0 ) = 0 a^{(0)}=0 a(0)=0,令 k = 0 k=0 k=0
- 选取优化变量 a 1 ( k + 1 ) a 2 ( k + 1 ) a_1^{(k+1)}a_2^{(k+1)} a1(k+1)a2(k+1),更新 a a a为 a ( k + 1 ) a^{(k+1)} a(k+1)
- 若在精度 ϵ \epsilon ϵ范围内满足停机条件 ∑ i = 1 N a i y i = 0 \sum_{i=1}^Na_iy_i=0 i=1∑Naiyi=0 0 ⩽ a i ⩽ C , i = 1 , 2 , . . . , N 0 \leqslant a_i \leqslant C,\quad i=1,2,...,N 0⩽ai⩽C,i=1,2,...,N其中, g ( x i ) = ∑ j = 1 N a j y j K ( x j , x i ) + b g(x_i)=\sum_{j=1}^Na_jy_jK(x_j,x_i)+b g(xi)=j=1∑NajyjK(xj,xi)+b则转4,否则令 k = k + 1 k=k+1 k=k+1,转2
- 取 a ^ = a ( k + 1 ) \hat{a}=a^{(k+1)} a^=a(k+1)