37 #ifndef SHARK_ALGORITHMS_MCSVMATSTRAINER_H 38 #define SHARK_ALGORITHMS_MCSVMATSTRAINER_H 98 template <
class InputType,
class CacheType =
float>
113 : base_type(kernel, C, unconstrained)
118 {
return "McSvmATSTrainer"; }
126 RealMatrix linear(ic, classes,1.0);
128 for (
unsigned int r=0, y=0; y<classes; y++)
130 for (
unsigned int p=0; p<classes; p++, r++)
132 nu.
add(r, p, (QpFloatType)((p == y) ? 1.0 : -1.0));
137 QpFloatType c_ne = (
QpFloatType)(-1.0 / (
double)classes);
139 for (
unsigned int r=0, yv=0; yv<classes; yv++)
141 for (
unsigned int pv=0; pv<classes; pv++)
143 QpFloatType sign =
QpFloatType((yv == pv) ? -1 : 1);
144 for (
unsigned int yw=0; yw<classes; yw++, r++)
149 M.
add(r, pv, -sign * c_eq);
153 M.
add(r, pv, sign * c_eq);
154 M.
add(r, yw, -sign * c_ne);
166 RealMatrix alpha(ic,classes,0.0);
167 RealVector bias(classes,0.0);
171 PrecomputedMatrixType matrix(&km);
183 alpha = problem.solution();
199 alpha = problem.solution();
205 for (std::size_t i=0; i<ic; i++)
207 unsigned int y = dataset.
element(i).label;
208 for (
unsigned int c=0; c<classes; c++)
211 unsigned int r = classes * y;
212 for (
unsigned int p=0; p<classes; p++, r++)
213 sum += nu(r, c) * alpha(i, p);
227 template <
class InputType>
238 {
return "LinearMcSvmATSTrainer"; }