package ca.pfv.spmf.patterns.rule_itemset_array_integer_with_count;
/* This file is copyright (c) 2008-2012 Philippe Fournier-Viger
*
* This file is part of the SPMF DATA MINING SOFTWARE
* (http://www.philippe-fournier-viger.com/spmf).
*
* SPMF is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* SPMF is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License along with
* SPMF. If not, see <http://www.gnu.org/licenses/>.
*/
import ca.pfv.spmf.patterns.itemset_array_integers_with_count.Itemset;
/**
* This class represent an association rule, where itemsets are arrays of integers.
*
* @see Itemset
* @see Rules
* @author Philippe Fournier-Viger
*/
public class Rule {
/** antecedent */
private int[] itemset1;
/** consequent */
private int[] itemset2;
/** coverage (support of the antecedent)*/
private int coverage;
/** relative support */
private int transactionCount;
/** confidence of the rule */
private double confidence;
/**
* Constructor
*
* @param itemset1
* the antecedent of the rule (an itemset)
* @param itemset2
* the consequent of the rule (an itemset)
* @param coverage the support of the antecedent as a number of transactions
* @param transactionCount
* the absolute support of the rule (integer - a number of transactions)
* @param confidence
* the confidence of the rule
*/
public Rule(int[] itemset1, int[] itemset2, int coverage,
int transactionCount, double confidence) {
this.itemset1 = itemset1;
this.itemset2 = itemset2;
this.coverage = coverage;
this.transactionCount = transactionCount;
this.confidence = confidence;
}
/**
* Get the relative support of the rule (percentage)
*
* @param databaseSize
* the number of transactions in the database where this rule was
* found.
* @return the support (double)
*/
public double getRelativeSupport(int databaseSize) {
return ((double) transactionCount) / ((double) databaseSize);
}
/**
* Get the absolute support of this rule (integer).
*
* @return the absolute support.
*/
public int getAbsoluteSupport() {
return transactionCount;
}
/**
* Get the confidence of this rule.
*
* @return the confidence
*/
public double getConfidence() {
return confidence;
}
/**
* Get the coverage of the rule (the support of the rule antecedent) as a number of transactions
* @return the coverage (int)
*/
public int getCoverage() {
return coverage;
}
/**
* Print this rule to System.out.
*/
public void print() {
System.out.println(toString());
}
/**
* Return a String representation of this rule
*
* @return a String
*/
public String toString() {
StringBuilder buffer = new StringBuilder();
// write itemset 1
for (int i = 0; i < itemset1.length; i++) {
buffer.append(itemset1[i]);
if (i != itemset1.length - 1) {
buffer.append(" ");
}
}
// write separator
buffer.append(" ==> ");
// write itemset 2
for (int i = 0; i < itemset2.length; i++) {
buffer.append(itemset2[i]);
buffer.append(" ");
}
return buffer.toString();
}
/**
* Get the left itemset of this rule (antecedent).
*
* @return an itemset.
*/
public int[] getItemset1() {
return itemset1;
}
/**
* Get the right itemset of this rule (consequent).
*
* @return an itemset.
*/
public int[] getItemset2() {
return itemset2;
}
}