weka.associations.tertius
Class Rule

java.lang.Object
  extended byweka.associations.tertius.Rule
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable

public class Rule
extends java.lang.Object
implements java.io.Serializable, java.lang.Cloneable

Class representing a rule with a body and a head.

Author:
Amélie Deltour
See Also:
Serialized Form

Field Summary
static java.util.Comparator confirmationComparator
          Comparator used to compare two rules according to their confirmation value.
static java.util.Comparator confirmationThenObservedComparator
          Comparator used to compare two rules according to their confirmation and then their observed number of counter-instances.
private  Body m_body
          The body of the rule.
private  boolean m_classRule
          Is this rule a classification rule ?
private  double m_confirmation
          Confirmation of this rule.
private  int m_counter
          Counter for the counter-instances of this rule.
private  java.util.ArrayList m_counterInstances
          Set of counter-instances of this rule.
private  Head m_head
          The head of the rule.
private  int m_maxLiterals
          Maximal number of literals in the rule.
private  boolean m_negBody
          Can there be negations in the body ?
private  boolean m_negHead
          Can there be negations in the head ?
private  int m_numInstances
          Number of instances in the data this rule deals with.
private  double m_optimistic
          Optimistic estimate of this rule.
private  boolean m_repeatPredicate
          Can repeat predicates in the rule ?
private  boolean m_singleHead
          Can there be only one literal in the head ?
static java.util.Comparator observedComparator
          Comparator used to compare two rules according to their observed number of counter-instances.
static java.util.Comparator optimisticComparator
          Comparator used to compare two rules according to their optimistic estimate.
static java.util.Comparator optimisticThenObservedComparator
          Comparator used to compare two rules according to their optimistic estimate and then their observed number of counter-instances.
 
Constructor Summary
Rule(boolean repeatPredicate, int maxLiterals, boolean negBody, boolean negHead, boolean classRule, boolean horn)
          Constructor for a rule when the counter-instances are not stored, giving all the constraints applied to this rule.
Rule(Instances instances, boolean repeatPredicate, int maxLiterals, boolean negBody, boolean negHead, boolean classRule, boolean horn)
          Constructor for a rule when the counter-instances are stored, giving all the constraints applied to this rule.
 
Method Summary
private  Rule addTermToBody(Literal newLit)
          Add a literal to the body of the rule.
private  Rule addTermToHead(Literal newLit)
          Add a literal to the head of the rule.
 boolean bodyContains(Literal lit)
          Test if the body of the rule contains a literal.
 void calculateConfirmation()
          Calculate the confirmation of this rule.
 void calculateOptimistic()
          Calculate the optimistic estimate of this rule.
 java.lang.Object clone()
          Returns a shallow copy of this rule.
 boolean counterInstance(Instance instance)
          Test if an instance is a counter-instance of this rule.
 boolean equivalentTo(Rule otherRule)
          Test if this rule is equivalent to another rule.
 double getConfirmation()
          Get the confirmation value of this rule.
 double getExpectedFrequency()
          Get the expected frequency of counter-instances of this rule.
 double getExpectedNumber()
           
 double getFPRate()
          Get the rate of False Positive instances of this rule.
 double getObservedFrequency()
          Get the observed frequency of counter-instances of this rule in the dataset.
 int getObservedNumber()
          Get the observed number of counter-instances of this rule in the dataset.
 double getOptimistic()
          Get the optimistic estimate of the confirmation obtained by refining this rule.
 double getTPRate()
          Get the rate of True Positive instances of this rule.
 boolean hasFalseHead()
          Test if the head of the rule is false.
 boolean hasTrueBody()
          Test if the body of the rule is true.
 boolean headContains(Literal lit)
          Test if the head of the rule contains a literal.
 boolean isEmpty()
          Test if this rule is empty.
 int numLiterals()
          Give the number of literals in this rule.
 boolean overFrequencyThreshold(double minFrequency)
          Test if this rule is over the frequency threshold.
 SimpleLinkedList refine(java.util.ArrayList predicates)
          Refine a rule by adding literal from a set of predictes.
