37 #ifndef SHARK_ALGORITHMS_MCSVMATMTRAINER_H 38 #define SHARK_ALGORITHMS_MCSVMATMTRAINER_H 98 template <
class InputType,
class CacheType =
float>
112 : base_type(kernel, C, unconstrained)
117 {
return "McSvmATMTrainer"; }
125 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));
138 QpFloatType c_ne = (
QpFloatType)(-1.0 / (
double)classes);
140 for (
unsigned int r=0, yv=0; yv<classes; yv++)
142 for (
unsigned int pv=0; pv<classes; pv++)
144 QpFloatType sign =
QpFloatType((yv == pv) ? -1 : 1);
145 for (
unsigned int yw=0; yw<classes; yw++, r++)
150 M.
add(r, pv, -sign * c_eq);
154 M.
add(r, pv, sign * c_eq);
155 M.
add(r, yw, -sign * c_ne);
168 RealMatrix alpha(ic,classes,0.0);
169 RealVector bias(classes,0.0);
173 PrecomputedMatrixType matrix(&km);
185 alpha = problem.solution();
201 alpha = problem.solution();
207 for (std::size_t i=0; i<ic; i++)
209 unsigned int y = dataset.
element(i).label;
210 for (
unsigned int c=0; c<classes; c++)
213 unsigned int r = classes * y;
214 for (
unsigned int p=0; p<classes; p++, r++)
215 sum += nu(r, c) * alpha(i,p);
229 template <
class InputType>
240 {
return "LinearMcSvmATMTrainer"; }