SMO算法(比较好的讲解)
来源:互联网 发布:dns域名跳转 编辑:程序博客网 时间:2024/05/21 10:44
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754
本文力求简化SMO的算法思想,毕竟自己理解有限,无奈还是要拿一堆公式推来推去,但是静下心看完本篇并随手推导,你会迎刃而解的。推荐参看SMO原文中的伪代码。
1.SMO概念
上一篇博客已经详细介绍了SVM原理,为了方便求解,把原始最优化问题转化成了其对偶问题,因为对偶问题是一个凸二次规划问题,这样的凸二次规划问题具有全局最优解,如下:
其中
2.SMO原理分析
2.1视为一个二元函数
为了求解N个参数
SMO算法选择同时优化两个参数,固定其他N-2个参数,假设选择的变量为
2.2视为一元函数
由等式约束得:
等式
2.3对一元函数求极值点
上式中是关于变量
1.由上式中假设求得了
α2 的解,带回到(2)式中可求得α1 的解,分别记为αnew1,αnew2 ,优化前的解记为αold1,αold2 ;由于参数α3,α4,...,αN 固定,由等式约束∑Ni=1yiαi=0 有αold1y1+αold2y2=−∑Ni=3αiyi=αnew1y1+αnew2y2=ζ ζ=αold1y1+αold2y2(4)
2.假设SVM超平面的模型为f(x)=wTx+b ,上一篇中已推导出w 的表达式,将其带入得f(x)=∑Ni=1αiyiK(xi,x)+b;f(xi) 表示样本xi 的预测值,yi 表示样本xi 的真实值,定义Ei 表示预测值与真实值之差为Ei=f(xi)−yi(5)
3.由于vi=∑Nj=3αjyjK(xi,xj),i=1,2 ,因此v1=f(x1)−∑j=12yjαjK1j−b(6) v2=f(x2)−∑j=12yjαjK2j−b(7)
把(4)(6)(7)带入下式中:
化简得: 此时求解出的
带入(5)式,并记
2.4对原始解修剪
上述求出的解未考虑到约束条件:
0≤αi=1,2≤C α1y1+α2y2=ζ
在二维平面上直观表达上述两个约束条件
最优解必须要在方框内且在直线上取得,因此
当
当
经过上述约束的修剪,最优解就可以记为
2.5求解αnew1
由于其他N-2个变量固定,因此
2.6取临界情况
大部分情况下,有
η<0 ,当核函数K不满足Mercer定理时,矩阵K非正定;η=0 ,样本x1 与x2 输入特征相同;
也可以如下理解,对(3)式求二阶导数就是
当
当
计算方法:
即当
带入目标函数(1)内,比较
其中
3.启发式选择变量
上述分析是在从N个变量中已经选出两个变量进行优化的方法,下面分析如何高效地选择两个变量进行优化,使得目标函数下降的最快。
第一个变量的选择
第一个变量的选择称为外循环,首先遍历整个样本集,选择违反KKT条件的
边界上的样本对应的
第二个变量的选择
SMO称第二个变量的选择过程为内循环,假设在外循环中找个第一个变量记为
有时按照上述的启发式选择第二个变量,不能够使得函数值有足够的下降,这时按下述步骤:
首先在非边界集上选择能够使函数值足够下降的样本作为第二个变量,
如果非边界集上没有,则在整个样本集上选择第二个变量,
如果整个样本集依然不存在,则重新选择第一个变量。
4.阈值b的计算
每完成对两个变量的优化后,要对b的值进行更新,因为b的值关系到f(x)的计算,即关系到下次优化时
1.如果
由(5)式得,上式前两项可以替换为:
得出:
2.如果
3.如果同时满足
4.如果同时不满足
建议参看SMO原文的伪代码
参考:
统计学习方法,李航
Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines,John C. Platt
http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html
本文转载自:http://blog.csdn.net/luoshixian099/article/details/51227754
个人理解:注意,每次更新的只有三个变量:αi,Ei(实际上是ui,即当前模型的预测值,因为每个样本点的真实值是不会改变的),b.
更新的变量里没有w,因为计算过程中不需要w的参与,我们并不需要计算出w再来计算每个样本点的预测值,因为从w的计算公式可以看出来,只需计算那些支持向量与样本点的内积即可,之所以这样做,而不是计算出w,再计算每个样本点的预测值,是因为引入核函数之后,就不需要,也很难计算w的值了,w对应的将是一个高维向量,计算起来相当麻烦,而且我们用到w的地方全都可以用低维空间的内积和核函数来代替,所以不更新w。
- SMO算法(比较好的讲解)
- 详细讲解smo算法 SVM
- svm的smo算法
- 改进的SMO算法
- android 转 比较好的widget讲解
- 讲解actionbar 比较好的文章
- smo算法的c++实现
- 比较好的算法博客
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- 将指针指向字符串字面量 和 指向数组
- matlab subplot(figure)如何设置使得图像最终显示出来不一样大小
- 使用wireshark分析TCP ——以HTTP协议为例
- input子系统与tp驱动
- IGBT知识
- SMO算法(比较好的讲解)
- MAC 重置MySQL root 密码
- SSM框架Web程序的流程(Spring SpringMVC Mybatis)
- FIFO、LRU、OPT这三种置换算法的缺页次数
- 为什么Java同包目录下的类不需要引入就可以直接使用
- RequestBody/ResponseBody处理Json数据
- JavaScript[基础]
- 用setTheme实现日夜间模式的切换
- 学习HTML5 Canvas这一篇文章就够了