private  SimpleLinkedList refine(Predicate pred, int firstIndex, int lastIndex, boolean addToBody, boolean addToHead)
          Refine a rule by adding a range of literals of a predicate, either to the head or to the body of the rule.
 java.lang.String rocToString()
          Return a String giving the TP-rate and FP-rate of this rule.
 boolean sameClauseAs(Rule otherRule)
          Test if this rule and another rule correspond to the same clause.
 boolean subsumes(Rule otherRule)
          Test if this rule subsumes another rule.
 java.lang.String toString()
          Retrun a String for this rule.
 void upDate(Instances instances)
          Update the number of counter-instances of this rule in the dataset.
 java.lang.String valuesToString()
          Return a String giving the confirmation and optimistic estimate of this rule.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

m_body

private Body m_body
The body of the rule.


m_head

private Head m_head
The head of the rule.


m_repeatPredicate

private boolean m_repeatPredicate
Can repeat predicates in the rule ?


m_maxLiterals

private int m_maxLiterals
Maximal number of literals in the rule.


m_negBody

private boolean m_negBody
Can there be negations in the body ?


m_negHead

private boolean m_negHead
Can there be negations in the head ?


m_classRule

private boolean m_classRule
Is this rule a classification rule ?


m_singleHead

private boolean m_singleHead
Can there be only one literal in the head ?


m_numInstances

private int m_numInstances
Number of instances in the data this rule deals with.


m_counterInstances

private java.util.ArrayList m_counterInstances
Set of counter-instances of this rule.


m_counter

private int m_counter
Counter for the counter-instances of this rule.


m_confirmation

private double m_confirmation
Confirmation of this rule.


m_optimistic

private double m_optimistic
Optimistic estimate of this rule.


confirmationComparator

public static java.util.Comparator confirmationComparator
Comparator used to compare two rules according to their confirmation value.


observedComparator

public static java.util.Comparator observedComparator
Comparator used to compare two rules according to their observed number of counter-instances.


optimisticComparator

public static java.util.Comparator optimisticComparator
Comparator used to compare two rules according to their optimistic estimate.


confirmationThenObservedComparator

public static java.util.Comparator confirmationThenObservedComparator
Comparator used to compare two rules according to their confirmation and then their observed number of counter-instances.


optimisticThenObservedComparator

public static java.util.Comparator optimisticThenObservedComparator
Comparator used to compare two rules according to their optimistic estimate and then their observed number of counter-instances.

Constructor Detail

Rule

public Rule(boolean repeatPredicate,
            int maxLiterals,
            boolean negBody,
            boolean negHead,
            boolean classRule,
            boolean horn)
Constructor for a rule when the counter-instances are not stored, giving all the constraints applied to this rule.

Parameters:
repeatPredicate - True if predicates can be repeated.
maxLiterals - Maximum number of literals.
negBody - True if negation is allowed in the body.
negHead - True if negation is allowed in the head.
classRule - True if the rule is a classification rule.
horn - True if the rule is a horn clause.

Rule

public Rule(Instances instances,
            boolean repeatPredicate,
            int maxLiterals,
            boolean negBody,
            boolean negHead,
            boolean classRule,
            boolean horn)
Constructor for a rule when the counter-instances are stored, giving all the constraints applied to this rule. The counter-instances are initialized to all the instances in the dataset.

Parameters:
instances - The dataset.
repeatPredicate - True if predicates can be repeated.
maxLiterals - Maximum number of literals.
negBody - True if negation is allowed in the body.
negHead - True if negation is allowed in the head.
classRule - True if the rule is a classification rule.
horn - True if the rule is a horn clause.
Method Detail

clone

public java.lang.Object clone()
Returns a shallow copy of this rule. The structured is copied but the literals themselves are not copied.

Returns:
A copy of this Rule.

counterInstance

public boolean counterInstance(Instance instance)
Test if an instance is a counter-instance of this rule.

Parameters:
instance - The instance to test.
Returns:
True if the instance is a counter-instance.

upDate

public void upDate(Instances instances)
Update the number of counter-instances of this rule in the dataset. This method should be used is the rule does not store its counter-instances.

Parameters:
instances - The dataset.

getConfirmation

public double getConfirmation()
Get the confirmation value of this rule.

Returns:
The confirmation.

getOptimistic

public double getOptimistic()
Get the optimistic estimate of the confirmation obtained by refining this rule.

Returns:
The optimistic estimate.

