summaryrefslogtreecommitdiffstats
path: root/SD-VBS/benchmarks/svm/src/matlab/takeStep.m
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/benchmarks/svm/src/matlab/takeStep.m')
-rw-r--r--SD-VBS/benchmarks/svm/src/matlab/takeStep.m137
1 files changed, 0 insertions, 137 deletions
diff --git a/SD-VBS/benchmarks/svm/src/matlab/takeStep.m b/SD-VBS/benchmarks/svm/src/matlab/takeStep.m
deleted file mode 100644
index 565f9ec..0000000
--- a/SD-VBS/benchmarks/svm/src/matlab/takeStep.m
+++ /dev/null
@@ -1,137 +0,0 @@
1function [a,b,e,ret]=takeStep(i, j, a1, C, e1, Y, X, eps, b1, N, dim)
2
3a = a1;
4e = e1;
5b = b1;
6
7ret = 1;
8if i == j
9 ret =0;
10end
11
12if( ret ~= 0)
13 %variable initialization%
14 a_old = a;
15
16 if a_old(i,1) > 0 && a_old(i,1) < C
17 Ei = e(i,1);
18 else
19 Ei = cal_learned_func(i, a, b, N, Y, X, dim) - Y(i,1);
20 end
21
22 if a_old(j,1) > 0 && a_old(j,1) < C
23 Ej = e(j,1);
24 else
25 Ej = cal_learned_func(j, a, b, N, Y, X, dim) - Y(j,1);
26 end
27
28 s = Y(i,1) * Y(j,1);
29
30 %Compute L, H%
31 if Y(i,1) == Y(j,1)
32 gamma = a_old(i,1) + a_old(j,1);
33 if gamma > C
34 L = gamma-C;
35 H = C;
36 else
37 L = 0;
38 H = gamma;
39 end
40 else
41 gamma = a_old(i,1) - a_old(j,1);
42 if gamma > 0
43 L = 0;
44 H = C - gamma;
45 else
46 L = -gamma;
47 H = C;
48 end
49 end
50
51
52 if L == H
53 ret=0;
54 end
55
56end
57
58if(ret ~=0)
59% %Compute eta
60 k11 = polynomial(3,X(i,:), X(i,:), dim);
61 k12 = polynomial(3,X(i,:), X(j,:), dim);
62 k22 = polynomial(3,X(j,:), X(j,:), dim);
63 eta = 2 * k12 - k11 - k22;
64
65 if eta < 0
66 a(j,1) = a_old(j,1) + Y(j,1) * (Ej - Ei) / eta;
67 if a(j,1) < L
68 a(j,1) = L;
69 elseif a(j,1) > H
70 a(j,1) = H;
71 end
72 else
73 %Compute Lobj, Hobj: objective function at a2=L, a2=H 22di
74 c1 = eta/2;
75 c2 = Y(j,1) * (Ei-Ej)- eta * a_old(j,1);
76 Lobj = c1 * L * L + c2 * L;
77 Hobj = c1 * H * H + c2 * H;
78
79 if (Lobj > Hobj+eps)
80 a(j,1) = L;
81 elseif (Lobj < Hobj-eps)
82 a(j,1) = H;
83 else
84 a(j,1) = a_old(j,1);
85 end
86 end
87
88end
89
90
91if( ret~= 0)
92
93 if abs(a(j,1)-a_old(j,1)) < eps*(a(j,1)+a_old(j,1)+eps)
94 ret=0;
95 else
96 a(i,1) = a_old(i,1) - s * (a(j,1) - a_old(j,1));
97 if a(i,1) < 0
98 a(j,1) = a(j,1) + s * a(i,1);
99 a(i,1) = 0;
100 elseif a(i,1) > C
101 t = a(i,1)-C;
102 a(j,1) = a(j,1) + s * t;
103 a(i,1) = C;
104 end
105
106 %Update threshold to reect change in Lagrange multipliers
107 if a(i,1) > 0 && a(i,1) < C
108 bnew = b + Ei + Y(i,1) * (a(i,1) - a_old(i,1)) * k11 + Y(j,1) * (a(j,1) - a_old(j,1)) * k12;
109 else
110 if a(j,1) > 0 && a(j,1) < C
111 bnew = b + Ej + Y(i,1) * (a(i,1) - a_old(i,1)) * k12 + Y(j,1) * (a(j,1) - a_old(j,1)) * k22;
112 else
113 b1 = b + Ei + Y(i,1) * (a(i,1) - a_old(i,1)) * k11 + Y(j,1) * (a(j,1) - a_old(j,1)) * k12;
114 b2 = b + Ej + Y(i,1) * (a(i,1) - a_old(i,1)) * k12 + Y(j,1) * (a(j,1) - a_old(j,1)) * k22;
115 bnew = (b1 + b2) / 2;
116 end
117 end
118 delta_b = bnew - b;
119 b = bnew;
120
121 %Update error cache using new Lagrange multipliers 24ai
122
123 t1 = Y(i,1) * (a(i,1)-a_old(i,1));
124 t2 = Y(j,1) * (a(j,1)-a_old(j,1));
125 for k=1:N
126 if 0 < a_old(i,1) && a_old(i,1) < C
127 e(k,1) = e(k,1)+t1 * polynomial(3,X(i,:),X(k,:),dim) + t2 * polynomial(3,X(j,:),X(k,:),dim) - delta_b;
128 e(i,1) = 0;
129 e(j,1) = 0;
130 end
131 end
132 ret = 1;
133 end
134
135end
136
137end