LIBSVM -- A Library for Support Vector Machines (original) (raw)
Chih-Chung Chang andChih-Jen Lin
Version 3.35 released on September 1, 2024. We fix some minor bugs.
Version 3.31 released on February 28, 2023. Probabilistic outputs for one-class SVM are now supported.
Version 3.25 released on April 14, 2021. Installing the Python interface through PyPI is supported
pip install -U libsvm-official
The python directory is re-organized so
from libsvm.svmutil import *
instead of
from svmutil import *
should be used. LIBSVM tools provides many extensions of LIBSVM. Please check it if you need some functions not supported in LIBSVM.
We now have a nice page LIBSVM data sets providing problems in LIBSVM format.
A practical guide to SVM classificationis available now! (mainly written for beginners)
We now have an easy script (easy.py) for users who know NOTHING about SVM. It makes everything automatic--from data scaling to parameter selection.
The parameter selection tool grid.py generates the following contour of cross-validation accuracy. To use this tool, you also need to install pythonand gnuplot.
To see the importance of parameter selection, please see our guidefor beginners. Using libsvm, our group is the winner of IJCNN 2001 Challenge (two of the three competitions), EUNITE world wide competition on electricity load prediction,NIPS 2003 feature selection challenge(third place),WCCI 2008 Causation and Prediction challenge (one of the two winners), and Active Learning Challenge 2010 (2nd place).
Introduction
LIBSVM is an integrated software for support vector classification, (C-SVC, nu-SVC), regression (epsilon-SVR, nu-SVR) and distribution estimation (one-class SVM). It supports multi-class classification.
Since version 2.8, it implements an SMO-type algorithm proposed in this paper:
R.-E. Fan, P.-H. Chen, and C.-J. Lin.Working set selection using second order information for training SVM. Journal of Machine Learning Research 6, 1889-1918, 2005. You can also find a pseudo code there. (how to cite LIBSVM)
Our goal is to help users from other fields to easily use SVM as a tool. LIBSVM provides a simple interface where users can easily link it with their own programs. Main features of LIBSVM include
- Different SVM formulations
- Efficient multi-class classification
- Cross validation for model selection
- Probability estimates
- Various kernels (including precomputed kernel matrix)
- Weighted SVM for unbalanced data
- Both C++ and Java sources
- GUI demonstrating SVM classification and regression
- Python, R, MATLAB, Perl,Ruby, Weka,Common LISP,CLISP,Haskell,OCaml,LabVIEW, andPHPinterfaces. C# .NET code and CUDA extension is available.
It's also included in some data mining environments:RapidMiner,PCP, andLIONsolver. - Some popular package managers (e.g., pip and vcpkg) can install LIBSVM easily.
- Automatic model selection which can generate contour of cross validation accuracy.
Download LIBSVM
The current release (Version 3.35, September 2024) of LIBSVM can be obtained by downloading the zip fileor tar.gzfile. You can also check this github directory. Please e-mail us if you have problems to download the file.
The package includes the source code of the library in C++ and Java, and a simple program for scaling training data. A README file with detailed explanation is provided. For MS Windows users, there is a sub-directory in the zip file containing binary executable files. Precompiled Java class archive is also included.
Please read the COPYRIGHTnotice before usingLIBSVM.
Graphic Interface
Here is a simple applet demonstrating SVM classification and regression.
Click on the drawing area and use ``Change'' to change class of data. Then use ``Run'' to see the results.
Examples of options: -s 0 -c 10 -t 1 -g 1 -r 1 -d 3
Classify a binary data with polynomial kernel (u'v+1)^3 and C = 10
options: -s svm_type : set type of SVM (default 0) 0 -- C-SVC 1 -- nu-SVC 2 -- one-class SVM 3 -- epsilon-SVR 4 -- nu-SVR -t kernel_type : set type of kernel function (default 2) 0 -- linear: u'v 1 -- polynomial: (gammau'v + coef0)^degree 2 -- radial basis function: exp(-gamma|u-v|^2) 3 -- sigmoid: tanh(gamma*u'v + coef0) -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 weightC, for C-SVC (default 1)
The k in the -g option means the number of attributes in the input data.
To install this tool, please read the README file in the package. There are Windows, X, and Java versions in the package.
Additional Information (how to cite LIBSVM)
Frequently Asked Questions (FAQ)and Change log
References of LIBSVM:
- Official implementation document:
C.-C. Chang and C.-J. Lin. LIBSVM : a library for support vector machines. ACM Transactions on Intelligent Systems and Technology, 2:27:1--27:27, 2011.
pdf, ps.gz,ACM digital lib. - Instructions for using LIBSVM are in the README files in the main directory and some sub-directories.
- A guide for beginners:
C.-W. Hsu, C.-C. Chang, C.-J. Lin.A practical guide to support vector classification - An introductory videofor windows users.
- Other implementation documents:
R.-E. Fan, P.-H. Chen, and C.-J. Lin.Working set selection using the second order information for training SVM. Journal of Machine Learning Research 6, 1889-1918, 2005. You can also find a pseudo code there. - Other documents written by users. (including some non-English documents) For more information about nu-SVM and one-class SVM , please see
- B. Schölkopf, A. Smola, R. Williamson, and P. L. Bartlett. New support vector algorithms. Neural Computation, 12, 2000, 1207-1245.
- B. Schölkopf, J. Platt, J. Shawe-Taylor, A. J. Smola, and R. C. Williamson. Estimating the support of a high-dimensional distribution. Neural Computation, 13, 2001, 1443-1471.
Interfaces and Extensions to LIBSVM
Language | Description | Maintainers and Their Affiliation | Supported LIBSVM version | Link |
---|---|---|---|---|
Java | Java code close to LIBSVM C code. | LIBSVM authors at National Taiwan University. | The latest | Included in LIBSVM package |
Java | Refactored Java code for faster training/testing. | David Soergel at University of California, Berkeley. | 2.88 | jlibsvm |
MATLAB and OCTAVE | A simple MATLAB and OCTAVE interface | LIBSVM authors at National Taiwan University. | The latest | Included in LIBSVM package |
R | Please install by typing install.packages('e1071') at R command line prompt. (document and examples). | David Meyer at the Wirtschaftsuniversit�t Wien (Vienna University of Economics and Business Administration) | 3.23 | WWW |
Python | A python interface has been included in LIBSVM since version 2.33. | Initiated by Carl Staelin at HP Labs. Updated/maintained by LIBSVM authors. | The latest | Included in LIBSVM package |
Python and C# | Interfaces provided in the framework pcSVM | Uwe Schmitt from Germany | 2.71 | pcSVM |
Perl | Matthew Laird at Simon Fraser University, Canada and Saul Rosa | 3.12 | perl-libsvm | |
Ruby | Ruby language bindings for LIBSVM | C. Florian Ebeling and Rimas Silkaitis | 3.18 | rb-libsvm |
Ruby | A Ruby interface via SWIG | Tom Zeng | 2.9 | libsvm-ruby-swig |
Weka | Yasser EL-Manzalawy and Vasant Honavar at Iowa State University. | 2.8 | WLSVM | |
Node.js | Nicolas Panel | 3.20 | Node.js interface | |
Javascript | Port of LIBSVM for Javascript | Daniel Kostro | The latest | Port for Javascript |
Scilab | Holger Nahrstaedt from the Technical University of Berlin | 3.20 | Scilab interface | |
Common LISP | Common Lisp wrapper of LIBSVM | G�bor Melis | 2.88 | Common LISP wrapper |
CLISP | An FFI-based interface distributed with CLISP | Sam Steingold | 2.9 | CLISP LibSVM module |
Haskell | A Haskell binding to LIBSVM | Paulo Tanimoto | 3.1 | Haskell binding |
OCaml | A OCaml binding to LIBSVM | Oliver Gu | 3.16 | OCaml binding |
Nimrod | LIBSVM Wrapper for Nimrod | Andreas Rumpf | 3.12 | libsvm wrapper |
.NET | LIBSVM for .NET | Nicolas Panel | 3.17 | libsvm-net |
.NET | .NET conversion of LIBSVM | Matthew Johnson | 2.89 | SVM.NET |
CUDA | LIBSVM Accelerated with GPU using the CUDA Framework | A. Athanasopoulos, A. Dimou, V. Mezaris, and I. Kompatsiaris at CERTH-ITI | 3.0 | MKLAB |
Cell | LIBSVM Accelerated using Cell Processors | Moreno Marzolla at University of Bologna, Italy | 2.89 | libsvm_CBE |
Labview | LabView interface to LIBSVM. Both Windows/Linux are supported. | Oystein Sture | 3.20 | LabView interface |
C# | C# wrapper of libsvm | Can Erhan | 3.23 | github directory |
PHP | LIBSVM binding for PHP | Ian Barber | The latest (LIBSVM must be installed first) | PHP binding |
Julia | LIBSVM bindings for Julia | Simon Kornblith, Matti Pastell, etc. | 3.25 | LIBSVM bindings for Julia |
Julia | SVR in Julia | Velimir V Vesselinov | 3.22 | SVR in Julia |
Android | LIBSVM on Android | Yu-Chih Tung at Univ of Michigan | 3.20 | LIBSVM on Android |
Gretl | Gretl wrapper for LIBSVM | Allin Cottrell at Wake Forest University | 3.22 | Gretl wrapper for LIBSVM |
GO | LIBSVM in GO | Ed Walker | 3.18 | LIBSVM in GO |
Installing LIBSVM via Package Managers
Installer (language) | Package name | Installation |
---|---|---|
pip (Python) | libsvm-official | $ pip install -U libsvm-official |
vcpkg (C++) | libsvm port | $ ./vcpkg install libsvm |
Acknowledgments: This work was supported in part by the National Science Council of Taiwan via the grant NSC 89-2213-E-002-106. The authors thank their group members and usersfor helpful discussion and comments. Please send comments and suggestions to Chih-Jen Lin.