文章目录
优化目标:
针对上述问题,使用比较成熟的二次凸优化的问题,类似于坐标下降方式,每次只优化一个方向,其他方向固定,在这个特定的问题里因为约束条件限制变量存在依赖关系,每次选择两个变量,这两个变量存在依赖关系,可以转化成一个变量,类似于坐标下降方法求解:
优化步骤:
1、考察所有变量(α1,…,αN)及对应的样本点((x1,y1),…,(xN,yN))满足 KKT 条件的情况。
2、若所有变量及对应样本在容许误差内都满足 KKT 条件,则退出循环体、完成训练
3、否则、通过如下步骤选出两个变量来构造新的规划问题:
a、选出违反 KKT 条件最严重的样本点、以其对应的变量作为第一个变量。
b、第二个变量的选取有一种比较繁复且高效的方法,但对于一个朴素的实现而言、第二个变量可以随机选取。
4、将上述步骤选出的变量以外的变量固定、仅针对这两个变量进行最优化。易知此时问题转化为了求二次函数的极大值、从而能简单地得到解析解。
对偶问题本质:
实际上是对每一个样本的权重做规划,支持向量对应的样本点权重为正,非支持向量的权重为0,从这个角度:我们优化时是在优化每一个样本点的权重。
选择第一个样本点标准:
选择第一个样本点标准为:最不满足KKT条件的样本
选择那些不满足KKT条件的样本点,当所有的样本点都满足KKT条件了,我们就找到了对应的解了。
为什么呢?因为最终的最优解肯定是都是满足KKT条件的,这个是KKT条件里定义了的。
我们的解要满足的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
根据这个KKT条件的对偶互补条件,我们有:
α
i
∗
=
0
⇒
y
i
(
w
∗
∙
ϕ
(
x
i
)
+
b
)
≥
1
\alpha_{i}^{*} = 0 \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)\geq1
αi∗=0⇒yi(w∗∙ϕ(xi)+b)≥1
0
<
=
α
i
∗
<
=
C
⇒
y
i
(
w
∗
∙
ϕ
(
x
i
)
+
b
)
=
1
0<=\alpha_{i}^{*}<= C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)=1
0<=αi∗<=C⇒yi(w∗∙ϕ(xi)+b)=1
α
i
∗
=
C
⇒
y
i
(
w
∗
∙
ϕ
(
x
i
)
+
b
)
≤
1
\alpha_{i}^{*}=C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)\leq 1
αi∗=C⇒yi(w∗∙ϕ(xi)+b)≤1
由于
w
∗
=
∑
j
=
1
m
α
j
∗
y
j
ϕ
(
x
j
)
w^{*} = \sum\limits_{j=1}^{m}\alpha_j^{*}y_j\phi(x_j)
w∗=j=1∑mαj∗yjϕ(xj),我们令
g
(
x
)
=
w
∗
∙
ϕ
(
x
)
+
b
=
∑
j
=
1
m
α
j
∗
y
j
K
(
x
,
x
j
)
+
b
∗
g(x) = w^{*} \bullet \phi(x) + b =\sum\limits_{j=1}^{m}\alpha_j^{*}y_jK(x, x_j)+ b^{*}
g(x)=w∗∙ϕ(x)+b=j=1∑mαj∗yjK(x,xj)+b∗,则有:
α
i
∗
=
0
⇒
y
i
g
(
x
i
)
≥
1
\alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i)\geq1
αi∗=0⇒yig(xi)≥1
0
<
α
i
∗
<
C
⇒
y
i
g
(
x
i
)
=
1
0 < \alpha_{i}^{*}< C \Rightarrow y_ig(x_i)=1
0<αi∗<C⇒yig(xi)=1
α
i
∗
=
C
⇒
y
i
g
(
x
i
)
≤
1
\alpha_{i}^{*}=C \Rightarrow y_ig(x_i)\leq 1
αi∗=C⇒yig(xi)≤1
假如所有的 α i ∗ \alpha_{i}^{*} αi∗都满足对偶互补条件,也就是所有的样本都满足KKT条件,那么我们就找到了我们的优化目标。
如何判断样本点是否满足KKT条件?
满足和不满足KKT的情况:
首先我们知道满足KKT条件的三种情况:
1.y[i]*g(i)>=1 且 alpha=0,样本点落在最大间隔外(分类完全正确的那些样本)
2.y[i]*g(i)=1 且 alpha<C,样本点刚好落在最大间隔边界上
3.y[i]*g(i)<=1 且 alpha=C,样本点落在最大间隔内部
那么不满足的情况:
1.若y[i]*g(i)<1,如果alpha<C,那么就违背KKT(alpha=C 才正确)
2.若y[i]*g(i)>1,如果alpha>0,那么就违背KKT(alpha==0才正确)
3.若y[i]*g(i)==1,仍满足KKT条件,无需进行优化
量化不满足KKT条件的程度:
我们使用函数间隔来衡量误差,具体就是函数间隔与1的距离:
每一个样本点都有三种可能情况是否满足KKT的条件,上面介绍过:
1.y[i]*g(i)>=1 且 alpha=0,样本点落在最大间隔外(分类完全正确的那些样本)
2.y[i]*g(i)=1 且 alpha<C,样本点刚好落在最大间隔边界上
3.y[i]*g(i)<=1 且 alpha=C,样本点落在最大间隔内部
我们考虑这3种情况,计算每种情况下的误差,3种情况下的误差平方和最大的样本点就是偏离KKT条件最严重的样本点。
正确的操作步骤应该是如下:
1、计算每一样本的误差
c
i
c_i
ci;
2、判断每一个样本是否满足KKT条件,不满足的化,记录下来并记录误差
3、在不满足KKT的样本里面找|
c
i
c_i
ci|最大的样本点。
上图的那个操作步骤也可以:
1、把
c
i
c_i
ci复制三份,分别对应:alpha=0,alpha<C,alpha=C三种情况
2、alpha=0时,找出所有alpha=0的样本点(不是这种情况的,其他两种情况会考虑,损失置为0),满足y[i]*g(i)>=1,误差损失置为0
3、0<alpha<C时,找出所有0<alpha<C的样本点(不是这种情况的,其他两种情况会考虑,损失置为0),满足y[i]*g(i)=1,误差损失置为0
4、alpha=C时,找出所有alpha=C的样本点(不是这种情况的,其他两种情况会考虑,损失置为0),满足y[i]*g(i)<=1,误差损失置为0
选择第二个样本点标准:
选择第二样本点时,需要选择和第一个样本点偏离最大的样本点。
假设在外层循环中已经找到第1个变量
α
1
\alpha_1
α1,现在要在内层循环中找第2个变量
α
2
\alpha_2
α2。第2个变量选择的标准是希望能使
α
2
\alpha_2
α2有足够大的变化。
第二个变量
α
2
n
e
w
\alpha_2^{new}
α2new的选择标准是让|
E
1
E_1
E1−
E
2
E_2
E2|有足够大的变化。由于
α
1
\alpha_1
α1定了的时候,
E
1
E_1
E1也确定了,所以要想|
E
1
E_1
E1−
E
2
E_2
E2|最大,只需要在
E
1
E_1
E1为正时,选择最小的
E
i
E_i
Ei作为
E
2
E_2
E2, 在
E
1
E_1
E1为负时,选择最大的
E
i
E_i
Ei作为
E
2
E_2
E2,可以将所有的
E
i
E_i
Ei保存下来加快迭代。
SMO算法描述: