yangyang12138

导航

svm支持向量机

线性可分支持向量机

指可以在两个分类的数据点之间找到一个超平面(WTx + b = 0),使得两个分类与该平面的最小距离相等,

其中离该平面最近的点就是支撑向量,即WTx+b=1或WTx+b=-1

 

y(xn)=WTx+b

y(xn)>0   tn=1

y(xn)<0   tn=-1

 

=>tn*y(xn)>0

 

 

当X向量很复杂时可以令 y(x)=WTf(x)+b

当X是一维的时候 f(x)=x

tn*y(xn)/||w|| = tn(WTf(xn)+b)/||w||

 

得出支持向量机目标函数

 

arg max (w,b){1/||w||min(n)[tn(WTf(xn)+b)]}

找到每个X到该平面的最小距离,所有距离中的最大值时对应的w,b就是我们要求的结果。

已知tn*y(xn)>=1,故目标函数可化简为 arg max(w,b)||w||*||w||/2

 

利用拉格朗日函数

 

 

 然后可以利用smo算法求解。

 

另外当 分类不满足线性可分时,可以令超平面 WTXi + b = 1-ζ,推到的结果与线性结果相同,只是 0<ai<C

SMO算法思想

通过观察SVM的优化目标我们可以发现其最终的目的是要计算出一组最优的alpha和常数项b的值。SMO算法的中心思想就是每次选出两个alpha进行优化(之所以是两个是因为alpha的约束条件决定了其与标签乘积的累加等于0,因此必须一次同时优化两个,否则就会破坏约束条件),然后固定其他的alpha值。重复此过程,直到达到某个终止条件程序退出并得到我们需要的优化结果。接下来,就具体推导一下SMO算法的细节。

算法数学推导

由于SVM中有核函数的概念,因此我们用Kij来表示在核函数K下向量i和向量j的计算值。现在假定我们已经选出alpha1和alpha2两个待优化项,然后将原优化目标函数展开为与alpha1和alpha2有关的部分和无关的部分:

 
 

其中c是与alpha1和alpha2无关的部分,在本次优化中当做常数项处理。由SVM优化目标函数的约束条件:

 
 

可以得到:

 
 

将优化目标中所有的alpha1都替换为用alpha2表示的形式,得到如下式子:

 
 

此时,优化目标中仅含有alpha2一个待优化变量了,我们现在将待优化函数对alpha2求偏导得到如下结果:

 
 

已知:

 
 

将以上三个条件带入偏导式子中,得到如下结果:

 
 

化简后得:

 
 

记:

 
 

若n<=0则退出本次优化,若n>0则可得到alpha2的更新公式:

 
 

此时,我们已经得到了alpha2的更新公式。不过我们此时还需要考虑alpha2的取值范围问题。因为alpha2的取值范围应该是在0到C之间,但是在这里并不能简单地把取值范围限定在0至C之间,因为alpha2的取值不仅仅与其本身的范围有关,也与alpha1,y1和y2有关。设alpha1*y1+alpha2*y2=k,画出其约束,在这里要分两种情况,即y1是否等于y2。我们在这里先来考虑y1!=y2的情况:在这种情况下alpha1-alpha2=k:

 
图2

可以看出此时alpha2的取值范围为:

 
 

当y1=y2时,alpha1+alpha2=k:

 
图3

可以看出此时alpha2的取值范围为:

 
 

以上,可以总结出alpha2的取值上下界的规律:

 
 

故可得到alpha2的取值范围:

 
 

由alpha_old1y1+alpha_old2y2=alpha_new1y1+alpha_new2y2可得alpha1的更新公式:

 
 

接下来,需要确定常数b的更新公式,在这里首先需要根据“软间隔”下SVM优化目标函数的KKT条件推导出新的KKT条件,得到结果如下:

 
 

由于现在alpha的取值范围已经限定在0至C之间,也就是上面KKT条件的第三种情况。接下来我们将第三种KKT条件推广到任意核函数的情境下:

 
 

由此我们可以得到常数b的更新公式:

 
 

其中Ei是SVM的预测误差,计算式为:

 
 

以上,笔者就已经把SMO算法的大部分细节推导出来了。接下来,我们可以根据这些推导对SMO算法进行实现,并且用我们的算法训练一个SVM分类器。

 

smo算法转载子https://www.jianshu.com/p/eef51f939ace

 

posted on 2019-12-12 22:07  杨杨09265  阅读(469)  评论(0编辑  收藏  举报