weka.classifiers.rules
Class ConjunctiveRule

java.lang.Object
  extended by weka.classifiers.AbstractClassifier
      extended by weka.classifiers.rules.ConjunctiveRule
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, Classifier, CapabilitiesHandler, OptionHandler, RevisionHandler, WeightedInstancesHandler

public class ConjunctiveRule
extends AbstractClassifier
implements OptionHandler, WeightedInstancesHandler

This class implements a single conjunctive rule learner that can predict for numeric and nominal class labels.

A rule consists of antecedents "AND"ed together and the consequent (class value) for the classification/regression. In this case, the consequent is the distribution of the available classes (or mean for a numeric value) in the dataset. If the test instance is not covered by this rule, then it's predicted using the default class distributions/value of the data not covered by the rule in the training data.This learner selects an antecedent by computing the Information Gain of each antecendent and prunes the generated rule using Reduced Error Prunning (REP) or simple pre-pruning based on the number of antecedents.

For classification, the Information of one antecedent is the weighted average of the entropies of both the data covered and not covered by the rule.
For regression, the Information is the weighted average of the mean-squared errors of both the data covered and not covered by the rule.

In pruning, weighted average of the accuracy rates on the pruning data is used for classification while the weighted average of the mean-squared errors on the pruning data is used for regression.

Valid options are:

 -N <number of folds>
  Set number of folds for REP
  One fold is used as pruning set.
  (default 3)
 -R
  Set if NOT uses randomization
  (default:use randomization)
 -E
  Set whether consider the exclusive
  expressions for nominal attributes
  (default false)
 -M <min. weights>
  Set the minimal weights of instances
  within a split.
  (default 2.0)
 -P <number of antecedents>
  Set number of antecedents for pre-pruning
  if -1, then REP is used
  (default -1)
 -S <seed>
  Set the seed of randomization
  (default 1)

Version:
$Revision: 5928 $
Author:
Xin XU (xx5@cs.waikato.ac.nz)
See Also:
Serialized Form

Constructor Summary
ConjunctiveRule()
           
 
Method Summary
 void buildClassifier(Instances instances)
          Builds a single rule learner with REP dealing with nominal classes or numeric classes.
 double[] distributionForInstance(Instance instance)
          Computes class distribution for the given instance.
 java.lang.String exclusiveTipText()
          Returns the tip text for this property
 java.lang.String foldsTipText()
          Returns the tip text for this property
 Capabilities getCapabilities()
          Returns default capabilities of the classifier.
 boolean getExclusive()
          Returns whether exclusive expressions for nominal attributes splits are considered
 int getFolds()
          returns the current number of folds
 double getMinNo()
          Gets the minimum total weight of the instances in a rule
 int getNumAntds()
          Gets the number of antecedants
 java.lang.String[] getOptions()
          Gets the current settings of the Classifier.
 java.lang.String getRevision()
          Returns the revision string.
 long getSeed()
          returns the current seed value for randomizing the data
 java.lang.String globalInfo()
          Returns a string describing classifier
 boolean hasAntds()
          Whether this rule has antecedents, i.e.
 boolean isCover(Instance datum)
          Whether the instance covered by this rule
 java.util.Enumeration listOptions()
          Returns an enumeration describing the available options Valid options are:
static void main(java.lang.String[] args)
          Main method.
 java.lang.String minNoTipText()
          Returns the tip text for this property
 java.lang.String numAntdsTipText()
          Returns the tip text for this property
 java.lang.String seedTipText()
          Returns the tip text for this property
 void setExclusive(boolean e)
          Sets whether exclusive expressions for nominal attributes splits are considered
 void setFolds(int folds)
          the number of folds to use
 void setMinNo(double m)
          Sets the minimum total weight of the instances in a rule
 void setNumAntds(int n)
          Sets the number of antecedants
 void setOptions(java.lang.String[] options)
          Parses a given list of options.
 void setSeed(long s)
          sets the seed for randomizing the data
 java.lang.String toString()
          Prints this rule
 java.lang.String toString(java.lang.String att, java.lang.String cl)
          Prints this rule with the specified class label
 
Methods inherited from class weka.classifiers.AbstractClassifier
classifyInstance, debugTipText, forName, getDebug, makeCopies, makeCopy, setDebug
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ConjunctiveRule

public ConjunctiveRule()
Method Detail

globalInfo

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

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

listOptions

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

-N number
Set number of folds for REP. One fold is used as the pruning set. (Default: 3)

