15 #define INDEX(ROW,COL,DIM) (((COL)*(DIM))+(ROW))
16 #define MINUS_INF INT_MIN
17 #define PLUS_INF INT_MAX
18 #define KDELTA(A,B) (A==B)
19 #define KDELTA4(A1,A2,A3,A4) ((A1==A2)||(A1==A3)||(A1==A4)||(A2==A3)||(A2==A4)||(A3==A4))
21 using namespace shogun;
46 "Is the basic untransformed alpha.");
60 SG_ERROR(
"Numbert of vectors (%d) does not match number of labels (%d)\n",
68 int32_t num_virtual_data= num_data*(num_classes-1);
70 SG_INFO(
"%d trainlabels, %d classes\n", num_data, num_classes);
73 for (int32_t i=0; i<num_data; i++)
80 int32_t tmax = 1000000000;
91 memset(vector_c, 0, num_virtual_data*
sizeof(
float64_t));
98 CGMNPLib mnp(vector_y,
kernel,num_data, num_virtual_data, num_classes, reg_const);
100 mnp.
gmnp_imdm(vector_c, num_virtual_data, tmax,
101 tolabs, tolrel, thlb, alpha, &t, &History, verb);
105 memset(all_alphas,0,num_classes*num_data*
sizeof(
float64_t));
109 memset(all_bs,0,num_classes*
sizeof(
float64_t));
112 for(int32_t i=0; i < num_classes; i++ )
114 for(int32_t j=0; j < num_virtual_data; j++ )
121 all_alphas[(inx1*num_classes)+i] +=
123 all_bs[i] += alpha[j]*(
KDELTA(vector_y[inx1],i+1)-
KDELTA(i+1,inx2));
129 for (int32_t i=0; i<num_classes; i++)
132 for (int32_t j=0; j<num_data; j++)
134 if (all_alphas[j*num_classes+i] != 0)
138 SG_DEBUG(
"svm[%d] has %d sv, b=%f\n", i, num_sv, all_bs[i]);
143 for (int32_t j=0; j<num_data; j++)
145 if (all_alphas[j*num_classes+i] != 0)
147 svm->
set_alpha(k, all_alphas[j*num_classes+i]);
163 for(
index_t j=0; j<num_virtual_data; j++)
184 if (y == NULL || x == NULL)
return NULL;