/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.uff.ic.oceano.ostra.tools.datamining;
import br.uff.ic.oceano.util.Logger;
import br.uff.ic.oceano.ostra.controle.DataMiningControl;
import br.uff.ic.oceano.ostra.exception.DataMiningException;
import br.uff.ic.oceano.ostra.model.DataMiningPattern;
import java.util.LinkedList;
import java.util.List;
import weka.associations.Apriori;
import weka.associations.ItemSet;
/**
*
* @author DanCastellani
*/
public class MyApriori extends Apriori {
public static final String ERROR_NO_RULES_FOUND = "No large itemsets and rules found!";
public MyApriori() {
super();
}
public MyApriori(DataMiningControl dataMiningControl) {
super();
m_verbose = true;
setLowerBoundMinSupport(dataMiningControl.getMinSup());
setUpperBoundMinSupport(dataMiningControl.getMaxSup());
setDelta(0.01d);
setOutputItemSets(true);
setSignificanceLevel(-1d);
setMetricType(dataMiningControl.getSelectedTag());
setMinMetric(dataMiningControl.getMinMetric());
setNumRules(dataMiningControl.getMaxRules());
}
public List<DataMiningPattern> getAssociationRules() throws DataMiningException {
final List<DataMiningPattern> returnRules = new LinkedList<DataMiningPattern>();
if (m_Ls == null || m_Ls.size() <= 1) {
throw new DataMiningException(ERROR_NO_RULES_FOUND);
}
DataMiningPattern rule;
String pattern;
for (int i = 0; i < m_allTheRules[0].size(); i++) {
rule = new DataMiningPattern();
pattern = ((ItemSet) m_allTheRules[0].elementAt(i)).toString(m_instances) + " ==> " + ((ItemSet) m_allTheRules[1].elementAt(i)).toString(m_instances);
rule.setPattern(pattern);
rule.setCount(new Double(((ItemSet) m_allTheRules[1].elementAt(i)).support()));
rule.setConfidence((Double) m_allTheRules[2].elementAt(i));
if (m_metricType != CONFIDENCE || m_significanceLevel != -1) {
rule.setLift((Double) m_allTheRules[3].elementAt(i));
rule.setLeverage((Double) m_allTheRules[4].elementAt(i));
rule.setConviction((Double) m_allTheRules[5].elementAt(i));
}
Logger.debug("Adding rule: " + rule.toString());
returnRules.add(rule);
}
return returnRules;
}
}