基本求解问题
其中
<=>
算法框架:
初始条件如果没有其他信息往往选10;这时f(1)e 算法的关键步骤:
1. 工作集的选择——采用简单的“Maximal violating pair”
kk2. 停止条件——m()M(),
其中
3. 子问题的求解:
分别与i, j对应;
L、U不容易确定:需分4种情况! 我建议如下推导过程——更简单: 令iikti,jkjtj,则(2) 等价于
1mintiti,tj2s..tQiiQijtiktjf()QQitjjjijyitiyjtj0,0ikti,kjtjCtikf()jtj
将tiyiyjtj代入上式,有
minf()f(k)ti,tj1Qii2yiyjQijQjjtj2f(k)yiyjf(k)tjji2s..t12atjbtj2LtjU
其中yi与yj异号时Lmax(ik,jk)、Umin(Cik,Cjk);yi与yj同号时Lmax(ikC,jk)、Umin(ik,Cjk)。
tjmin(max(L,b/a),U),该规划的解为: tiyiyjtj,其中a, b 为
上面二次函数的二次系数和一次系数。 4. 迭代更新
1) 2)
1k1k; kik1ikti,kNjjtj,Nf(k1)f(k)tiQ.,itjQ.,j;(如用第一种L、U确定方法,可以直接迭代计算
。 y.*f(k1),省了一些算)
1f(k1)f(k)atjbtj;
25. 加速技巧——
Caching数据结构:定义矩阵KRlT为零矩阵,T是cache规模,用来存储核矩阵;初始化IRl为0向量,用来记录相应训练样本对应核矩
阵的列的位置;
举例:如果首先i、jk(x1,xj)k(x1,xi)、K(:,2)进入工作集,K(:,1),k(xl,xj)k(xl,xi)而相应地I(i)1、I(j)2,依次类推,以后当某i进入工作集时,要用到其核矩阵相应列时先检查I(i)是否为零,为零表示此列没有计算,非零时K(:,I(i))就是要的已计算好核向量。
进一步可以采用shring策略降低cache规模!——自己尝试应用。 6. 应用推广——参阅文献 (1) 不定核矩阵; (2) (3) 7. 算法推广 1) 二次信息
2)工作集改为3个、4个,但一定要求相应二次规划有解析解! 3) 其他
单个人独立完成:依据所给例子,修改用quadprog求解小规模非线性SVM训练问题,二维数据出图形,并编写随机生成测试数据的测试错分率计算代码。
依小组完成SMO算法编写,包括SMO函数文件和一个测试脚本文件: 具体刘老师学生编写所讲的标准SMO;
要求实现基于核函数的非线性问题求解,并实现caching策略;详细参阅所给资料介绍。
结课考试前个人以邮件形式发给我,附上所画图形。
因篇幅问题不能全部显示,请点此查看更多更全内容