36 register_parameters();
47 register_parameters();
54 void CMulticlassOCAS::register_parameters()
82 uint32_t nY = num_classes;
83 uint32_t nData = num_vectors;
93 user_data.
W = SG_CALLOC(
float64_t, (int64_t)num_features*num_classes);
94 user_data.
oldW = SG_CALLOC(
float64_t, (int64_t)num_features*num_classes);
95 user_data.
new_a = SG_CALLOC(
float64_t, (int64_t)num_features*num_classes);
99 user_data.
nY = num_classes;
100 user_data.
nDim = num_features;
101 user_data.
nData = num_vectors;
103 ocas_return_value_T value =
104 msvm_ocas_solver(C, labels.
vector, nY, nData, TolRel, TolAbs,
105 QPBound, MaxTime, BufSize, Method,
114 SG_DEBUG(
"Number of iterations [nIter] = %d \n",value.nIter)
115 SG_DEBUG(
"Number of cutting planes [nCutPlanes] = %d \n",value.nCutPlanes)
116 SG_DEBUG(
"Number of non-zero alphas [nNZAlpha] = %d \n",value.nNZAlpha)
117 SG_DEBUG(
"Number of training errors [trn_err] = %d \n",value.trn_err)
118 SG_DEBUG(
"Primal objective value [Q_P] = %f \n",value.Q_P)
119 SG_DEBUG(
"Dual objective value [Q_D] = %f \n",value.Q_D)
120 SG_DEBUG(
"Output time [output_time] = %f \n",value.output_time)
121 SG_DEBUG(
"Sort time [sort_time] = %f \n",value.sort_time)
122 SG_DEBUG(
"Add time [add_time] = %f \n",value.add_time)
123 SG_DEBUG(
"W time [w_time] = %f \n",value.w_time)
124 SG_DEBUG(
"QP solver time [qp_solver_time] = %f \n",value.qp_solver_time)
125 SG_DEBUG(
"OCAS time [ocas_time] = %f \n",value.ocas_time)
126 SG_DEBUG(
"Print time [print_time] = %f \n",value.print_time)
127 SG_DEBUG(
"QP exit flag [qp_exitflag] = %d \n",value.qp_exitflag)
128 SG_DEBUG(
"Exit flag [exitflag] = %d \n",value.exitflag)
131 for (int32_t i=0; i<num_classes; i++)
139 SG_FREE(user_data.
W);
140 SG_FREE(user_data.
oldW);
141 SG_FREE(user_data.
new_a);
142 SG_FREE(user_data.
full_A);
153 uint32_t nDim = ((
mocas_data*)user_data)->nDim;
155 for(uint32_t j=0; j < nY*nDim; j++)
156 W[j] = oldW[j]*(1-t) + t*W[j];
164 float64_t *alpha, uint32_t nSel,
void* user_data)
170 uint32_t nDim = ((
mocas_data*)user_data)->nDim;
174 memcpy(oldW, W,
sizeof(
float64_t)*nDim*nY);
177 for(i=0; i<nSel; i++)
181 for(j=0; j<nDim*nY; j++)
182 W[j] += alpha[i]*full_A[LIBOCAS_INDEX(j,i,nDim*nY)];
193 uint32_t nSel,
void* user_data)
199 uint32_t nDim = ((
mocas_data*)user_data)->nDim;
200 uint32_t nData = ((
mocas_data*)user_data)->nData;
204 uint32_t i, j, y, y2;
206 memset(new_a, 0,
sizeof(
float64_t)*nDim*nY);
208 for(i=0; i < nData; i++)
210 y = (uint32_t)(data_y[i]);
211 y2 = (uint32_t)new_cut[i];
221 for(j=0; j < nDim*nY; j++ )
222 full_A[LIBOCAS_INDEX(j,nSel,nDim*nY)] = new_a[j];
224 new_col_H[nSel] = sq_norm_a;
225 for(i=0; i < nSel; i++)
229 for(j=0; j < nDim*nY; j++ )
230 tmp += new_a[j]*full_A[LIBOCAS_INDEX(j,i,nDim*nY)];
242 uint32_t nDim = ((
mocas_data*)user_data)->nDim;
243 uint32_t nData = ((
mocas_data*)user_data)->nData;
251 features->
dense_dot_range(output_values,0,nData,NULL,&W[nDim*y],nDim,0.0);
252 for (i=0; i<nData; i++)
253 output[LIBOCAS_INDEX(y,i,nY)] = output_values[i];
virtual void dense_dot_range(float64_t *output, int32_t start, int32_t stop, float64_t *alphas, float64_t *vec, int32_t dim, float64_t b)
static int msvm_sort_data(float64_t *vals, float64_t *data, uint32_t size)
static void msvm_print(ocas_return_value_T value)
virtual void set_w(const SGVector< float64_t > src_w)
The class Labels models labels, i.e. class assignments of objects.
static void qsort_index(T1 *output, T2 *index, uint32_t size)
static int msvm_full_add_new_cut(float64_t *new_col_H, uint32_t *new_cut, uint32_t nSel, void *user_data)
virtual bool train_machine(CFeatures *data=NULL)
CDynamicObjectArray * m_machines
virtual int32_t get_num_vectors() const =0
float64_t m_max_train_time
void set_max_iter(int32_t max_iter)
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
Multiclass Labels for multi-class classification.
generic linear multiclass machine
virtual ~CMulticlassOCAS()
CMulticlassStrategy * m_multiclass_strategy
static int msvm_full_compute_output(float64_t *output, void *user_data)
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)
float64_t * output_values
int32_t get_num_classes() const
void set_method(int32_t method)
static void msvm_full_compute_W(float64_t *sq_norm_W, float64_t *dp_WoldW, float64_t *alpha, uint32_t nSel, void *user_data)
all of classes and functions are contained in the shogun namespace
void set_features(CDotFeatures *f)
The class Features is the base class of all feature objects.
SGVector< T > clone() const
void push_back(CSGObject *e)
CDotFeatures * m_features
multiclass one vs rest strategy used to train generic multiclass machines for K-class problems with b...
void set_buf_size(int32_t buf_size)
void set_epsilon(float64_t epsilon)
static float64_t msvm_update_W(float64_t t, void *user_data)