public void HienThi_FPTree(FPTree tree, Node root) { if (tree.root.itemName == root.itemName) { Tao_Lable(pictureBoxTree.Width / 2, 20, "lbl_Root", "ROOT"); } else { if (root.toaDoX != 0 && root.toaDoY != 0) { Tao_Lable(root.toaDoX, root.toaDoY, "lbl_" + root.itemName, root.itemName + " : " + root.count); } } int dem = 0; for (int i = 0; i < root.nodeChildrens.Length; i++) { if (root.nodeChildrens[i] != null) { dem += 1; HienThi_FPTree(tree, root.nodeChildrens[i]); } } }
// Phương thức public FPTree CreateTree() { FPTree tree = new FPTree(); tree.root = new Node(); tree.arrayNode = new Node[99]; tree.countNode = 0; return(tree); }
private FPTree CreateTree() { FPTree tree = new FPTree(); int i = 0; tree.root.toaDoX = pictureBoxTree.Width / 2; tree.root.toaDoY = 20; list_frequencyItems_TID = ChuyenQuaList(frequencyItems_TID); for (i = 0; i < frequencyItems_TID.Length; i++) { List list = new List(); list = list_frequencyItems_TID[i]; tree = tree.InsertNode(tree, list); } return(tree); }
static void Main(string[] args) { DateTime start = DateTime.Now; double minSupport = 0.005; double minConfidence = 0.5; string filepath = @"path/to/file"; List <Transaction> dataset = PrepareData(filepath); FPGrowth method = new FPGrowth(dataset, minSupport * dataset.Count); FPTree tree = method.GenerateTree(false); var patterns = method.MineFrequentPatterns(); var rules = method.GenerateRules(patterns, minSupport, minConfidence); DateTime end = DateTime.Now; Console.WriteLine("Program finished in {0} seconds", (end - start).TotalSeconds); patterns.ForEach(p => Console.WriteLine(p)); Console.WriteLine("=========================================================================="); rules.Sort((r1, r2) => r2.Confidence.CompareTo(r1.Confidence)); rules.ForEach(p => Console.WriteLine(p)); Console.ReadKey(); }
private void btnFPGrowth_Click(object sender, EventArgs e) { FPTree tree = frmTree.tree; // tìm cơ sở mẫu điều kiện, duyệt cây theo biến visited = false, = true đã ghé Dictionary <string, string> coSoMauDieuKiem = new Dictionary <string, string>(); for (int i = dataFrequency.Rows.Count - 1; i >= 0; i--) { string item = dataFrequency.Rows[i]["Items"].ToString(); if (!coSoMauDieuKiem.ContainsKey(item)) { coSoMauDieuKiem.Add(item, null); } for (int j = 0; j < tree.countNode; j++) { var node = tree.arrayNode[j]; if (node.itemName.Equals(item) && !node.visited) { node.visited = true; var nodeparent = node.nodeParent; string coso = ""; while (nodeparent.itemName != null) { coso += nodeparent.itemName + ","; nodeparent = nodeparent.nodeParent; } if (!string.IsNullOrEmpty(coso)) { coso += ":" + node.count; coSoMauDieuKiem[item] += coso + ";"; } } } } DataTable dataResult = new DataTable(); dataResult.Columns.Add("Items", typeof(string)); dataResult.Columns.Add("CoSoMau", typeof(string)); dataResult.Columns.Add("FPTree", typeof(string)); dataResult.Columns.Add("MauPhoBien", typeof(string)); foreach (var item in coSoMauDieuKiem) { Dictionary <string, int> fPTreeDieuKien = new Dictionary <string, int>(); // đếm các item if (item.Value != null) { string[] dieukien = item.Value.Split(';'); foreach (var items in dieukien) { string[] it = items.Split(':')[0].Split(','); foreach (var t in it) { if (!string.IsNullOrEmpty(t)) { if (!fPTreeDieuKien.ContainsKey(t)) { fPTreeDieuKien.Add(t, Convert.ToInt32(items.Split(':')[1])); } else { fPTreeDieuKien[t] += Convert.ToInt32(items.Split(':')[1]); } } } } } // loại các item count < mincount List <string> keys = new List <string>(fPTreeDieuKien.Keys); foreach (var key in keys) { if (fPTreeDieuKien[key] < Convert.ToInt32(txtMincount.Text)) { fPTreeDieuKien.Remove(key); } } dataResult.Rows.Add(item.Key, item.Value, string.Join(",", fPTreeDieuKien.Select(x => x.Key + ":" + x.Value).ToArray()), CacMauPhoBien(item.Key, fPTreeDieuKien)); } gridControlResult.DataSource = dataResult; }
public FPTree InsertNode(FPTree tree, List list) { int i = 0; Node root = new Node(); root = tree.root; Node node = new Node(); node = list.pHead; while (node != null) { bool flag = false; // tìm rtrong root có itemName nào trùng với node.itemName không? for (i = 0; i < root.nodeChildrens.Length; i++) { if (root.nodeChildrens[i] != null) { if (root.nodeChildrens[i].itemName == node.itemName) { flag = true; break; } } } // nếu tìm thấy thì tăng cout của itemName đó lên 1 if (flag == true) { root.nodeChildrens[i].count += 1; if (node.nodeChild != null && node.nodeChild.nodeParent != null) { node.nodeChild.nodeParent = root.nodeChildrens[i]; } } // ngược lại tạo node mới else { node.nodeParent = root; node.count += 1; tree.countNode += 1; // gán node là con của root for (i = 0; i < root.nodeChildrens.Length; i++) { if (root.nodeChildrens[i] == null) { root.nodeChildrens[i] = node; break; } } // thêm node vào arrayNode for (i = 0; i < tree.countNode; i++) { if (tree.arrayNode[i] == null) { tree.arrayNode[i] = node; break; } } // link đến node có itemName giống node for (i = tree.countNode - 2; i > 0; i--) { if (tree.arrayNode[i] != null) { if (tree.arrayNode[i].itemName == node.itemName) { node.nodeLink = arrayNode[i]; break; } } } } if (node.nodeChild == null) { root = node; } else { root = node.nodeChild.nodeParent; } node = node.nodeChild; } return(tree); }
private void FrmFPTree_Load(object sender, EventArgs e) { tree = new FPTree(); tree = CreateTree(); HienThi_FPTree(tree, tree.root); }