public static ItemsetCollection DoApriori(ItemsetCollection db, double supportThreshold) { Itemset I = db.GetUniqueItems(); ItemsetCollection L = new ItemsetCollection(); //resultant large itemsets ItemsetCollection Li = new ItemsetCollection(); //large itemset in each iteration ItemsetCollection Ci = new ItemsetCollection(); //pruned itemset in each iteration //first iteration (1-item itemsets) foreach (int item in I) { Ci.Add(new Itemset() { item }); } //next iterations int k = 2; while (Ci.Count != 0) { //set Li from Ci (pruning) Li.Clear(); foreach (Itemset itemset in Ci) { itemset.Support = db.FindSupport(itemset); if (itemset.Support >= supportThreshold) { Li.Add(itemset); L.Add(itemset); } } //set Ci for next iteration (find supersets of Li) Ci.Clear(); Ci.AddRange(Bit.FindSubsets(Li.GetUniqueItems(), k)); //get k-item subsets k += 1; } return(L); }
public static ItemsetCollection DoAprioriNew(ItemsetCollection db, double supportThreshold) { //Itemset I = db.GetUniqueItems(); ItemsetCollection Fre = new ItemsetCollection(); //List of Items > support ItemsetCollection L = new ItemsetCollection(); //resultant large itemsets ItemsetCollection T = new ItemsetCollection(); //frequent items //item > support Itemset I = db.GetUniqueItems(); foreach (int item in I) { Itemset itemset = new Itemset() { item }; itemset.Support = db.FindSupport(itemset); if (itemset.Support >= supportThreshold) { Fre.Add(itemset); } } ItemsetCollection subsets = Bit.FindSubsets(Fre.GetUniqueItems(), 0); //get all subsets //Dictionary<Itemset, int> subsetsDic = subsets.Select((x, i) => new {x = x, i = 0 }).ToDictionary(k => k.x,k=>k.i); //frequent items foreach (Itemset itemdata in db) { Itemset itemset = new Itemset(); foreach (Itemset itemFre in Fre) { if (itemdata.Contains(itemFre[0])) { itemset.Add(itemFre[0]); } } if (itemset.Count > 0) { T.Add(itemset); foreach (Itemset items in subsets) { if (itemset.Contains(items)) { items.Support++; } } } } foreach (Itemset items in subsets) { if (items.Count > 0) { items.Support = (items.Support / (double)db.Count) * 100.0; if (items.Support >= supportThreshold) { L.Add(items); } } } return(L); }
public static ItemsetCollection DoFPGrowthParallel(ItemsetCollection db, double supportThreshold) { ItemsetCollection Fre = new ItemsetCollection(); //List of Items > support ItemsetCollection T = new ItemsetCollection(); //frequent items List <ItemsetCollection> P = new List <ItemsetCollection>(); ItemsetCollection FPTreeCon = new ItemsetCollection(); //Conditional FP-Tree //item > support //Itemset I = db.GetUniqueItems(); //foreach (string item in I) //{ // Itemset itemset = new Itemset() { item }; // itemset.Support = db.FindSupport(itemset); // if (itemset.Support >= supportThreshold) // { // Fre.Add(itemset); // } //} //// sort item //Fre.Sort(delegate (Itemset x, Itemset y) //{ // if (x.Support > y.Support) return -1; // else if (x.Support < y.Support) // return 1; // else return 0; //}); ////Fre = ParallelFre(db, supportThreshold); ////frequent items //foreach (Itemset itemdata in db) //{ // Itemset itemset = new Itemset(); // foreach (Itemset itemFre in Fre) // { // if (itemdata.Contains(itemFre[0])) // { // itemset.Add(itemFre[0]); // } // } // T.Add(itemset); //} T = ParallelFPGrowth(db, supportThreshold, ref Fre); // create FP Tree FPTree tree = CreateTree(T); // Conditional Patern Bases foreach (Itemset itemset in Fre) { ItemsetCollection itemsetCollection = new ItemsetCollection(); for (int j = 0; j < tree.countNode; j++) { var node = tree.arrayNode[j]; if (node.itemName.Equals(itemset[0]) && !node.visited) { node.visited = true; var nodeparent = node.nodeParent; while (nodeparent.itemName > -1) { int index = itemsetCollection.FindIndex(nodeparent.itemName); if (index > -1) { itemsetCollection[index].Support += node.count; } else { Itemset item = new Itemset(); item.Support = node.count; item.Add(nodeparent.itemName); itemsetCollection.Add(item); } nodeparent = nodeparent.nodeParent; } } } P.Add(itemsetCollection); } // Conditional FP-Tree for (int i = 0; i < P.Count; i++) { ItemsetCollection itemsetCollection = new ItemsetCollection(); //itemsetCollection.Add(Fre[i]); //hoán vị sau foreach (var item in P[i]) { if (db.Support(item) >= supportThreshold) { itemsetCollection.Add(item); } } ItemsetCollection subsets = Bit.FindSubsets(itemsetCollection.GetUniqueItems(), 0); //get all subsets foreach (Itemset items in subsets) { items.Add(Fre[i][0]); items.Support = db.FindSupport(items); if (items.Support >= supportThreshold) { FPTreeCon.Add(items); } } } return(FPTreeCon); }