weka.classifiers
Class SMO

java.lang.Object
  |
  +--weka.classifiers.Classifier
        |
        +--weka.classifiers.DistributionClassifier
              |
              +--weka.classifiers.SMO
All Implemented Interfaces:
java.lang.Cloneable, OptionHandler, java.io.Serializable

public class SMO
extends DistributionClassifier
implements OptionHandler

Implements John C. Platt's sequential minimal optimization algorithm for training a support vector classifier using polynomial kernels. Transforms output of SVM into probabilities by applying a standard sigmoid function that is not fitted to the data. This implementation globally replaces all missing values and transforms nominal attributes into binary ones. For more information on the SMO algorithm, see

J. Platt (1998). Fast Training of Support Vector Machines using Sequential Minimal Optimization. Advances in Kernel Methods - Support Vector Learning, B. Schölkopf, C. Burges, and A. Smola, eds., MIT Press.

S.S. Keerthi, S.K. Shevade, C. Bhattacharyya, K.R.K. Murthy (1999). Improvements to Platt's SMO Algorithm for SVM Classifier Design. Technical Report CD-99-14. Control Division, Dept of Mechanical and Production Engineering, National University of Singapore.

Note: for improved speed normalization should be turned off when operating on SparseInstances.

Valid options are:

-C num
The complexity constant C. (default 1)

-E num
The exponent for the polynomial kernel. (default 1)

-N
Don't normalize the training instances.

-L
Rescale kernel.

-O
Use lower-order terms.

-A num
Sets the size of the kernel cache. Should be a prime number. (default 1000003)

-T num
Sets the tolerance parameter. (default 1.0e-3)

-P num
Sets the epsilon for round-off error. (default 1.0e-12)

Author:
Eibe Frank (eibe@cs.waikato.ac.nz), Shane Legg (shane@intelligenesis.net) (sparse vector code), Stuart Inglis (stuart@intelligenesis.net) (sparse vector code)
See Also:
Serialized Form

Constructor Summary
SMO()
           
 
Method Summary
 void buildClassifier(Instances insts)
          Method for building the classifier.
 double[] distributionForInstance(Instance inst)
          Outputs the distribution for the given output.
 double getC()
          Get the value of C.
 int getCacheSize()
          Get the size of the kernel cache
 double getEpsilon()
          Get the value of epsilon.
 double getExponent()
          Get the value of exponent.
 boolean getLowerOrderTerms()
          Check whether lower-order terms are being used.
 boolean getNormalizeData()
          Check whether data is to be normalized.
 java.lang.String[] getOptions()
          Gets the current settings of the classifier.
 boolean getRescaleKernel()
          Check whether kernel is being rescaled.
 double getToleranceParameter()
          Get the value of tolerance parameter.
 java.util.Enumeration listOptions()
          Returns an enumeration describing the available options
static void main(java.lang.String[] argv)
          Main method for testing this class.
 void setC(double v)
          Set the value of C.
 void setCacheSize(int v)
          Set the value of the kernel cache.
 void setEpsilon(double v)
          Set the value of epsilon.
 void setExponent(double v)
          Set the value of exponent.
 void setLowerOrderTerms(boolean v)
          Set whether lower-order terms are to be used.
 void setNormalizeData(boolean v)
          Set whether data is to be normalized.
 void setOptions(java.lang.String[] options)
          Parses a given list of options.
 void setRescaleKernel(boolean v)
          Set whether kernel is to be rescaled.
 void setToleranceParameter(double v)
          Set the value of tolerance parameter.
 java.lang.String toString()
          Prints out the classifier.
 
Methods inherited from class weka.classifiers.DistributionClassifier
classifyInstance
 
Methods inherited from class weka.classifiers.Classifier
forName, makeCopies
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SMO

public SMO()
Method Detail

buildClassifier

public void buildClassifier(Instances insts)
                     throws java.lang.Exception
