コード例 #1
0
        public Output ProcessTransaction(double minSupport, double minConfidence, IEnumerable <string> items, IEnumerable <string> transactions, bool @class)
        {
            Print(minSupport, minConfidence);
            IList <Item> frequentItems = GetL1FrequentItems(minSupport, items, transactions);

            Print(frequentItems);
            ItemsDictionary allFrequentItems = new ItemsDictionary();

            allFrequentItems.ConcatItems(frequentItems);
            IDictionary <string, double> candidates = new Dictionary <string, double>();
            double transactionsCount = transactions.Count();

            do
            {
                candidates    = GenerateCandidates(frequentItems, transactions);
                frequentItems = GetFrequentItems(candidates, minSupport, transactionsCount);
                Print(frequentItems);
                allFrequentItems.ConcatItems(frequentItems);
            }while (candidates.Count != 0);

            HashSet <Rule> rules       = GenerateRules(allFrequentItems);
            IList <Rule>   strongRules = GetStrongRules(minConfidence, rules, allFrequentItems);
            Dictionary <string, Dictionary <string, double> > closedItemSets = GetClosedItemSets(allFrequentItems);
            IList <string> maximalItemSets = GetMaximalItemSets(closedItemSets);

            Print(strongRules);

            // Rule Prunning
            var prune = new RulePrunning();
            var rulesAfterPrunning = prune
                                     .DatabaseCoverageMethod(strongRules, transactions.ToList());

            Console.WriteLine("Rules AFTER prunning with Database Coverage method.");
            Print(rulesAfterPrunning);

            // Rule Ranking
            var rank        = new RuleRanking();
            var rankedRules = rank.ACS(rulesAfterPrunning);

            Console.WriteLine("Rules ranked using ACS");
            Print(rankedRules);

            rankedRules = rank.CSA(rulesAfterPrunning);
            Console.WriteLine("Rules ranked using CSA");
            Print(rankedRules);

            var sb = new StringBuilder($"Itemset\t\tClass\n=====================\n");

            foreach (var rule in rankedRules)
            {
                sb.AppendFormat("{0};{1}\t{2}\n", rule.X, rule.Y, @class);
            }
            sb.AppendLine();
            Console.WriteLine(sb);


            //return new Output
            //{
            //    StrongRules = strongRules,
            //    MaximalItemSets = maximalItemSets,
            //    ClosedItemSets = closedItemSets,
            //    FrequentItems = allFrequentItems
            //};
            return(null);
        }