Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
 /**
  * Add a rule.
  * @param rule a rule
  */
 public void addRule(ClosedRule rule)
 {
     rules.Add(rule);
 }