示例#1
0
        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]);
                }
            }
        }
示例#2
0
        // 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);
        }
示例#3
0
        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);
        }
示例#4
0
        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();
        }
示例#5
0
        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;
        }
示例#6
0
        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);
        }
示例#7
0
 private void FrmFPTree_Load(object sender, EventArgs e)
 {
     tree = new FPTree();
     tree = CreateTree();
     HienThi_FPTree(tree, tree.root);
 }