static void Main(string[] args) { /* This sample demonstrate how-to use the Apriori algorithm. As a test data I use a data from an imagine book store: 1) We have a list of authors, which the store sells. 2) We have an information about shopping cart of some users. As a result we get the following information: 1. Order by popularity of the authors/set of authors. 2. What we can advise the user, basing on his shopping cart. It is ordered by probability (frequent). */ TypeRegister.Register<BookAuthor>((a, b) => a.Name.CompareTo(b.Name)); var itemsets = new List<Itemset<BookAuthor>>(); var transactions = new SampleHelper().Transactions.ToList(); var apriori = new Apriori<BookAuthor> { MinSupport = (double) 1/9, SaveItemset = itemset => itemsets.Add(itemset), GetTransactions = ()=> transactions }; apriori.ProcessTransactions(); var rules = new List<Rule<BookAuthor>>(); var agrawal = new AgrawalFaster<BookAuthor> { MinLift = 0.01, MinConfidence = 0.01, TransactionsCount = transactions.Count(), GetItemsets = ()=>itemsets, SaveRule = rule=>rules.Add(rule) }; agrawal.Run(); foreach (var item in itemsets.OrderByDescending(v => v.Support)) { Console.WriteLine(string.Join("; ", item.Value.OrderBy(i => i.Name)) + " #SUP: " + item.Support); } Console.WriteLine("===="); foreach (var item in rules.OrderByDescending(r => r.Confidence)) { Console.WriteLine(string.Join("; ", item.Combination) + " => " + string.Join("; ", item.Remaining) + " ===> Confidence: " + item.Confidence + " Lift: " + item.Lift); } Console.ReadLine(); }
public override void ViewDidLoad() { TypeRegister.Register<BookAuthor>((a, b) => a.Name.CompareTo(b.Name)); var itemsets = new List<Itemset<BookAuthor>>(); var transactions = new SampleHelper().Transactions.ToList(); var fpGrowth = new FPGrowth<BookAuthor> { MinSupport = (double) 1/9, SaveItemset = itemset => itemsets.Add(itemset), GetTransactions = () => transactions }; fpGrowth.ProcessTransactions(); var rules = new List<Rule<BookAuthor>>(); var agrawal = new AgrawalFaster<BookAuthor> { MinLift = 0.01, MinConfidence = 0.01, TransactionsCount = transactions.Count(), GetItemsets = () => itemsets, SaveRule = rule => rules.Add(rule) }; agrawal.Run(); FrequentItemsTable.RegisterClassForCellReuse (typeof(FrequentItemTableViewCell), FrequentTableViewDelegate.CellIdentifier); FrequentItemsTable.Source = new FrequentTableViewDelegate{ GetData = () => itemsets.OrderByDescending(i=>i.Support).ToList() }; FrequentRulesTable.RegisterClassForCellReuse (typeof(FrequentRulesTableViewCell), FrequentRulesTableViewDelegate.CellIdentifier); FrequentRulesTable.Source = new FrequentRulesTableViewDelegate{ GetData = () => rules.OrderByDescending(i=>i.Confidence).ToList() }; }