private void apGenrules(int k, int m, Itemset lk, HashSet <Itemset> Hm) { // System.out.println(" " + lk.toString() + " " + Hm.toString()); if (k > m + 1) { HashSet <Itemset> Hm_plus_1 = generateCandidateSizeK(Hm); HashSet <Itemset> Hm_plus_1_for_recursion = new HashSet <Itemset>(); foreach (Itemset hm_P_1 in Hm_plus_1) { //for(Itemset hm_P_1 : Hm_plus_1){ Itemset itemset_Lk_minus_hm_P_1 = lk.cloneItemSetMinusAnItemset(hm_P_1); // calculateSupport(hm_P_1); int supLkMinus_hm_P_1 = calculateSupport(itemset_Lk_minus_hm_P_1); // THIS COULD BE DONE ANOTHER WAY ? int supLk = calculateSupport(lk); // IT COULD PERHAPS BE IMPROVED.... double conf = ((double)supLk) / ((double)supLkMinus_hm_P_1); if (conf >= minconf) { ClosedRule rule = new ClosedRule(itemset_Lk_minus_hm_P_1, hm_P_1, lk.getAbsoluteSupport(), conf); save(rule); Hm_plus_1_for_recursion.Add(hm_P_1); } } apGenrules(k, m + 1, lk, Hm_plus_1_for_recursion); } }
private void save(ClosedRule rule) { // increase the number of rule found ruleCount++; // if the result should be saved to a file if (rule.getConfidence() <= 1) { if (writer != null) { AssRules.AssRulesResult result = new AssRules.AssRulesResult(); //StringBuffer buffer = new StringBuffer(); System.Text.StringBuilder buffer = new StringBuilder(); // write itemset 1 if (rule.getItemset1().size() == 0) { buffer.Append("__"); } else { for (int i = 0; i < rule.getItemset1().size(); i++) { buffer.Append(rule.getItemset1().get(i)); //adding to rules result.input.Add(rule.getItemset1().get(i)); if (i != rule.getItemset1().size() - 1) { buffer.Append(" "); } } } // write separator buffer.Append(" ==> "); // write itemset 2 for (int i = 0; i < rule.getItemset2().size(); i++) { buffer.Append(rule.getItemset2().get(i)); result.output.Add(rule.getItemset2().get(i)); if (i != rule.getItemset2().size() - 1) { buffer.Append(" "); } } // write separator buffer.Append(" #SUP: "); // write support buffer.Append(rule.getAbsoluteSupport()); result.support = rule.getAbsoluteSupport(); // write separator buffer.Append(" #CONF: "); // write confidence buffer.Append(rule.getConfidence()); result.confidence = (rule.getConfidence()); writer.Write(buffer.ToString()); writer.WriteLine(""); writer.Flush(); List <AssRulesResult> results = new List <AssRulesResult>(); if (File.Exists("AIarules.bin")) { using (Stream stream = File.Open("AIarules.bin", FileMode.Open)) { BinaryFormatter bin = new BinaryFormatter(); results = (List <AssRulesResult>)bin.Deserialize(stream); } } if (results.Count == 0) { results = new List <AssRulesResult>(); } results.Add(result); using (Stream stream = File.Open("AIarules.bin", FileMode.OpenOrCreate)) { BinaryFormatter bin = new BinaryFormatter(); bin.Serialize(stream, results); } }// otherwise the result is kept into memory else { rules.addRule(rule); } } }
/** * Add a rule. * @param rule a rule */ public void addRule(ClosedRule rule) { rules.Add(rule); }