Installing libsvm For Use With GNU Octave In Ubuntu 14.04
For week 7 of the Coursera Machine Learning course we
learned about Support Vector Machines (SVM). SVMs are a useful and
powerful tools for solving classification problems. They can be tailored to
solve complicated classification boundaries, and don’t suffer from some of the
down sides of optimizing neural networks. One of the
example problems uses an SVM to classify spam emails. A SVM implementation
written in MATLAB/Octave is used, but for further work libsvm (or
another SVM library) is recommended. To get libsvm
working with Octave in
Ubuntu 14.04 there are a few steps that are not obvious. I did not find very
many instructions so I compiled the steps I followed to get a stable Octave
environment with libsvm
. Read on for details.
Installation
Before starting you will need a working installation of Octave (I used 3.8.1)
which can be installed using apt
if you are on Ubuntu 14.04. You will
also need the liboctave-dev
package:
$ sudo apt-get install octave liboctave-dev
Now, you should navigate to the directory you want to keep libsvm
in. This directory should not change. I used the Github
repository of libsvm
, but you can also use the source release
for a stable release:
$ git clone https://github.com/cjlin1/libsvm.git
Next make the C library and the Octave/Matlab library (note >>>
indicates
the Octave shell):
$ cd libsvm
$ make
$ cd matlab
$ octave
>>> make
Finally, you need to add the directory you made libsvm
in to your Octave path.
To do this you can use the addpath()
function in Octave, followed by the
savepath()
function. When you add the path it should be an absolute path, so
that it always works. The pwd
Octave function will return the current
directory we are in. So after running make
from within Octave I suggest using
the commands below:
>>> addpath(pwd())
>>> savepath()
Congratulations, you have installed lisvm
and added it to your path. You
should be able to run svmtrain
and svmpredict
. You should be able to get
the help information for svmtrain
:
>>> svmtrain
Usage: model = svmtrain(training_label_vector, training_instance_matrix, 'libsvm_options');
libsvm_options:
-s svm_type : set type of SVM (default 0)
0 -- C-SVC (multi-class classification)
1 -- nu-SVC (multi-class classification)
2 -- one-class SVM
3 -- epsilon-SVR (regression)
4 -- nu-SVR (regression)
-t kernel_type : set type of kernel function (default 2)
0 -- linear: u'*v
1 -- polynomial: (gamma*u'*v + coef0)^degree
2 -- radial basis function: exp(-gamma*|u-v|^2)
3 -- sigmoid: tanh(gamma*u'*v + coef0)
4 -- precomputed kernel (kernel values in training_instance_matrix)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
-v n : n-fold cross validation mode
-q : quiet mode (no outputs)