int main() { const int32_t feature_cache=0; const int32_t kernel_cache=0; const float64_t rbf_width=10; const float64_t svm_C=10; const float64_t svm_eps=0.001; init_shogun(); gen_rand_data(); // create train labels CLabels* labels=new CLabels(SGVector<float64_t>(lab, NUM)); SG_REF(labels); // create train features CSimpleFeatures<float64_t>* features = new CSimpleFeatures<float64_t>(feature_cache); SG_REF(features); features->set_feature_matrix(feat, DIMS, NUM); // create gaussian kernel CGaussianKernel* kernel = new CGaussianKernel(kernel_cache, rbf_width); SG_REF(kernel); kernel->init(features, features); // create svm via libsvm and train CLibSVM* svm = new CLibSVM(svm_C, kernel, labels); SG_REF(svm); svm->set_epsilon(svm_eps); svm->train(); printf("num_sv:%d b:%f\n", svm->get_num_support_vectors(), svm->get_bias()); // classify + display output CLabels* out_labels=svm->apply(); for (int32_t i=0; i<NUM; i++) printf("out[%d]=%f\n", i, out_labels->get_label(i)); SG_UNREF(labels); SG_UNREF(out_labels); SG_UNREF(kernel); SG_UNREF(features); SG_UNREF(svm); exit_shogun(); return 0; }
int main(int argc, char** argv) { init_shogun(&print_message); // create some data float64_t* matrix = new float64_t[6]; for (int32_t i=0; i<6; i++) matrix[i]=i; // create three 2-dimensional vectors // shogun will now own the matrix created CSimpleFeatures<float64_t>* features= new CSimpleFeatures<float64_t>(); features->set_feature_matrix(matrix, 2, 3); // create three labels CLabels* labels=new CLabels(3); labels->set_label(0, -1); labels->set_label(1, +1); labels->set_label(2, -1); // create gaussian kernel with cache 10MB, width 0.5 CGaussianKernel* kernel = new CGaussianKernel(10, 0.5); kernel->init(features, features); // create libsvm with C=10 and train CLibSVM* svm = new CLibSVM(10, kernel, labels); svm->train(); // classify on training examples for (int32_t i=0; i<3; i++) SG_SPRINT("output[%d]=%f\n", i, svm->classify_example(i)); // free up memory SG_UNREF(svm); exit_shogun(); return 0; }