这次实现中,关于如何选择违反KKT条件最严重的点在书中没有提到,我首先按照书上的方法实现了一下,但是发现没找到ϵ违反KKT条件的量化方法,而且只按书上来,实现的SVM效果并不理想。看来我还是没有完全弄透...先写了个初级版的,以后需要再深入了解时可以重温。

支持向量机

原理

首先我们还是使用感知机中的分类例子,在感知机中分类决策面有无数个,为了找到最优的决策面(人主观地认为能使数据间gap最大的决策面是最好的),提出了最大间隔的线性分类模型.

我们定义分类决策面为wTx+b=0,任意一点到决策面的距离为r=|wTx+b|||w||,对于带标签的数据定义其函数间隔为r=yi(wTx+b),几何间隔为r=r||w||,对于最大间隔的线性分类模型我们的目标就是最大化所有数据点到决策面的几何间隔: max yi(wTx+b)||w||=r||w||s.t.   yi(wTxi+b)r, i=1,2,...,N

为了求解上述函数的极值,需要做两步:

1. 转换为凸函数

1.1 令r=1.

因为间隔只是一个尺度,不影响对于w的求解.

max 1||w||s.t.   yi(wTxi+b)1, i=1,2,...,N

1.2 转换为凸函数求最小值(应该是凸优化问题比较便于求解)

min 12||w||2s.t.   yi(wTxi+b)1, i=1,2,...,N

12是为了便于求导后计算所加的常数项.

2. 求解

2.1 拉格朗日乘数法

先应用拉格朗日乘数法,转换约束条件(如果不理解请参考高等数学第七版下册p118):

minw,b 12||w||2s.t.   yi(wTxi+b)+10, i=1,2,...,N

将约束条件逐一带入得到:

L(w,b,α)=12||w||2+Ni=1αi[yi(wTxi+b)+1]

2.2 拉格朗日乘对偶形式

根据统计学习方法附录C中关于拉格朗日原始问题的对偶问题中的证明,将上述原始问题转换为对偶形式后得到: maxα minw,b L(w,b,α)

接下来求解过程就变成了先求minw,b L(w,b,α)w,b的极小:

求导并使其为0    wL(w,b,α)=wαiyixi=0bL(w,b,α)=αiyi=0得到    w=Ni=1αiyixiαiyi=0带入    minw,b L(w,b,α)=12||w||2+Ni=1αi(yi(wTxi+b)+1)=12wTwNi=1αiyiwTxibNi=1αiyi+Ni=1αi=12wTNi=1αiyixiNi=1αiyiwTxi+Ni=1αi=Ni=1αi12Ni=1αiyiwTxi=Ni=1αi12Ni=1Nj=1αiαjyiyj(xixj)

再求上式对于α的极大:

maxα    Ni=1αi12Ni=1Nj=1αiαjyiyj(xixj)再转换为极小问题minα    12Ni=1Nj=1αiαjyiyj(xixj)Ni=1αis.t.    {Ni=1aiyi=0ai0,  i=1,2,...,N

最后求解时先求解最优的α,求得后带入之前公式求解w,b.

2.3 SMO算法

最小最优化算法(SMO)是用于求解SVM对偶问题解的。

方法是不断固定其他变量,对两个变量构造二次规划、并通过求出其解析解来优化原始的对偶问题。步骤如下:

  1. 检查所有变量α1,...,αN及对应的样本点(x1,y1),,(xN,yN)满足KKT条件的情况。
  2. 如果均满足KKT条件那么完成训练。
  3. 如果有未满足KKT条件的变量,对他们进行优化:
    1. 选择违反KKT条件最严重的样本点,对应的αi作为第一个变量。
    2. 第二个变量αj为对应|EiEj|最大的变量,Ei为对于输入样本点xi的预测误差。
  4. 固定其他变量后,仅对这两个变量进行优化。
2.4 KKT条件

ai与对应样本的xi,yi的KKT条件为: αi=0yig(xi)10<αi<Cyig(xi)=1αi=Cyig(xi)1

不满足KKT条件的量化:

  1. 计算所有样本点的损失c=|yig(xi)1|
  2. 将损失c带入上述三个条件中将如果满足,对应的损失置为0
  3. 将三个处理后的损失相加,其中的最大值对应的索引就是第一个变量。