CLatentLabels* CLatentSVM::apply() { if (!m_model) SG_ERROR("LatentModel is not set!\n"); if (!features) return NULL; index_t num_examples = m_model->get_num_vectors(); CLatentLabels* hs = new CLatentLabels(num_examples); CBinaryLabels* ys = new CBinaryLabels(num_examples); hs->set_labels(ys); m_model->set_labels(hs); for (index_t i = 0; i < num_examples; ++i) { /* find h for the example */ CData* h = m_model->infer_latent_variable(w, i); hs->add_latent_label(h); } /* compute the y labels */ CDotFeatures* x = m_model->get_psi_feature_vectors(); x->dense_dot_range(ys->get_labels().vector, 0, num_examples, NULL, w.vector, w.vlen, 0.0); return hs; }
int CMulticlassOCAS::msvm_full_compute_output(float64_t *output, void* user_data) { float64_t* W = ((mocas_data*)user_data)->W; uint32_t nY = ((mocas_data*)user_data)->nY; uint32_t nDim = ((mocas_data*)user_data)->nDim; uint32_t nData = ((mocas_data*)user_data)->nData; float64_t* output_values = ((mocas_data*)user_data)->output_values; CDotFeatures* features = ((mocas_data*)user_data)->features; uint32_t i, y; for(y=0; y<nY; y++) { features->dense_dot_range(output_values,0,nData,NULL,&W[nDim*y],nDim,0.0); for (i=0; i<nData; i++) output[LIBOCAS_INDEX(y,i,nY)] = output_values[i]; } return 0; }