文章目录
优化目标:
针对上述问题,使用比较成熟的二次凸优化的问题,类似于坐标下降方式,每次只优化一个方向,其他方向固定,在这个特定的问题里因为约束条件限制变量存在依赖关系,每次选择两个变量,这两个变量存在依赖关系,可以转化成一个变量,类似于坐标下降方法求解:
优化步骤:
1、考察所有变量(α1,…,αN)及对应的样本点((x1,y1),…,(xN,yN))满足 KKT 条件的情况。
2、若所有变量及对应样本在容许误差内都满足 KKT 条件,则退出循环体、完成训练
3、否则、通过如下步骤选出两个变量来构造新的规划问题:
a、选出违反 KKT 条件最严重的样本点、以其对应的变量作为第一个变量。
b、第二个变量的选取有一种比较繁复且高效的方法,但对于一个朴素的实现而言、第二个变量可以随机选取。
4、将上述步骤选出的变量以外的变量固定、仅针对这两个变量进行最优化。易知此时问题转化为了求二次函数的极大值、从而能简单地得到解析解。
对偶问题本质:
实际上是对每一个样本的权重做规划,支持向量对应的样本点权重为正,非支持向量的权重为0,从这个角度:我们优化时是在优化每一个样本点的权重。
选择第一个样本点标准:
选择第一个样本点标准为:最不满足KKT条件的样本
选择那些不满足KKT条件的样本点,当所有的样本点都满足KKT条件了,我们就找到了对应的解了。
为什么呢?因为最终的最优解肯定是都是满足KKT条件的,这个是KKT条件里定义了的。
我们的解要满足的KKT条件的对偶互补条件为:
根据这个KKT条件的对偶互补条件,我们有:
由于
,我们令
,则有:
假如所有的 都满足对偶互补条件,也就是所有的样本都满足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、计算每一样本的误差
;
2、判断每一个样本是否满足KKT条件,不满足的化,记录下来并记录误差
3、在不满足KKT的样本里面找|
|最大的样本点。
上图的那个操作步骤也可以:
1、把
复制三份,分别对应: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个变量
,现在要在内层循环中找第2个变量
。第2个变量选择的标准是希望能使
有足够大的变化。
第二个变量
的选择标准是让|
−
|有足够大的变化。由于
定了的时候,
也确定了,所以要想|
−
|最大,只需要在
为正时,选择最小的
作为
, 在
为负时,选择最大的
作为
,可以将所有的
保存下来加快迭代。
SMO算法描述: