Skip to content

Commit 5baa778

Browse files
committed
separate the evaluation function
1 parent bd6de6c commit 5baa778

File tree

3 files changed

+52
-27
lines changed

3 files changed

+52
-27
lines changed

mascot/svmMain.cu

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,10 @@ int main(int argc, char **argv)
2626
argv[2] = "0.382";
2727
argv[3] = "-c";
2828
argv[4] = "100";
29-
argv[argc - 1] = "dataset/iris.scale";
30-
// argv[argc - 1] = "dataset/a1a";
31-
/**/
29+
// argv[argc - 1] = "dataset/iris.scale";
30+
argv[argc - 1] = "dataset/a1a";
31+
parser.cross_validation = 0;//0 for cross-validation; 1 for training; 2 for evaluation
32+
3233
char fileName[1024];
3334
char savedFileName[1024];
3435
Parser parser;
@@ -42,18 +43,26 @@ int main(int argc, char **argv)
4243

4344
printf("CUDA initialized.\n");
4445

45-
/*if(parser.cross_validation == 1)*/
46-
/*{*/
47-
/*//perform cross validation*/
48-
/*cout << "performing cross-validation" << endl;*/
49-
/*crossValidation(parser.param, fileName);*/
50-
/*}*/
51-
/*else*/
46+
if(parser.cross_validation == 1)
5247
{
48+
//perform cross validation*/
49+
cout << "performing cross-validation" << endl;
50+
crossValidation(parser.param, fileName);
51+
}
52+
else if(parser.cross_validation == 0)
53+
{
5354
//perform svm training
5455
cout << "performing training" << endl;
55-
svmModel model = trainSVM(parser.param, fileName, parser.nNumofFeature);
56-
}
56+
svmModel model = trainSVM(parser.param, fileName, parser.nNumofFeature);
57+
}
58+
else if(parser.cross_validation == 2)
59+
{
60+
//perform svm evaluation
61+
cout << "performing evaluation" << endl;
62+
svmModel model = trainSVM(parser.param, fileName, parser.nNumofFeature);
63+
evaluateSVMClassifier(model, fileName, parser.nNumofFeature);
64+
65+
}
5766

58-
return 0;
67+
return 0;
5968
}

mascot/trainingFunction.cu

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ using std::endl;
3434

3535
void trainingByGPU(vector<vector<float_point> > &v_v_DocVector, data_info &SDataInfo, SVMParam &param);
3636

37-
3837
svmModel trainSVM(SVMParam &param, string strTrainingFileName, int nNumofFeature) {
3938

4039
vector<vector<float_point> > v_v_DocVector;
@@ -47,20 +46,8 @@ svmModel trainSVM(SVMParam &param, string strTrainingFileName, int nNumofFeature
4746
rawDataRead.ReadFromFile(strTrainingFileName, nNumofFeature, v_v_DocVector, v_nLabel);
4847
svmProblem problem(v_v_DocVector, v_nLabel);
4948
svmModel model;
50-
param.probability = 1;//train with probability
49+
param.probability = 0;//train with probability
5150
model.fit(problem, param);
52-
vector<int> predictLabels = model.predict(v_v_DocVector, true);
53-
int numOfCorrect = 0;
54-
for (int i = 0; i < v_v_DocVector.size(); ++i) {
55-
if (predictLabels[i] == v_nLabel[i])
56-
numOfCorrect++;
57-
// for (int j = 0; j < problem.getNumOfClasses(); ++j) {
58-
// printf("%.2f,",prob[i][j]);
59-
// }
60-
// printf("\n");
61-
}
62-
printf("training accuracy = %.2f%%(%d/%d)\n", numOfCorrect / (float) v_v_DocVector.size()*100, numOfCorrect,
63-
(int) v_v_DocVector.size());
6451
return model;
6552
}
6653

@@ -185,3 +172,30 @@ svm_model trainBinarySVM(svmProblem &problem, const SVMParam &param) {
185172
model.nDimension = problem.getNumOfFeatures();
186173
return model;
187174
}
175+
176+
void evaluateSVMClassifier(svmModel &model, string strTrainingFileName, int nNumofFeature)
177+
{
178+
vector<vector<float_point> > v_v_DocVector;
179+
vector<int> v_nLabel;
180+
181+
CDataIOOps rawDataRead;
182+
int nNumofInstance = 0; //not used
183+
long long nNumofValue = 0; //not used
184+
BaseLibSVMReader::GetDataInfo(strTrainingFileName, nNumofFeature, nNumofInstance, nNumofValue);
185+
rawDataRead.ReadFromFile(strTrainingFileName, nNumofFeature, v_v_DocVector, v_nLabel);
186+
187+
//perform svm classification
188+
vector<int> predictLabels = model.predict(v_v_DocVector, true);
189+
int numOfCorrect = 0;
190+
for (int i = 0; i < v_v_DocVector.size(); ++i)
191+
{
192+
if (predictLabels[i] == v_nLabel[i])
193+
numOfCorrect++;
194+
// for (int j = 0; j < problem.getNumOfClasses(); ++j) {
195+
// printf("%.2f,",prob[i][j]);
196+
// }
197+
// printf("\n");
198+
}
199+
printf("training accuracy = %.2f%%(%d/%d)\n", numOfCorrect / (float) v_v_DocVector.size()*100,
200+
numOfCorrect, (int) v_v_DocVector.size());
201+
}

mascot/trainingFunction.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ using std::string;
1616
svmModel trainSVM(SVMParam &param, string strTrainingFileName, int nNumofFeature);
1717

1818
svm_model trainBinarySVM(svmProblem &problem, const SVMParam &param);
19+
void evaluateSVMClassifier(svmModel &model, string strTrainingFileName, int nNumofFeature);
20+
1921
#endif /* TESTTRAINER_H_ */

0 commit comments

Comments
 (0)