/// <summary> /// Khởi tạo luật kết hợp /// </summary> public ClssRules() { X = new clssItemSet(); Y = new clssItemSet(); Support = 0.0; Confidence = 0.0; }
// public static ClssItemCollection FindSubsets(clssItemSet itemset, int n) { ClssItemCollection subsets = new ClssItemCollection(); int subsetCount = (int)Math.Pow(2, itemset.Count); for (int i = 0; i < subsetCount; i++) { if (n == 0 || GetOnCount(i, itemset.Count) == n) { string binary = DecimalToBinary(i, itemset.Count); clssItemSet subset = new clssItemSet(); for (int charIndex = 0; charIndex < binary.Length; charIndex++) { if (binary[charIndex] == '1') { subset.Add(itemset[charIndex]); } } subsets.Add(subset); } } return(subsets); }
public clssItemSet Remove(clssItemSet itemset) { clssItemSet removed = new clssItemSet(); removed.AddRange(from item in this where !itemset.Contains(item) select item); return(removed); }
public static ClssItemCollection DoApriori(ClssItemCollection db, double supportThreshold) { clssItemSet I = db.GetUniqueItems(); ClssItemCollection L = new ClssItemCollection(); // tập dữ liệu phổ biến ClssItemCollection Li = new ClssItemCollection(); //tập dữ liệu ClssItemCollection Ci = new ClssItemCollection(); //tập dữ liệu được lược bớt //Duyệt sự lặp lại đầu tiên của phần tử trong tập dữ liệu foreach (string item in I) { Ci.Add(new clssItemSet() { item }); } //Sự lặp lại các lần kế tiếp int k = 2; while (Ci.Count != 0) { //Lấy Li từ Ci (phần tử được lược bỏ) Li.Clear(); foreach (clssItemSet itemset in Ci) { itemset.Support = db.FindSupport(itemset); if (itemset.Support >= supportThreshold) { Li.Add(itemset); L.Add(itemset); } } Ci.Clear(); Ci.AddRange(clssBit.FindSubsets(Li.GetUniqueItems(), k)); k += 1; } return(L); }
/// <summary> /// Kiểm tra /// </summary> /// <param name="itemset"></param> /// <returns></returns> public bool Contains(clssItemSet itemset) { return(this.Intersect(itemset).Count() == itemset.Count); }