机器学习——SVM算法(二):支持向量机的实现

SVM算法(二):支持向量机的实现

前导:SVM的推导:https://blog.csdn.net/wcy_1122/article/details/80108647
本篇blog将介绍SVM的实现。
//更新断断续续,有空就填坑,没空就先留坑。

SMO算法

SMO的引入
SVM最后会转化到一个二次优化问题,这个东西可以使用牛顿法或梯度下降法之类的方法解决,但是当样本数量较多的时候运行起来显得较为低效。
所以1998年有人提出了一种专门用于解决SVM的算法,叫做序列最小最优化算法,也就是SMO算法。

二次规划问题
SVM最终被我们转化为了这样一个二次规划问题
我们要最小化g(λ)=(ΣΣλi*λj*yi*yj*(xi*xj))/2-Σλi
其中有约束条件 Σλi*yi=0 还有 C>=λi>=0

SMO算法的简单步骤
我们现列出SMO的步骤,下面再进行推导
1、选取向量λ的两个维度,记做λ1和λ2。
2、将λ1和λ2设为变量,其它设为常数,将原问题转化为一个双变量最优化问题。
3、求解该双变量最优化问题,并更新λ。
4、如果满足收敛就跳出,不然重复1。

双变量最优化问题的求解方法

最优化函数
我们提取出两个变量λ1和λ2,列出函数
w(λ1,λ2)=(K11*λ1^2)/2+(k22*λ2^2)/2+y1*y2*K12*λ1*λ2-(λ1+λ2)+y1*λ1*Σyi*λi*K1i+y2*λ2*Σyi*λi*K2i
其中λ1y1+λ2y2=-Σλiyi0<=λi<=C i=1,2

λ1y1+λ2y2=-Σλiyi是一个双变量方程,我们将λ1用λ2表示得到λ1=-y1*(λ2y2+Σλiyi)
然后带回w(λ1,λ2),可以得到一个只含λ2的函数。
对于这个函数可以直接求极值,并得到对应的λ1和λ2,然后带回更新λ。

经过一波推导可以得到
λ2‘=λ2+y2*(E2-E1)/n
其中n=K11+K22-2*K12
Ei=g(xi)-yi=(Σaj*yj*k(xi,xj))-yi Ei表示预测值与真实值的差
//具体推导过程以后有空再回来写吧

两个变量的选择

//留坑,之后填

参考资料:李航《统计学习方法》

猜你喜欢

转载自blog.csdn.net/wcy_1122/article/details/80384893