diff options
Diffstat (limited to 'SD-VBS/benchmarks/svm/src/matlab/takeStep.m')
-rw-r--r-- | SD-VBS/benchmarks/svm/src/matlab/takeStep.m | 137 |
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 @@ | |||
1 | function [a,b,e,ret]=takeStep(i, j, a1, C, e1, Y, X, eps, b1, N, dim) | ||
2 | |||
3 | a = a1; | ||
4 | e = e1; | ||
5 | b = b1; | ||
6 | |||
7 | ret = 1; | ||
8 | if i == j | ||
9 | ret =0; | ||
10 | end | ||
11 | |||
12 | if( 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 | |||
56 | end | ||
57 | |||
58 | if(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 | |||
88 | end | ||
89 | |||
90 | |||
91 | if( 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 | |||
135 | end | ||
136 | |||
137 | end | ||