Method for building the classifier.
Overrides:
buildClassifier in class Classifier
Parameters:
insts - the set of training instances
Throws:
java.lang.Exception - if the classifier can't be built successfully

distributionForInstance

public double[] distributionForInstance(Instance inst)
                                 throws java.lang.Exception
Outputs the distribution for the given output. Pipes output of SVM through sigmoid function.
Overrides:
distributionForInstance in class DistributionClassifier
Parameters:
inst - the instance for which distribution is to be computed
Returns:
the distribution
Throws:
java.lang.Exception - if something goes wrong

listOptions

public java.util.Enumeration listOptions()
Returns an enumeration describing the available options
Specified by:
listOptions in interface OptionHandler
Returns:
an enumeration of all the available options

setOptions

public void setOptions(java.lang.String[] options)
                throws java.lang.Exception
Parses a given list of options. Valid options are:

-C num
The complexity constant C. (default 1)

-E num
The exponent for the polynomial kernel. (default 1)

-N
Don't normalize the training instances.

-L
Rescale kernel.

-O
Use lower-order terms.

-A num
Sets the size of the kernel cache. Should be a prime number. (default 1000003)

-T num
Sets the tolerance parameter. (default 1.0e-3)

-P num
Sets the epsilon for round-off error. (default 1.0e-12)

Specified by:
setOptions in interface OptionHandler
Parameters:
options - the list of options as an array of strings
Throws:
java.lang.Exception - if an option is not supported

getOptions

public java.lang.String[] getOptions()
Gets the current settings of the classifier.
Specified by:
getOptions in interface OptionHandler
Returns:
an array of strings suitable for passing to setOptions

toString

public java.lang.String toString()
Prints out the classifier.
Overrides:
toString in class java.lang.Object
Returns:
a description of the classifier as a string

getExponent

public double getExponent()
Get the value of exponent.
Returns:
Value of exponent.

setExponent

public void setExponent(double v)
Set the value of exponent. If linear kernel is used, rescaling and lower-order terms are turned off.
Parameters:
v - Value to assign to exponent.

getC

public double getC()
Get the value of C.
Returns:
Value of C.

setC

public void setC(double v)
Set the value of C.
Parameters:
v - Value to assign to C.

getToleranceParameter

public double getToleranceParameter()
Get the value of tolerance parameter.
Returns:
Value of tolerance parameter.

setToleranceParameter

public void setToleranceParameter(double v)
Set the value of tolerance parameter.
Parameters:
v - Value to assign to tolerance parameter.

getEpsilon

public double getEpsilon()
Get the value of epsilon.
Returns:
Value of epsilon.

setEpsilon

public void setEpsilon(double v)
Set the value of epsilon.
Parameters:
v - Value to assign to epsilon.

getCacheSize

public int getCacheSize()
Get the size of the kernel cache
Returns:
Size of kernel cache.

setCacheSize

public void setCacheSize(int v)
Set the value of the kernel cache.
Parameters:
v - Size of kernel cache.

getNormalizeData

public boolean getNormalizeData()
Check whether data is to be normalized.
Returns:
true if data is to be normalized

setNormalizeData

public void setNormalizeData(boolean v)
Set whether data is to be normalized.
Parameters:
v - true if data is to be normalized

getRescaleKernel

public boolean getRescaleKernel()
                         throws java.lang.Exception
Check whether kernel is being rescaled.
Returns:
Value of rescale.

setRescaleKernel

public void setRescaleKernel(boolean v)
                      throws java.lang.Exception
Set whether kernel is to be rescaled. Defaults to false if a linear machine is built.
Parameters:
v - Value to assign to rescale.

getLowerOrderTerms

public boolean getLowerOrderTerms()
Check whether lower-order terms are being used.
Returns:
Value of lowerOrder.

setLowerOrderTerms

public void setLowerOrderTerms(boolean v)
Set whether lower-order terms are to be used. Defaults to false if a linear machine is built.
Parameters:
v - Value to assign to lowerOrder.

main

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