weka.classifiers.functions
Class LibSVM

java.lang.Object
  extended by weka.classifiers.AbstractClassifier
      extended by weka.classifiers.functions.LibSVM
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Classifier, CapabilitiesHandler, OptionHandler, RevisionHandler, TechnicalInformationHandler

public class LibSVM
extends AbstractClassifier
implements TechnicalInformationHandler

A wrapper class for the libsvm tools (the libsvm classes, typically the jar file, need to be in the classpath to use this classifier).
LibSVM runs faster than SMO since it uses LibSVM to build the SVM classifier.
LibSVM allows users to experiment with One-class SVM, Regressing SVM, and nu-SVM supported by LibSVM tool. LibSVM reports many useful statistics about LibSVM classifier (e.g., confusion matrix,precision, recall, ROC score, etc.).

Yasser EL-Manzalawy (2005). WLSVM. URL http://www.cs.iastate.edu/~yasser/wlsvm/.

Chih-Chung Chang, Chih-Jen Lin (2001). LIBSVM - A Library for Support Vector Machines. URL http://www.csie.ntu.edu.tw/~cjlin/libsvm/.

BibTeX:

 @misc{EL-Manzalawy2005,
    author = {Yasser EL-Manzalawy},
    note = {You don't need to include the WLSVM package in the CLASSPATH},
    title = {WLSVM},
    year = {2005},
    URL = {http://www.cs.iastate.edu/\~yasser/wlsvm/}
 }
 
 @misc{Chang2001,
    author = {Chih-Chung Chang and Chih-Jen Lin},
    note = {The Weka classifier works with version 2.82 of LIBSVM},
    title = {LIBSVM - A Library for Support Vector Machines},
    year = {2001},
    URL = {http://www.csie.ntu.edu.tw/\~cjlin/libsvm/}
 }
 

Valid options are:

 -S <int>
  Set type of SVM (default: 0)
    0 = C-SVC
    1 = nu-SVC
    2 = one-class SVM
    3 = epsilon-SVR
    4 = nu-SVR
 -K <int>
  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 <int>
  Set degree in kernel function (default: 3)
 -G <double>
  Set gamma in kernel function (default: 1/k)
 -R <double>
  Set coef0 in kernel function (default: 0)
 -C <double>
  Set the parameter C of C-SVC, epsilon-SVR, and nu-SVR
   (default: 1)
 -N <double>
  Set the parameter nu of nu-SVC, one-class SVM, and nu-SVR
   (default: 0.5)
 -Z
  Turns on normalization of input data (default: off)
 -J
  Turn off nominal to binary conversion.
  WARNING: use only if your data is all numeric!
 -V
  Turn off missing value replacement.
  WARNING: use only if your data has no missing values.
 -P <double>
  Set the epsilon in loss function of epsilon-SVR (default: 0.1)
 -M <double>
  Set cache memory size in MB (default: 40)
 -E <double>
  Set tolerance of termination criterion (default: 0.001)
 -H
  Turns the shrinking heuristics off (default: on)
 -W <double>
  Set the parameters C of class i to weight[i]*C, for C-SVC.
  E.g., for a 3-class problem, you could use "1 1 1" for equally
  weighted classes.
  (default: 1 for all classes)
 -B
  Trains a SVC model instead of a SVR one (default: SVR)
 -model <file>
  Specifies the filename to save the libsvm-internal model to.
  Gets ignored if a directory is provided.
 -D
  If set, classifier is run in debug mode and
  may output additional info to the console

Version:
$Revision: 7562 $
Author:
Yasser EL-Manzalawy, FracPete (fracpete at waikato dot ac dot nz)
See Also:
LibSVMLoader, LibSVMSaver, Serialized Form

Field Summary
static int KERNELTYPE_LINEAR
          kernel type linear: u'*v.
static int KERNELTYPE_POLYNOMIAL
          kernel type polynomial: (gamma*u'*v + coef0)^degree.
static int KERNELTYPE_RBF
          kernel type radial basis function: exp(-gamma*|u-v|^2).
static int KERNELTYPE_SIGMOID
          kernel type sigmoid: tanh(gamma*u'*v + coef0).
static int SVMTYPE_C_SVC
          SVM type C-SVC (classification).
static int SVMTYPE_EPSILON_SVR
          SVM type epsilon-SVR (regression).
static int SVMTYPE_NU_SVC
          SVM type nu-SVC (classification).
static int SVMTYPE_NU_SVR
          SVM type nu-SVR (regression).
static int SVMTYPE_ONE_CLASS_SVM
          SVM type one-class SVM (classification).
static Tag[] TAGS_KERNELTYPE
          the different kernel types.
static Tag[] TAGS_SVMTYPE
          SVM types.
 
Constructor Summary
LibSVM()
           
 
Method Summary
 void buildClassifier(Instances insts)
          builds the classifier.
 java.lang.String cacheSizeTipText()
          Returns the tip text for this property.
 java.lang.String coef0TipText()
          Returns the tip text for this property.
 java.lang.String costTipText()
          Returns the tip text for this property.
 java.lang.String degreeTipText()
          Returns the tip text for this property.
 double[] distributionForInstance(Instance instance)
          Computes the distribution for a given instance.
 java.lang.String doNotReplaceMissingValuesTipText()
          Returns the tip text for this property.
 java.lang.String epsTipText()
          Returns the tip text for this property.
 java.lang.String gammaTipText()
          Returns the tip text for this property.
 double getCacheSize()
          Gets cache memory size in MB.
 Capabilities getCapabilities()
          Returns default capabilities of the classifier.
 double getCoef0()
          Gets coef.
 double getCost()
          Sets the parameter C of C-SVC, epsilon-SVR, and nu-SVR.
 int getDegree()
          Gets the degree of the kernel.
 boolean getDoNotReplaceMissingValues()
          Gets whether automatic replacement of missing values is disabled.
 double getEps()
          Gets tolerance of termination criterion.
 double getGamma()
          Gets gamma.
 SelectedTag getKernelType()
          Gets type of kernel function.
 double getLoss()
          Gets the epsilon in loss function of epsilon-SVR.
 java.io.File getModelFile()
          Returns the file to save the libsvm-internal model to.
 boolean getNormalize()
          whether to normalize input data.
 double getNu()
          Gets nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5).
 java.lang.String[] getOptions()
          Returns the current options.
 boolean getProbabilityEstimates()
          Returns whether to generate probability estimates instead of -1/+1 for classification problems.
 java.lang.String getRevision()
          Returns the revision string.
 boolean getShrinking()
          whether to use the shrinking heuristics.
 SelectedTag getSVMType()
          Gets type of SVM.
 TechnicalInformation getTechnicalInformation()
          Returns an instance of a TechnicalInformation object, containing detailed information about the technical background of this class, e.g., paper reference or book this class is based on.
 java.lang.String getWeights()
          Gets the parameters C of class i to weight[i]*C, for C-SVC (default 1).
 java.lang.String globalInfo()
          Returns a string describing classifier.
static boolean isPresent()
          returns whether the libsvm classes are present or not, i.e.
 java.lang.String kernelTypeTipText()
          Returns the tip text for this property.
 java.util.Enumeration listOptions()
          Returns an enumeration describing the available options.
 java.lang.String lossTipText()
          Returns the tip text for this property.
static void main(java.lang.String[] args)
          Main method for testing this class.
 java.lang.String modelFileTipText()
          Returns the tip text for this property.
 java.lang.String normalizeTipText()
          Returns the tip text for this property.
 java.lang.String nuTipText()
          Returns the tip text for this property.
 java.lang.String probabilityEstimatesTipText()
          Returns the tip text for this property.
 void setCacheSize(double value)
          Sets cache memory size in MB (default 40).
 void setCoef0(double value)
          Sets coef (default 0).
 void setCost(double value)
          Sets the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1).
 void setDegree(int value)
          Sets the degree of the kernel.
 void setDoNotReplaceMissingValues(boolean b)
          Whether to turn off automatic replacement of missing values.
 void setEps(double value)
          Sets tolerance of termination criterion (default 0.001).
 void setGamma(double value)
          Sets gamma (default = 1/no of attributes).
 void setKernelType(SelectedTag value)
          Sets type of kernel function (default KERNELTYPE_RBF).
 void setLoss(double value)
          Sets the epsilon in loss function of epsilon-SVR (default 0.1).
 void setModelFile(java.io.File value)
          Sets the file to save the libsvm-internal model to.
 void setNormalize(boolean value)
          whether to normalize input data.
 void setNu(double value)
          Sets nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5).
 void setOptions(java.lang.String[] options)
          Sets the classifier options

Valid options are:

 void setProbabilityEstimates(boolean value)
          Sets whether probability estimates are generated instead of -1/+1 for classification problems.
 void setShrinking(boolean value)
          whether to use the shrinking heuristics.
 void setSVMType(SelectedTag value)
          Sets type of SVM (default SVMTYPE_C_SVC).
 void setWeights(java.lang.String weightsStr)
          Sets the parameters C of class i to weight[i]*C, for C-SVC (default 1).
 java.lang.String shrinkingTipText()
          Returns the tip text for this property.
 java.lang.String SVMTypeTipText()
          Returns the tip text for this property.
 java.lang.String toString()
          returns a string representation.
 java.lang.String weightsTipText()
          Returns the tip text for this property.
 
Methods inherited from class weka.classifiers.AbstractClassifier
classifyInstance, debugTipText, forName, getDebug, makeCopies, makeCopy, runClassifier, setDebug
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

SVMTYPE_C_SVC

public static final int SVMTYPE_C_SVC
SVM type C-SVC (classification).

See Also:
Constant Field Values

SVMTYPE_NU_SVC

public static final int SVMTYPE_NU_SVC
SVM type nu-SVC (classification).

See Also:
Constant Field Values

SVMTYPE_ONE_CLASS_SVM

public static final int SVMTYPE_ONE_CLASS_SVM
SVM type one-class SVM (classification).

See Also:
Constant Field Values

SVMTYPE_EPSILON_SVR

public static final int SVMTYPE_EPSILON_SVR
SVM type epsilon-SVR (regression).

See Also:
Constant Field Values

SVMTYPE_NU_SVR

public static final int SVMTYPE_NU_SVR
SVM type nu-SVR (regression).

See Also:
Constant Field Values

TAGS_SVMTYPE

public static final Tag[] TAGS_SVMTYPE
SVM types.


KERNELTYPE_LINEAR

public static final int KERNELTYPE_LINEAR
kernel type linear: u'*v.

See Also:
Constant Field Values

KERNELTYPE_POLYNOMIAL

public static final int KERNELTYPE_POLYNOMIAL
kernel type polynomial: (gamma*u'*v + coef0)^degree.

See Also:
Constant Field Values

KERNELTYPE_RBF

public static final int KERNELTYPE_RBF
kernel type radial basis function: exp(-gamma*|u-v|^2).

See Also:
Constant Field Values

KERNELTYPE_SIGMOID

public static final int KERNELTYPE_SIGMOID
kernel type sigmoid: tanh(gamma*u'*v + coef0).

See Also:
Constant Field Values

TAGS_KERNELTYPE

public static final Tag[] TAGS_KERNELTYPE
the different kernel types.

Constructor Detail

LibSVM

public LibSVM()
Method Detail

globalInfo

public java.lang.String globalInfo()
Returns a string describing classifier.

Returns:
a description suitable for displaying in the explorer/experimenter gui

getTechnicalInformation

public TechnicalInformation getTechnicalInformation()
Returns an instance of a TechnicalInformation object, containing detailed information about the technical background of this class, e.g., paper reference or book this class is based on.

Specified by:
getTechnicalInformation in interface TechnicalInformationHandler
Returns:
the technical information about this class

listOptions

public java.util.Enumeration listOptions()
Returns an enumeration describing the available options.

Specified by:
listOptions in interface OptionHandler
Overrides:
listOptions in class AbstractClassifier
Returns:
an enumeration of all the available options.

setOptions

public void setOptions(java.lang.String[] options)
                throws java.lang.Exception
Sets the classifier options

Valid options are:

 -S <int>
  Set type of SVM (default: 0)
    0 = C-SVC
    1 = nu-SVC
    2 = one-class SVM
    3 = epsilon-SVR
    4 = nu-SVR
 -K <int>
  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 <int>
  Set degree in kernel function (default: 3)
 -G <double>
  Set gamma in kernel function (default: 1/k)
 -R <double>
  Set coef0 in kernel function (default: 0)
 -C <double>
  Set the parameter C of C-SVC, epsilon-SVR, and nu-SVR
   (default: 1)
 -N <double>
  Set the parameter nu of nu-SVC, one-class SVM, and nu-SVR
   (default: 0.5)
 -Z
  Turns on normalization of input data (default: off)
 -J
  Turn off nominal to binary conversion.
  WARNING: use only if your data is all numeric!
 -V
  Turn off missing value replacement.
  WARNING: use only if your data has no missing values.
 -P <double>
  Set the epsilon in loss function of epsilon-SVR (default: 0.1)
 -M <double>
  Set cache memory size in MB (default: 40)
 -E <double>
  Set tolerance of termination criterion (default: 0.001)
 -H
  Turns the shrinking heuristics off (default: on)
 -W <double>
  Set the parameters C of class i to weight[i]*C, for C-SVC.
  E.g., for a 3-class problem, you could use "1 1 1" for equally
  weighted classes.
  (default: 1 for all classes)
 -B
  Trains a SVC model instead of a SVR one (default: SVR)
 -model <file>
  Specifies the filename to save the libsvm-internal model to.
  Gets ignored if a directory is provided.
 -D
  If set, classifier is run in debug mode and
  may output additional info to the console

Specified by:
setOptions in interface OptionHandler
Overrides:
setOptions in class AbstractClassifier
Parameters:
options - the options to parse
Throws:
java.lang.Exception - if parsing fails

getOptions

public java.lang.String[] getOptions()
Returns the current options.

Specified by:
getOptions in interface OptionHandler
Overrides:
getOptions in class AbstractClassifier
Returns:
the current setup

isPresent

public static boolean isPresent()
returns whether the libsvm classes are present or not, i.e. whether the classes are in the classpath or not

Returns:
whether the libsvm classes are available

setSVMType

public void setSVMType(SelectedTag value)
Sets type of SVM (default SVMTYPE_C_SVC).

Parameters:
value - the type of the SVM

getSVMType

public SelectedTag getSVMType()
Gets type of SVM.

Returns:
the type of the SVM

SVMTypeTipText

public java.lang.String SVMTypeTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setKernelType

public void setKernelType(SelectedTag value)
Sets type of kernel function (default KERNELTYPE_RBF).

Parameters:
value - the kernel type

getKernelType

public SelectedTag getKernelType()
Gets type of kernel function.

Returns:
the kernel type

kernelTypeTipText

public java.lang.String kernelTypeTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setDegree

public void setDegree(int value)
Sets the degree of the kernel.

Parameters:
value - the degree of the kernel

getDegree

public int getDegree()
Gets the degree of the kernel.

Returns:
the degree of the kernel

degreeTipText

public java.lang.String degreeTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setGamma

public void setGamma(double value)
Sets gamma (default = 1/no of attributes).

Parameters:
value - the gamma value

getGamma

public double getGamma()
Gets gamma.

Returns:
the current gamma

gammaTipText

public java.lang.String gammaTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setCoef0

public void setCoef0(double value)
Sets coef (default 0).

Parameters:
value - the coef

getCoef0

public double getCoef0()
Gets coef.

Returns:
the coef

coef0TipText

public java.lang.String coef0TipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setNu

public void setNu(double value)
Sets nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5).

Parameters:
value - the new nu value

getNu

public double getNu()
Gets nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5).

Returns:
the current nu value

nuTipText

public java.lang.String nuTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setCacheSize

public void setCacheSize(double value)
Sets cache memory size in MB (default 40).

Parameters:
value - the memory size in MB

getCacheSize

public double getCacheSize()
Gets cache memory size in MB.

Returns:
the memory size in MB

cacheSizeTipText

public java.lang.String cacheSizeTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setCost

public void setCost(double value)
Sets the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1).

Parameters:
value - the cost value

getCost

public double getCost()
Sets the parameter C of C-SVC, epsilon-SVR, and nu-SVR.

Returns:
the cost value

costTipText

public java.lang.String costTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setEps

public void setEps(double value)
Sets tolerance of termination criterion (default 0.001).

Parameters:
value - the tolerance

getEps

public double getEps()
Gets tolerance of termination criterion.

Returns:
the current tolerance

epsTipText

public java.lang.String epsTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setLoss

public void setLoss(double value)
Sets the epsilon in loss function of epsilon-SVR (default 0.1).

Parameters:
value - the loss epsilon

getLoss

public double getLoss()
Gets the epsilon in loss function of epsilon-SVR.

Returns:
the loss epsilon

lossTipText

public java.lang.String lossTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setShrinking

public void setShrinking(boolean value)
whether to use the shrinking heuristics.

Parameters:
value - true uses shrinking

getShrinking

public boolean getShrinking()
whether to use the shrinking heuristics.

Returns:
true, if shrinking is used

shrinkingTipText

public java.lang.String shrinkingTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setNormalize

public void setNormalize(boolean value)
whether to normalize input data.

Parameters:
value - whether to normalize the data

getNormalize

public boolean getNormalize()
whether to normalize input data.

Returns:
true, if the data is normalized

normalizeTipText

public java.lang.String normalizeTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

doNotReplaceMissingValuesTipText

public java.lang.String doNotReplaceMissingValuesTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setDoNotReplaceMissingValues

public void setDoNotReplaceMissingValues(boolean b)
Whether to turn off automatic replacement of missing values. Set to true only if the data does not contain missing values.

Parameters:
b - true if automatic missing values replacement is to be disabled.

getDoNotReplaceMissingValues

public boolean getDoNotReplaceMissingValues()
Gets whether automatic replacement of missing values is disabled.

Returns:
true if automatic replacement of missing values is disabled.

setWeights

public void setWeights(java.lang.String weightsStr)
Sets the parameters C of class i to weight[i]*C, for C-SVC (default 1). Blank separated list of doubles.

Parameters:
weightsStr - the weights (doubles, separated by blanks)

getWeights

public java.lang.String getWeights()
Gets the parameters C of class i to weight[i]*C, for C-SVC (default 1). Blank separated doubles.

Returns:
the weights (doubles separated by blanks)

weightsTipText

public java.lang.String weightsTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setProbabilityEstimates

public void setProbabilityEstimates(boolean value)
Sets whether probability estimates are generated instead of -1/+1 for classification problems.

Parameters:
value - whether to predict probabilities

getProbabilityEstimates

public boolean getProbabilityEstimates()
Returns whether to generate probability estimates instead of -1/+1 for classification problems.

Returns:
true, if probability estimates should be returned

probabilityEstimatesTipText

public java.lang.String probabilityEstimatesTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

setModelFile

public void setModelFile(java.io.File value)
Sets the file to save the libsvm-internal model to. No model is saved if pointing to a directory.

Parameters:
value - the filename/directory

getModelFile

public java.io.File getModelFile()
Returns the file to save the libsvm-internal model to. No model is saved if pointing to a directory.

Returns:
the file object

modelFileTipText

public java.lang.String modelFileTipText()
Returns the tip text for this property.

Returns:
tip text for this property suitable for displaying in the explorer/experimenter gui

distributionForInstance

public double[] distributionForInstance(Instance instance)
                                 throws java.lang.Exception
Computes the distribution for a given instance. In case of 1-class classification, 1 is returned at index 0 if libsvm returns 1 and NaN (= missing) if libsvm returns -1.

Specified by:
distributionForInstance in interface Classifier
Overrides:
distributionForInstance in class AbstractClassifier
Parameters:
instance - the instance for which distribution is computed
Returns:
the distribution
Throws:
java.lang.Exception - if the distribution can't be computed successfully

getCapabilities

public Capabilities getCapabilities()
Returns default capabilities of the classifier.

Specified by:
getCapabilities in interface Classifier
Specified by:
getCapabilities in interface CapabilitiesHandler
Overrides:
getCapabilities in class AbstractClassifier
Returns:
the capabilities of this classifier

buildClassifier

public void buildClassifier(Instances insts)
                     throws java.lang.Exception
builds the classifier.

Specified by:
buildClassifier in interface Classifier
Parameters:
insts - the training instances
Throws:
java.lang.Exception - if libsvm classes not in classpath or libsvm encountered a problem

toString

public java.lang.String toString()
returns a string representation.

Overrides:
toString in class java.lang.Object
Returns:
a string representation

getRevision

public java.lang.String getRevision()
Returns the revision string.

Specified by:
getRevision in interface RevisionHandler
Overrides:
getRevision in class AbstractClassifier
Returns:
the revision

main

public static void main(java.lang.String[] args)
Main method for testing this class.

Parameters:
args - the options