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); }