LIBSVM -- A Library for Support Vector Machines
Chih-Chung Chang andChih-JenLin
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-officialThe 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.pygenerates the following contour of cross-validationaccuracy. To use this tool, you also needto install pythonand gnuplot.
Using libsvm, our group is the winnerofIJCNN 2001 Challenge (two of the three competitions),EUNITE world wide competitionon 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) anddistribution estimation (one-class SVM). It supports multi-class classification.
Since version 2.8, it implements an SMO-type algorithm proposedin 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 toeasily use SVM as a tool. LIBSVM provides a simple interfacewhere 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 downloadingthe zipfileor 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 programfor scaling training data. A README file with detailed explanation isprovided. For MS Windows users, there is a sub-directory in the zipfile containing binary executable files. Precompiled Java class archiveis 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-SVC1 -- nu-SVC2 -- one-class SVM3 -- epsilon-SVR4 -- nu-SVR-t kernel_type : set type of kernel function (default 2)0 -- linear: u'*v1 -- polynomial: (gamma*u'*v + coef0)^degree2 -- 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 weight*C, 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. Thereare Windows, X, and Java versions in the package.
Additional Information (how to cite LIBSVM)
Frequently Asked Questions (FAQ) and Change logReferences of LIBSVM:
- Official implementation document:
C.-C. Chang andC.-J. Lin.LIBSVM: a library for support vector machines.ACM Transactions on IntelligentSystems 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)
- B. Schölkopf, A. Smola, R. Williamson, and P. L. Bartlett. New supportvector 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 NationalTaiwan 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 |