机器学习:SVM训练,SMO算法描述,启发式选择样本或变量

优化目标:

在这里插入图片描述
针对上述问题,使用比较成熟的二次凸优化的问题,类似于坐标下降方式,每次只优化一个方向,其他方向固定,在这个特定的问题里因为约束条件限制变量存在依赖关系,每次选择两个变量,这两个变量存在依赖关系,可以转化成一个变量,类似于坐标下降方法求解:
在这里插入图片描述

优化步骤:

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
根据这个KKT条件的对偶互补条件,我们有: α i = 0 y i ( w ϕ ( x i ) + b ) 1 \alpha_{i}^{*} = 0 \Rightarrow y_i(w^{*} \bullet \phi(x_i) + b)\geq1 0 < = α i < = C y i ( w ϕ ( x i ) + b ) = 1 0<=\alpha_{i}^{*}<= C \Rightarrow y_i(w^{*} \bullet \phi(x_i) + 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
由于 w = j = 1 m α j y j ϕ ( x j ) w^{*} = \sum\limits_{j=1}^{m}\alpha_j^{*}y_j\phi(x_j) ,我们令 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^{*} ,则有: α i = 0 y i g ( x i ) 1 \alpha_{i}^{*} = 0 \Rightarrow y_ig(x_i)\geq1 0 < α i < C y i g ( x i ) = 1 0 < \alpha_{i}^{*}< C \Rightarrow y_ig(x_i)=1 α i = C y i g ( x i ) 1 \alpha_{i}^{*}=C \Rightarrow y_ig(x_i)\leq 1

假如所有的 α i \alpha_{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
2、判断每一个样本是否满足KKT条件,不满足的化,记录下来并记录误差
3、在不满足KKT的样本里面找| c i c_i |最大的样本点。

上图的那个操作步骤也可以:
1、把 c i c_i 复制三份,分别对应: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 ,现在要在内层循环中找第2个变量 α 2 \alpha_2 。第2个变量选择的标准是希望能使 α 2 \alpha_2 有足够大的变化。
在这里插入图片描述
第二个变量 α 2 n e w \alpha_2^{new} 的选择标准是让| E 1 E_1 E 2 E_2 |有足够大的变化。由于 α 1 \alpha_1 定了的时候, E 1 E_1 也确定了,所以要想| E 1 E_1 E 2 E_2 |最大,只需要在 E 1 E_1 为正时,选择最小的 E i E_i 作为 E 2 E_2 , 在 E 1 E_1 为负时,选择最大的 E i E_i 作为 E 2 E_2 ,可以将所有的 E i E_i 保存下来加快迭代。

SMO算法描述:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40759186/article/details/85698798