コード例 #1
0
ファイル: FPNode.cs プロジェクト: LaurentB1995/FP-Growth
        public FPNode AddNode(string name)
        {
            var node = new FPNode(name, this);

            leafs.Add(node);
            return(node);
        }
コード例 #2
0
ファイル: FPNode.cs プロジェクト: LaurentB1995/FP-Growth
 public FPNode(string name, FPNode parent)
 {
     leafs       = new List <FPNode>();
     this.Parent = parent;
     Name        = name;
     Count       = 1;
 }
コード例 #3
0
ファイル: FPTree.cs プロジェクト: LaurentB1995/FP-Growth
        public FPNode AddNode(string name)
        {
            var node = new FPNode(name);

            rootNode.leafs.Add(node);
            return(node);
        }
コード例 #4
0
ファイル: FPTree.cs プロジェクト: LaurentB1995/FP-Growth
 public void MinePatterns(FPNode node, string target, double minSupport, List <ItemSet> freqByKey)
 {
     if (node.Name.Equals(target))
     {
         var fis = new ItemSet((node.BuildPath() + target).Split(','), node.Count);
         freqByKey.Add(fis);
         string key = string.Join(",", fis.Items);
     }
     for (int i = 0; i < node.leafs.Count; ++i)
     {
         MinePatterns(node.leafs[i], target, minSupport, freqByKey);
     }
 }
コード例 #5
0
ファイル: FPNode.cs プロジェクト: LaurentB1995/FP-Growth
        public string BuildPath()
        {
            StringBuilder sb = new StringBuilder("");
            FPNode        x  = this;

            while (x.Parent != null)
            {
                sb.Append(x.Parent.Name).Append(",");
                x = x.Parent;
            }
            if (sb.Length > 0)
            {
                sb = sb.Remove(sb.Length - 1, 1);
                var arr = sb.ToString().Split(',');
                Array.Reverse(arr);
                return(string.Join(",", arr) + ",");
            }
            return(sb.ToString());
        }
コード例 #6
0
ファイル: FPGrowth.cs プロジェクト: LaurentB1995/FP-Growth
        public FPTree GenerateTree(bool isSubTree)
        {
            DateTime      start  = DateTime.Now;
            List <string> domain = Transaction.ExtractDomain(dataSet);

            Supports = GetInitialSupports(domain, minSupport);



            foreach (Transaction transaction in dataSet)
            {
                int count = 0;
                var orderedTransaction = transaction.items.OrderBy(i => Supports.Keys.ToList().IndexOf(i)).ToList();
                if (orderedTransaction.Count > 0)
                {
                    string item = orderedTransaction.ElementAt(0);
                    while (!Supports.ContainsKey(item))
                    {
                        orderedTransaction.RemoveAt(0);
                        if (orderedTransaction.Count > 0)
                        {
                            item = orderedTransaction.ElementAt(0);
                        }
                        else
                        {
                            break;
                        }
                    }
                    FPNode node = null;
                    while (count < orderedTransaction.Count)
                    {
                        item = orderedTransaction.ElementAt(count);
                        if (count == 0)
                        {
                            if (tree.ContainsNode(item))
                            {
                                node = tree.GetNode(item);
                                node.Count++;
                                //Console.WriteLine("Incremented node {0} to count {1}", node.Name,node.Count);
                            }
                            else
                            {
                                node = tree.AddNode(item);
                                //Console.WriteLine("Attached node {0} to root", node.Name);
                            }
                        }
                        else
                        {
                            if (node.ContainsNode(item))
                            {
                                node = node.GetNode(item);
                                node.Count++;
                                //Console.WriteLine("Incremented node {0} to count {1}", node.Name, node.Count);
                            }
                            else
                            {
                                var old = node;
                                node = node.AddNode(item);
                                //Console.WriteLine("Attached node {0} to {1}", node.Name,old.Name);
                            }
                        }

                        count++;
                    }
                }
            }
            DateTime end = DateTime.Now;

            if (!isSubTree)
            {
                Console.WriteLine("Generated main tree in {0} seconds", (end - start).TotalSeconds);
            }
            return(tree);
        }
コード例 #7
0
ファイル: FPTree.cs プロジェクト: LaurentB1995/FP-Growth
 public FPTree()
 {
     rootNode = new FPNode("");
 }