LIBSVM -- A Library for Support Vector Machines

Chih-Chung Chang and Chih-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 classification is 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 python and gnuplot.

To see the importance of parameter selection, please see our guide for 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


Download LIBSVM

The current release (Version 3.35, September 2024) of LIBSVM can be obtained by downloading the zip file or tar.gz file. 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 COPYRIGHT notice before using LIBSVM


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: (gamma*u'*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 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. 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:

For more information about nu-SVM and one-class SVM , please see

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 users for helpful discussion and comments. Please send comments and suggestions to Chih-Jen Lin.