-R
Set if NOT randomize the data before split to growing and pruning data. If NOT set, the seed of randomization is specified by the -S option. (Default: randomize)

-S
Seed of randomization. (Default: 1)

-E
Set whether consider the exclusive expressions for nominal attribute split. (Default: false)

-M number
Set the minimal weights of instances within a split. (Default: 2)

-P number
Set the number of antecedents allowed in the rule if pre-pruning is used. If this value is other than -1, then pre-pruning will be used, otherwise the rule uses REP. (Default: -1)

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
Parses a given list of options.

Valid options are:

 -N <number of folds>
  Set number of folds for REP
  One fold is used as pruning set.
  (default 3)
 -R
  Set if NOT uses randomization
  (default:use randomization)
 -E
  Set whether consider the exclusive
  expressions for nominal attributes
  (default false)
 -M <min. weights>
  Set the minimal weights of instances
  within a split.
  (default 2.0)
 -P <number of antecedents>
  Set number of antecedents for pre-pruning
  if -1, then REP is used
  (default -1)
 -S <seed>
  Set the seed of randomization
  (default 1)

Specified by:
setOptions in interface OptionHandler
Overrides:
setOptions in class AbstractClassifier
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
Overrides:
getOptions in class AbstractClassifier
Returns:
an array of strings suitable for passing to setOptions

foldsTipText

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

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

setFolds

public void setFolds(int folds)
the number of folds to use

Parameters:
folds - the number of folds to use

getFolds

public int getFolds()
returns the current number of folds

Returns:
the number of folds

seedTipText

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

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

setSeed

public void setSeed(long s)
sets the seed for randomizing the data

Parameters:
s - the seed value

getSeed

public long getSeed()
returns the current seed value for randomizing the data

Returns:
the seed value

exclusiveTipText

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

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

getExclusive

public boolean getExclusive()
Returns whether exclusive expressions for nominal attributes splits are considered

Returns:
true if exclusive expressions for nominal attributes splits are considered

setExclusive

public void setExclusive(boolean e)
Sets whether exclusive expressions for nominal attributes splits are considered

Parameters:
e - whether to consider exclusive expressions for nominal attribute splits

minNoTipText

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

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

setMinNo

public void setMinNo(double m)
Sets the minimum total weight of the instances in a rule

Parameters:
m - the minimum total weight of the instances in a rule

getMinNo

public double getMinNo()
Gets the minimum total weight of the instances in a rule

Returns:
the minimum total weight of the instances in a rule

numAntdsTipText

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

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

setNumAntds

public void setNumAntds(int n)
Sets the number of antecedants

Parameters:
n - the number of antecedants

getNumAntds

public int getNumAntds()
Gets the number of antecedants

Returns:
the number of antecedants

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
See Also:
Capabilities

buildClassifier

public void buildClassifier(Instances instances)
                     throws java.lang.Exception
Builds a single rule learner with REP dealing with nominal classes or numeric classes. For nominal classes, this rule learner predicts a distribution on the classes. For numeric classes, this learner predicts a single value.

Specified by:
buildClassifier in interface Classifier
Parameters:
instances - the training data
Throws:
java.lang.Exception - if classifier can't be built successfully

distributionForInstance

public double[] distributionForInstance(Instance instance)
                                 throws java.lang.Exception
Computes class distribution for the given instance.

Specified by:
distributionForInstance in interface Classifier
Overrides:
distributionForInstance in class AbstractClassifier
Parameters:
instance - the instance for which distribution is to be computed
Returns:
the class distribution for the given instance
Throws:
java.lang.Exception - if given instance is null

isCover

public boolean isCover(Instance datum)
Whether the instance covered by this rule

Parameters:
datum - the instance in question
Returns:
the boolean value indicating whether the instance is covered by this rule

hasAntds

public boolean hasAntds()
Whether this rule has antecedents, i.e. whether it is a default rule

Returns:
the boolean value indicating whether the rule has antecedents

toString

public java.lang.String toString(java.lang.String att,
                                 java.lang.String cl)
Prints this rule with the specified class label

Parameters:
att - the string standing for attribute in the consequent of this rule
cl - the string standing for value in the consequent of this rule
Returns:
a textual description of this rule with the specified class label

toString

public java.lang.String toString()
Prints this rule

Overrides:
toString in class java.lang.Object
Returns:
a textual description of this rule

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.

Parameters:
args - the options for the classifier