Libsvm (http://www.csie.ntu.edu.tw/~cjlin/libsvm/) is a great SVM implementation, made by a group in National Taiwan University, Taiwan.
But you can't see the cross-validation result, by default. Now I am gonna do a multi-source boosting and I am gonna compute the sensitivity and specificity. So I need the result of each weak classifier.
What to do? Well, libsvm is open sourced! You just need to simply modify the svm-train.c file. Following discussion is based on libsvm v. 2.88, released on Oct. 30, 2008
If you could understand the diff tool, here is the result of running
diff svm-train.c svm-train.origin.c
You can see my modifications are marked as "modified by Forrest" 43c43
<> void do_cross_validation();
70c70
<> do_cross_validation();
86c86
<> void do_cross_validation()
117,119d116
< //modified by Forrest < dumpfile=" fopen(filename," accuracy =" %g%%\n"> printf("Cross Validation Accuracy = %g%%\n",100.0*total_correct/prob.l);
The result is stored in the array target
but the actual target is stored in the array prob.y
. So I dump these two arrays as two columns into a file. The dumping file shares the same prefix with the input file (for cross-validation there is only one input file of svmlight format) but with a ".dump" extension. So, the do_cross_validation
char *filename
this time. In line 70, you can feed in the filename by a global variable input_file_name
which is obtained by the function parse_command_line
. should have an input argument
That's why we should open source software for research - you can always make tools work in the way you want. Now I am gonna write another program to read the result from the dumping file and do classifier boosting.
No comments:
Post a Comment