getExpectedNumber

public double getExpectedNumber()

getExpectedFrequency

public double getExpectedFrequency()
Get the expected frequency of counter-instances of this rule.

Returns:
The expected frequency of counter-instances.

getObservedNumber

public int getObservedNumber()
Get the observed number of counter-instances of this rule in the dataset.

Returns:
The observed number of counter-instances.

getObservedFrequency

public double getObservedFrequency()
Get the observed frequency of counter-instances of this rule in the dataset.

Returns:
The expected frequency of counter-instances.

getTPRate

public double getTPRate()
Get the rate of True Positive instances of this rule.

Returns:
The TP-rate.

getFPRate

public double getFPRate()
Get the rate of False Positive instances of this rule.

Returns:
The FP-rate.

calculateConfirmation

public void calculateConfirmation()
Calculate the confirmation of this rule.


calculateOptimistic

public void calculateOptimistic()
Calculate the optimistic estimate of this rule.


isEmpty

public boolean isEmpty()
Test if this rule is empty.

Returns:
True if it is the empty rule.

numLiterals

public int numLiterals()
Give the number of literals in this rule.

Returns:
The number of literals.

addTermToBody

private Rule addTermToBody(Literal newLit)
Add a literal to the body of the rule.

Parameters:
newLit - The literal to add.
Returns:
The rule obtained by adding the literal, null if the literal can not be added because of the constraints on the rule.

addTermToHead

private Rule addTermToHead(Literal newLit)
Add a literal to the head of the rule.

Parameters:
newLit - The literal to add.
Returns:
The rule obtained by adding the literal, null if the literal can not be added because of the constraints on the rule.

refine

private SimpleLinkedList refine(Predicate pred,
                                int firstIndex,
                                int lastIndex,
                                boolean addToBody,
                                boolean addToHead)
Refine a rule by adding a range of literals of a predicate, either to the head or to the body of the rule.

Parameters:
pred - The predicate to consider.
firstIndex - The index of the first literal of the predicate to add.
lastIndex - The index of the last literal of the predicate to add.
addToHead - True if the literals should be added to the head.
Returns:
A list of rules obtained by refinement.

refine

public SimpleLinkedList refine(java.util.ArrayList predicates)
Refine a rule by adding literal from a set of predictes.

Parameters:
predicates - The predicates available.
Returns:
The list of the children obtained by refining the rule.

subsumes

public boolean subsumes(Rule otherRule)
Test if this rule subsumes another rule.

Parameters:
otherRule - The other rule.
Returns:
True if the other rule is subsumed.

sameClauseAs

public boolean sameClauseAs(Rule otherRule)
Test if this rule and another rule correspond to the same clause.

Parameters:
otherRule - The other rule.
Returns:
True if both rules correspond to the same clause.

equivalentTo

public boolean equivalentTo(Rule otherRule)
Test if this rule is equivalent to another rule.

Parameters:
otherRule - The other rule.
Returns:
True if both rules are equivalent.

bodyContains

public boolean bodyContains(Literal lit)
Test if the body of the rule contains a literal.

Parameters:
lit - The literal to look for.
Returns:
True if the literal is contained in the body of the rule.

headContains

public boolean headContains(Literal lit)
Test if the head of the rule contains a literal.

Parameters:
lit - The literal to look for.
Returns:
True if the literal is contained in the head of the rule.

overFrequencyThreshold

public boolean overFrequencyThreshold(double minFrequency)
Test if this rule is over the frequency threshold.

Parameters:
minFrequency - The frequency threshold.
Returns:
True if the rule is over the threshold.

hasTrueBody

public boolean hasTrueBody()
Test if the body of the rule is true.

Returns:
True if the body is always satisfied.

hasFalseHead

public boolean hasFalseHead()
Test if the head of the rule is false.

Returns:
True if the body is never satisfied.

valuesToString

public java.lang.String valuesToString()
Return a String giving the confirmation and optimistic estimate of this rule.

Returns:
A String with the values of the rule.

rocToString

public java.lang.String rocToString()
Return a String giving the TP-rate and FP-rate of this rule.

Returns:
A String with the values of the rule.

toString

public java.lang.String toString()
Retrun a String for this rule.

Returns:
The String describing this rule.