57 SG_ERROR(
"Specified features are not of type CDotFeatures\n")
77 int32_t *sv=SG_MALLOC(int32_t,
x_n), size_sv=0, iter=0;
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);
203 SG_FREE(identity_matrix);
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++)
317 SG_FREE(temp1forout);
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++)
void display_matrix(const char *name="matrix") const
static void fill_vector(T *vec, int32_t len, T value)
virtual ELabelType get_label_type() const =0
virtual bool train_machine(CFeatures *data=NULL)
virtual void set_w(const SGVector< float64_t > src_w)
The class Labels models labels, i.e. class assignments of objects.
virtual float64_t dense_dot(int32_t vec_idx1, const float64_t *vec2, int32_t vec2_len)=0
virtual int32_t get_num_vectors() const =0
static void create_diagonal_matrix(T *matrix, T *v, int32_t size)
virtual void add_to_dense_vec(float64_t alpha, int32_t vec_idx1, float64_t *vec2, int32_t vec2_len, bool abs_val=false)=0
Features that support dot products among other operations.
virtual int32_t get_dim_feature_space() const =0
static void scale_vector(T alpha, T *vec, int32_t len)
Scale vector inplace.
static void transpose_matrix(T *&matrix, int32_t &num_feat, int32_t &num_vec)
static float64_t * pinv(float64_t *matrix, int32_t rows, int32_t cols, float64_t *target=NULL)
static void vector_multiply(T *target, const T *v1, const T *v2, int32_t len)
Compute vector multiplication.
static void add_scalar(T alpha, T *vec, int32_t len)
Add scalar to vector inplace.
virtual void set_features(CDotFeatures *feat)
static T sum(T *vec, int32_t len)
Return sum(vec)
Class LinearMachine is a generic interface for all kinds of linear machines like classifiers.
static float64_t dot(const bool *v1, const bool *v2, int32_t n)
Compute dot product between v1 and v2 (blas optimized)
static void vec1_plus_scalar_times_vec2(T *vec1, const T scalar, const T *vec2, int32_t n)
x=x+alpha*y
all of classes and functions are contained in the shogun namespace
The class Features is the base class of all feature objects.
SGVector< float64_t > get_computed_dot_feature_vector(int32_t num)
Binary Labels for binary classification.
virtual void set_bias(float64_t b)
bool has_property(EFeatureProperty p) const
virtual void set_labels(CLabels *lab)
void add(const SGVector< T > x)