3 SVMLinear::SVMLinear(
string className) {
5 this->className=className;
11 void SVMLinear::trainModel(std::vector<std::vector<double> > &features, vector<double> &labels, parameter ¶m,
int bias) {
15 SVMProblem.l=features.size();
16 SVMProblem.n=features[0].size()+bias;
18 SVMProblem.y = Malloc(
double,SVMProblem.l);
19 SVMProblem.x = Malloc(
struct feature_node *,SVMProblem.l);
22 for (
int i=0; i<features.size(); i++)
24 SVMProblem.y[i]=labels[i];
25 vector<double> x=features[i];
27 for (
int j=0; j<x.size(); j++)
34 SVMProblem.x[i]=Malloc(
struct feature_node,sparsity+bias+1);
36 for (
int j=0; j<x.size(); j++)
41 SVMProblem.x[i][cnt].index=j+1;
42 SVMProblem.x[i][cnt].value=value;
48 SVMProblem.x[i][cnt].index=SVMProblem.n,
49 SVMProblem.x[i][cnt].value=1;
52 SVMProblem.x[i][cnt].index=-1;
58 modelLinearSVM=train(&SVMProblem, ¶m);
62 for (
int i=0; i<SVMProblem.l; i++)
63 free(SVMProblem.x[i]);
69 free(param.weight_label);
75 void SVMLinear::saveModel(
string pathFile)
77 save_model(pathFile.c_str(), modelLinearSVM);
80 void SVMLinear::loadModel(
string pathFile)
82 modelLinearSVM=load_model(pathFile.c_str());
119 parameter SVMLinear::initialiseParam(
int solverTYPE,
double C,
double eps,
int nClass,
int nr_Positive,
int nr_Negative)
122 param.solver_type=solverTYPE;
125 if(nr_Negative==0 || nr_Negative<nr_Positive)
131 param.nr_weight=(nClass);
132 param.weight_label = Malloc(
int,nClass);
133 param.weight= Malloc(
double,nClass);
136 param.weight_label[0]=1;
137 param.weight[0]=nr_Negative/nr_Positive;
140 for (
int i=1; i<nClass; i++)
142 param.weight_label[i]=-1;
150 double SVMLinear::predictModel(vector<double> features)
153 if(modelLinearSVM==NULL)
155 fprintf(stdout,
"Error, Train Model First \n");
158 int nr_class=get_nr_class(modelLinearSVM);
159 int bias=modelLinearSVM->bias;
162 for (
int i=0; i<features.size(); i++)
166 feature_node *x=Malloc(
struct feature_node,sparsity+bias+1);
169 for (
int i=0; i<features.size(); i++)
174 x[cnt].value=features[i];
180 x[cnt].index=modelLinearSVM->nr_feature+1,
187 predict_values(modelLinearSVM,x,&val);
194 vector<vector<double> > SVMLinear::readFeatures(
string filePath)
196 vector<vector<double> > featuresMat;
200 infile.open (filePath.c_str());
201 while(!infile.eof() && infile.is_open())
204 getline(infile,line);
206 char * val= strtok((
char*) line.c_str(),
" ");
211 double value=atof(val);
213 val=strtok(NULL,
" ");
216 featuresMat.push_back(f);