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 void vec1_plus_scalar_times_vec2(T *vec1, const T scalar, const T *vec2, int32_t n)
x=x+alpha*y
static float64_t dot(const bool *v1, const bool *v2, int32_t n)
compute dot product between v1 and v2 (blas optimized)
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)