@Override public void doWork() throws OperatorException { double minValue = getParameterAsDouble(PARAMETER_MIN_CONFIDENCE); if (getParameterAsInt(PARAMETER_CRITERION) != CONFIDENCE) { minValue = getParameterAsDouble(PARAMETER_MIN_CRITERION_VALUE); } double theta = getParameterAsDouble(PARAMETER_GAIN_THETA); double laplaceK = getParameterAsDouble(PARAMETER_LAPLACE_K); FrequentItemSets sets = itemSetsInput.getData(FrequentItemSets.class); AssociationRules rules = new AssociationRules(); HashMap<Collection<Item>, Integer> setFrequencyMap = new HashMap<Collection<Item>, Integer>(); int numberOfTransactions = sets.getNumberOfTransactions(); // iterating sorted over every frequent Set, generating every possible rule and building // frequency map sets.sortSets(); for (FrequentItemSet set : sets) { setFrequencyMap.put(set.getItems(), set.getFrequency()); // generating rule by splitting set in every two parts for head and body of rule if (set.getItems().size() > 1) { PowerSet<Item> powerSet = new PowerSet<Item>(set.getItems()); for (Collection<Item> premises : powerSet) { if (premises.size() > 0 && premises.size() < set.getItems().size()) { Collection<Item> conclusion = powerSet.getComplement(premises); int totalFrequency = set.getFrequency(); int preconditionFrequency = setFrequencyMap.get(premises); int conclusionFrequency = setFrequencyMap.get(conclusion); double value = getCriterionValue( totalFrequency, preconditionFrequency, conclusionFrequency, numberOfTransactions, theta, laplaceK); if (value >= minValue) { AssociationRule rule = new AssociationRule( premises, conclusion, getSupport(totalFrequency, numberOfTransactions)); rule.setConfidence(getConfidence(totalFrequency, preconditionFrequency)); rule.setLift( getLift( totalFrequency, preconditionFrequency, conclusionFrequency, numberOfTransactions)); rule.setConviction( getConviction( totalFrequency, preconditionFrequency, conclusionFrequency, numberOfTransactions)); rule.setPs( getPs( totalFrequency, preconditionFrequency, conclusionFrequency, numberOfTransactions)); rule.setGain( getGain( theta, totalFrequency, preconditionFrequency, conclusionFrequency, numberOfTransactions)); rule.setLaplace( getLaPlace( laplaceK, totalFrequency, preconditionFrequency, conclusionFrequency, numberOfTransactions)); rules.addItemRule(rule); } } } } } rulesOutput.deliver(rules); itemSetsOutput.deliver(sets); }