23 using namespace shogun;
57 SG_ERROR(
"Specified features are not of type CDotFeatures\n");
87 SG_PRINT(
"Maximum number of Newton steps reached. Try larger lambda");
91 obj_fun_linear(weights, out, &obj, sv, &size_sv, grad);
98 for (int32_t i=0; i<
x_d+1; i++)
99 SG_PRINT(
"grad[%d]=%.16g\n", i, grad[i]);
102 for (int32_t i=0; i<size_sv; i++)
108 for (int32_t k=0; k<size_sv; k++)
111 for (int32_t j=0; j<
x_d; j++)
112 Xsv[k*x_d+j]=sgv.
vector[j];
125 for (int32_t i=0; i<
x_d; i++)
132 cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, x_d, x_d, size_sv,
133 1.0, Xsv, size_sv, Xsv, size_sv, 0.0, Xsv2, x_d);
136 for (int32_t j=0; j<
x_d; j++)
138 for (int32_t i=0; i<size_sv; i++)
139 sum[j]+=Xsv[i+j*size_sv];
144 for (int32_t i=0; i<
x_d; i++)
146 for (int32_t j=0; j<
x_d; j++)
147 Xsv2sum[j*(x_d+1)+i]=Xsv2[j*x_d+i];
149 Xsv2sum[x_d*(x_d+1)+i]=sum[i];
152 for (int32_t j=0; j<
x_d; j++)
153 Xsv2sum[j*(x_d+1)+
x_d]=sum[j];
155 Xsv2sum[x_d*(x_d+1)+x_d]=size_sv;
161 cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, x_d+1, x_d+1,
162 x_d+1, 1.0, lcrossdiag, x_d+1, identity_matrix, x_d+1, 1.0,
171 cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, r, 1, r, 1.0,
172 inverse, r, grad, r, 0.0, s2, r);
174 for (int32_t i=0; i<r; i++)
177 line_search_linear(weights, step, out, &t);
182 for (int32_t i=0; i<
x_n; i++)
183 SG_PRINT(
"out[%d]=%.16g\n", i, out[i]);
185 for (int32_t i=0; i<x_d+1; i++)
186 SG_PRINT(
"weights[%d]=%.16g\n", i, weights[i]);
191 cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, 1, 1, r, -0.5,
192 step, r, grad, r, 0.0, &newton_decrement, 1);
194 SG_PRINT(
"Itr=%d, Obj=%f, No of sv=%d, Newton dec=%0.3f, line search=%0.3f\n\n",
195 iter, obj, size_sv, newton_decrement, t);
208 if (newton_decrement*2<
prec*obj)
213 SG_PRINT(
"FINAL W AND BIAS Vector=\n\n");
214 CMath::display_matrix(weights,
x_d+1, 1);
243 for (int32_t i=0; i<
x_n; i++)
249 CMath::display_vector(d,
x_d+1,
"Weight vector");
251 for (int32_t i=0; i<
x_d+1; i++)
254 CMath::display_vector(Xd, x_n,
"XD vector=");
258 cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, 1, 1, x_d,
lambda,
259 weights, x_d, d, x_d, 0.0, &wd, 1);
261 cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, 1, 1, x_d,
lambda, d,
262 x_d, d, x_d, 0.0, &dd, 1);
265 int32_t sv_len=0, *sv=
SG_MALLOC(int32_t, x_n);
270 memcpy(temp1forout, temp1,
sizeof(
float64_t)*x_n);
277 for (int32_t i=0; i<
x_n; i++)
284 for (int32_t i=0; i<sv_len; i++)
286 outzsv[i]=outz[sv[i]];
291 memset(temp1, 0,
sizeof(
float64_t)*sv_len);
298 cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, 1, 1, sv_len, 1.0,
299 Xsv, sv_len, Xsv, sv_len, 0.0, &h, 1);
310 for (int32_t i=0; i<
x_n; i++)
330 for (int32_t i=0; i<
x_n; i++)
337 for (int32_t i=0; i<
x_n; i++)
343 memcpy(w0, weights,
sizeof(
float64_t)*(x_d));
354 memcpy(w0copy, w0,
sizeof(
float64_t)*(x_d+1));
356 cblas_dgemm(CblasColMajor, CblasTrans, CblasNoTrans, 1, 1, x_d+1,
lambda,
357 w0, x_d+1, w0copy, x_d+1, 0.0, &C1, 1);
365 for (int32_t i=0; i<
x_n; i++)
370 CMath::display_vector(vec.
vector, x_d,
"vector");
371 CMath::display_vector(temp1, x_d,
"debuging");
376 for (int32_t i=0; i<
x_d; i++)
383 for (int32_t i=0; i<
x_n; i++)