| @@ -0,0 +1,245 @@ | |||
| ----------------------------------------- | |||
| --- MATLAB/OCTAVE interface of LIBSVM --- | |||
| ----------------------------------------- | |||
| Table of Contents | |||
| ================= | |||
| - Introduction | |||
| - Installation | |||
| - Usage | |||
| - Returned Model Structure | |||
| - Other Utilities | |||
| - Examples | |||
| - Additional Information | |||
| Introduction | |||
| ============ | |||
| This tool provides a simple interface to LIBSVM, a library for support vector | |||
| machines (http://www.csie.ntu.edu.tw/~cjlin/libsvm). It is very easy to use as | |||
| the usage and the way of specifying parameters are the same as that of LIBSVM. | |||
| Installation | |||
| ============ | |||
| On Windows systems, pre-built binary files are already in the | |||
| directory '..\windows', so no need to conduct installation. Now we | |||
| provide binary files only for 64bit MATLAB on Windows. If you would | |||
| like to re-build the package, please rely on the following steps. | |||
| We recommend using make.m on both MATLAB and OCTAVE. Just type 'make' | |||
| to build 'libsvmread.mex', 'libsvmwrite.mex', 'svmtrain.mex', and | |||
| 'svmpredict.mex'. | |||
| On MATLAB or Octave: | |||
| >> make | |||
| If make.m does not work on MATLAB (especially for Windows), try 'mex | |||
| -setup' to choose a suitable compiler for mex. Make sure your compiler | |||
| is accessible and workable. Then type 'make' to start the | |||
| installation. | |||
| Example: | |||
| matlab>> mex -setup | |||
| (ps: MATLAB will show the following messages to setup default compiler.) | |||
| Please choose your compiler for building external interface (MEX) files: | |||
| Would you like mex to locate installed compilers [y]/n? y | |||
| Select a compiler: | |||
| [1] Microsoft Visual C/C++ version 7.1 in C:\Program Files\Microsoft Visual Studio | |||
| [0] None | |||
| Compiler: 1 | |||
| Please verify your choices: | |||
| Compiler: Microsoft Visual C/C++ 7.1 | |||
| Location: C:\Program Files\Microsoft Visual Studio | |||
| Are these correct?([y]/n): y | |||
| matlab>> make | |||
| On Unix systems, if neither make.m nor 'mex -setup' works, please use | |||
| Makefile and type 'make' in a command window. Note that we assume | |||
| your MATLAB is installed in '/usr/local/matlab'. If not, please change | |||
| MATLABDIR in Makefile. | |||
| Example: | |||
| linux> make | |||
| To use octave, type 'make octave': | |||
| Example: | |||
| linux> make octave | |||
| For a list of supported/compatible compilers for MATLAB, please check | |||
| the following page: | |||
| http://www.mathworks.com/support/compilers/current_release/ | |||
| Usage | |||
| ===== | |||
| matlab> model = svmtrain(training_label_vector, training_instance_matrix [, 'libsvm_options']); | |||
| -training_label_vector: | |||
| An m by 1 vector of training labels (type must be double). | |||
| -training_instance_matrix: | |||
| An m by n matrix of m training instances with n features. | |||
| It can be dense or sparse (type must be double). | |||
| -libsvm_options: | |||
| A string of training options in the same format as that of LIBSVM. | |||
| matlab> [predicted_label, accuracy, decision_values/prob_estimates] = svmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']); | |||
| matlab> [predicted_label] = svmpredict(testing_label_vector, testing_instance_matrix, model [, 'libsvm_options']); | |||
| -testing_label_vector: | |||
| An m by 1 vector of prediction labels. If labels of test | |||
| data are unknown, simply use any random values. (type must be double) | |||
| -testing_instance_matrix: | |||
| An m by n matrix of m testing instances with n features. | |||
| It can be dense or sparse. (type must be double) | |||
| -model: | |||
| The output of svmtrain. | |||
| -libsvm_options: | |||
| A string of testing options in the same format as that of LIBSVM. | |||
| Returned Model Structure | |||
| ======================== | |||
| The 'svmtrain' function returns a model which can be used for future | |||
| prediction. It is a structure and is organized as [Parameters, nr_class, | |||
| totalSV, rho, Label, ProbA, ProbB, nSV, sv_coef, SVs]: | |||
| -Parameters: parameters | |||
| -nr_class: number of classes; = 2 for regression/one-class svm | |||
| -totalSV: total #SV | |||
| -rho: -b of the decision function(s) wx+b | |||
| -Label: label of each class; empty for regression/one-class SVM | |||
| -sv_indices: values in [1,...,num_traning_data] to indicate SVs in the training set | |||
| -ProbA: pairwise probability information; empty if -b 0 or in one-class SVM | |||
| -ProbB: pairwise probability information; empty if -b 0 or in one-class SVM | |||
| -nSV: number of SVs for each class; empty for regression/one-class SVM | |||
| -sv_coef: coefficients for SVs in decision functions | |||
| -SVs: support vectors | |||
| If you do not use the option '-b 1', ProbA and ProbB are empty | |||
| matrices. If the '-v' option is specified, cross validation is | |||
| conducted and the returned model is just a scalar: cross-validation | |||
| accuracy for classification and mean-squared error for regression. | |||
| More details about this model can be found in LIBSVM FAQ | |||
| (http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html) and LIBSVM | |||
| implementation document | |||
| (http://www.csie.ntu.edu.tw/~cjlin/papers/libsvm.pdf). | |||
| Result of Prediction | |||
| ==================== | |||
| The function 'svmpredict' has three outputs. The first one, | |||
| predictd_label, is a vector of predicted labels. The second output, | |||
| accuracy, is a vector including accuracy (for classification), mean | |||
| squared error, and squared correlation coefficient (for regression). | |||
| The third is a matrix containing decision values or probability | |||
| estimates (if '-b 1' is specified). If k is the number of classes | |||
| in training data, for decision values, each row includes results of | |||
| predicting k(k-1)/2 binary-class SVMs. For classification, k = 1 is a | |||
| special case. Decision value +1 is returned for each testing instance, | |||
| instead of an empty vector. For probabilities, each row contains k values | |||
| indicating the probability that the testing instance is in each class. | |||
| Note that the order of classes here is the same as 'Label' field | |||
| in the model structure. | |||
| Other Utilities | |||
| =============== | |||
| A matlab function libsvmread reads files in LIBSVM format: | |||
| [label_vector, instance_matrix] = libsvmread('data.txt'); | |||
| Two outputs are labels and instances, which can then be used as inputs | |||
| of svmtrain or svmpredict. | |||
| A matlab function libsvmwrite writes Matlab matrix to a file in LIBSVM format: | |||
| libsvmwrite('data.txt', label_vector, instance_matrix) | |||
| The instance_matrix must be a sparse matrix. (type must be double) | |||
| For 32bit and 64bit MATLAB on Windows, pre-built binary files are ready | |||
| in the directory `..\windows', but in future releases, we will only | |||
| include 64bit MATLAB binary files. | |||
| These codes are prepared by Rong-En Fan and Kai-Wei Chang from National | |||
| Taiwan University. | |||
| Examples | |||
| ======== | |||
| Train and test on the provided data heart_scale: | |||
| matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); | |||
| matlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07'); | |||
| matlab> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training data | |||
| For probability estimates, you need '-b 1' for training and testing: | |||
| matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); | |||
| matlab> model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07 -b 1'); | |||
| matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); | |||
| matlab> [predict_label, accuracy, prob_estimates] = svmpredict(heart_scale_label, heart_scale_inst, model, '-b 1'); | |||
| To use precomputed kernel, you must include sample serial number as | |||
| the first column of the training and testing data (assume your kernel | |||
| matrix is K, # of instances is n): | |||
| matlab> K1 = [(1:n)', K]; % include sample serial number as first column | |||
| matlab> model = svmtrain(label_vector, K1, '-t 4'); | |||
| matlab> [predict_label, accuracy, dec_values] = svmpredict(label_vector, K1, model); % test the training data | |||
| We give the following detailed example by splitting heart_scale into | |||
| 150 training and 120 testing data. Constructing a linear kernel | |||
| matrix and then using the precomputed kernel gives exactly the same | |||
| testing error as using the LIBSVM built-in linear kernel. | |||
| matlab> [heart_scale_label, heart_scale_inst] = libsvmread('../heart_scale'); | |||
| matlab> | |||
| matlab> % Split Data | |||
| matlab> train_data = heart_scale_inst(1:150,:); | |||
| matlab> train_label = heart_scale_label(1:150,:); | |||
| matlab> test_data = heart_scale_inst(151:270,:); | |||
| matlab> test_label = heart_scale_label(151:270,:); | |||
| matlab> | |||
| matlab> % Linear Kernel | |||
| matlab> model_linear = svmtrain(train_label, train_data, '-t 0'); | |||
| matlab> [predict_label_L, accuracy_L, dec_values_L] = svmpredict(test_label, test_data, model_linear); | |||
| matlab> | |||
| matlab> % Precomputed Kernel | |||
| matlab> model_precomputed = svmtrain(train_label, [(1:150)', train_data*train_data'], '-t 4'); | |||
| matlab> [predict_label_P, accuracy_P, dec_values_P] = svmpredict(test_label, [(1:120)', test_data*train_data'], model_precomputed); | |||
| matlab> | |||
| matlab> accuracy_L % Display the accuracy using linear kernel | |||
| matlab> accuracy_P % Display the accuracy using precomputed kernel | |||
| Note that for testing, you can put anything in the | |||
| testing_label_vector. For more details of precomputed kernels, please | |||
| read the section ``Precomputed Kernels'' in the README of the LIBSVM | |||
| package. | |||
| Additional Information | |||
| ====================== | |||
| This interface was initially written by Jun-Cheng Chen, Kuan-Jen Peng, | |||
| Chih-Yuan Yang and Chih-Huai Cheng from Department of Computer | |||
| Science, National Taiwan University. The current version was prepared | |||
| by Rong-En Fan and Ting-Fan Wu. If you find this tool useful, please | |||
| cite LIBSVM as follows | |||
| Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support | |||
| vector machines. ACM Transactions on Intelligent Systems and | |||
| Technology, 2:27:1--27:27, 2011. Software available at | |||
| http://www.csie.ntu.edu.tw/~cjlin/libsvm | |||
| For any question, please contact Chih-Jen Lin <cjlin@csie.ntu.edu.tw>, | |||
| or check the FAQ page: | |||
| http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html#/Q10:_MATLAB_interface | |||