61 #include "3rdparty/svmlight/svm_common.h"
62 #include "3rdparty/svmlight/svm_learn.h"
66 using namespace svmlight;
71 long totwords, totdoc, i;
74 KERNEL_CACHE* kernel_cache;
81 model = (MODEL *) my_malloc(
sizeof (MODEL));
82 learn_parm =
new LEARN_PARM;
83 kernel_parm =
new KERNEL_PARM;
86 learn_parm->alphafile[0] =
' ';
88 learn_parm->biased_hyperplane = 1;
89 learn_parm->sharedslack = 0;
90 learn_parm->skip_final_opt_check = 0;
91 learn_parm->svm_maxqpsize = 10;
92 learn_parm->svm_newvarsinqp = 0;
93 learn_parm->svm_iter_to_shrink = 2;
94 learn_parm->kernel_cache_size = 40;
95 learn_parm->maxiter = 100000;
96 learn_parm->svm_costratio = 1.0;
97 learn_parm->svm_costratio_unlab = 1.0;
98 learn_parm->svm_unlabbound = 1E-5;
99 learn_parm->eps = 0.1;
100 learn_parm->transduction_posratio = -1.0;
101 learn_parm->epsilon_crit = 0.001;
102 learn_parm->epsilon_a = 1E-15;
103 learn_parm->compute_loo = 0;
104 learn_parm->rho = 1.0;
105 learn_parm->xa_depth = 0;
107 learn_parm->svm_c = 0.01;
108 learn_parm->type = REGRESSION;
109 learn_parm->remove_inconsistent = 0;
110 kernel_parm->rbf_gamma = 1.0;
111 kernel_parm->coef_lin = 1;
112 kernel_parm->coef_const = 1;
113 kernel_parm->kernel_type = LINEAR;
114 kernel_parm->poly_degree = 3;
121 kernel_cache_cleanup(kernel_cache);
123 free_model(model, 0);
124 for (i = 0; i < totdoc; i++)
125 free_example(docs[i], 1);
137 write_model(const_cast<char*>(_modelFileName.c_str()), model);
141 this->model = read_model(const_cast<char*>(_modelFileName.c_str()));
147 read_documents(filename, &docs, &target, &totwords, &totdoc);
152 svm_learn_regression(docs, target, totdoc, totwords, learn_parm, kernel_parm, &kernel_cache, model);
163 DOC** supveclist = model->supvec;
164 printf(
"Calculating single descriptor vector out of support vectors (may take some time)\n");
166 singleDetectorVector.clear();
167 singleDetectorVector.resize(model->totwords, 0.);
168 printf(
"Resulting vector size %lu\n", singleDetectorVector.size());
171 for (
long ssv = 1; ssv < model->sv_num; ++ssv) {
173 DOC* singleSupportVector = supveclist[ssv];
174 SVECTOR* singleSupportVectorValues = singleSupportVector->fvec;
175 WORD singleSupportVectorComponent;
177 for (
unsigned long singleFeature = 0; singleFeature < model->totwords; ++singleFeature) {
178 singleSupportVectorComponent = singleSupportVectorValues->words[singleFeature];
179 singleDetectorVector.at(singleSupportVectorComponent.wnum-1) += (singleSupportVectorComponent.weight * model->alpha[ssv]);
const char * getSVMName() const
void loadModelFromFile(const std::string _modelFileName)
void read_problem(char *filename)
KERNEL_PARM * kernel_parm
static SVMlight * getInstance()
Singleton.
void saveModelToFile(const std::string _modelFileName)
void getSingleDetectingVector(std::vector< float > &singleDetectorVector, std::vector< unsigned int > &singleDetectorVectorIndices)
Generates a single detecting feature vector (vec1) from the trained support vectors, for use e.g.
float getThreshold() const
Return model detection threshold / bias.