SMO算法伪代码
来源:互联网 发布:uujuly淘宝女装店 编辑:程序博客网 时间:2024/06/05 03:21
下面的smo算法伪代码摘自Platt的论文sequence minimal optimization: a fast algorithm for training support vector machines(1998)
if y1 != y2:
L = max(0, alpha2 - alpha1) H = min(C, C + alpha2 - alpha1) (*)
else if y1 == y2:
L = max(0, alpha2 + alpha1 - C) H = min(C, alpha2 + alpha1) (**)
target = desired output vector
point = training point matrix
procedure takeStep(i1, i2)
if (i1 == i2)
return 0
alpha1 = Lagrange multiplier for i1
y1 = target[i1]
E1 = SVM output on point[i1] - y1 (check in error cache)
s = y1 * y2
Compute L, H via equations (*) and (**)
if (L == H)
return 0
k11 = kernel(point[i1], point[i1])
k12 = kernel(point[i1], point[i2])
k22 = kernel(point[i2], point[i2])
eta = k11 + k22 - 2 * k12
if(eta > 0)
a2 = alpha2 + y2 * (E1 - E2)/eta
if(a2 < L)
a2 = L
else if(a2 > H)
a2 = H
else
Lobj = objective function at a2=L
Hobj = objective function at a2=H
if(Lobj < Hobj - eps)
a2 = L
else if(Lobj > Hobj + eps)
a2 = H
else
a2 = alpha2
if(|a2 - alpha2| < eps * (a2 + alpha2 + eps))
return 0
a1 = alpha1 + s * (alpha2 - a2)
Update threshold to reflect change in Lagrange multipliers
Update weight vector to reflect change in a1 & a2, if SVM is linear
Update error cache using new Lagrange multipliers
Store a1 in the alpha array
Store a2 in the alpha array
return 1
endprocedure
procedure examineExample(i2)
y2 = target[i2]
alpha2 = Lagrange multiplier for i2
E2 = SVM output on point[i2] - y2 (check in error cache)
r2 = E2 * y2
if((r2 < -tol && alpha2 < C) || (r2 > tol && alpha2 > 0))
if (number of non-zero & non-C alpha > 1)
i1 = result of second choice heuristic (section 2.2)
if takeStep(i1, i2)
return 1
loop over all non-zero and non-C alpha, starting at a random point
i1 = identity of current alpha
if takeStep(i1, i2)
return 1
loop over all possible i1, starting at a random point
i1 = loop variable
if takeStep(i1, i2)
return 1
return 0
endprocedure
main routine:
numChanged = 0
examineAll = 1
while(numchanged > 0 | examineAll)
numChanged = 0;
if examineAll
loop I over all training examples
numchanged += examineExample(I)
else
loop I over examples where alpha is not 0 & not C
numchanged += examineExample(I)
if examineAll == 1
examineAll = 0
else if numchanged == 0
examineAll = 1
- SMO算法伪代码
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- astar算法伪代码
- 算法(伪代码)
- prim算法 伪代码
- 决策树算法伪代码
- SHA1算法伪代码
- 算法描述---伪代码
- 算法描述---伪代码
- 【python基础知识】python 2 与python 3 的差异
- 欧拉函数模板
- dubbo多协议
- Javase—循环语句习题
- android屏幕适配的两种方式
- SMO算法伪代码
- Eclipse中使用Hibernate
- 【Java基础总结】-类和对象的易错点
- 深入理解javascript中的立即执行函数(function(){…})()
- 计算机网络—运输层—UDP
- CCF CSP 201709-3 JSON查询
- .Net Micro Framework 快速入门
- mysql主从复制配置实现及其监控与维护
- tomcat集群会话保持