Пример #1
0
        protected virtual bool CanJoin(ItemSet <MultiLevelItem <T> > itemset1, MultiLevelItem <T> k2)
        {
            MultiLevelItem <T> k1 = itemset1[itemset1.Count - 1];

            if (k1.IsDescendentOf(k2) || k2.IsDescendentOf(k1))
            {
                return(false);
            }
            return(true);
        }
 public override bool ContainsItem(MultiLevelItem <T> item)
 {
     foreach (MultiLevelItem <T> leaf_item in item.LeafLevelItems)
     {
         if (mItems.Contains(leaf_item))
         {
             return(true);
         }
     }
     return(false);
 }
 protected void GetLeafLevelItems(MultiLevelItem <T> node, List <MultiLevelItem <T> > selection)
 {
     if (node == null)
     {
         return;
     }
     if (node.IsLeaf)
     {
         selection.Add(node);
         return;
     }
     for (int i = 0; i < node.ChildCount; ++i)
     {
         GetLeafLevelItems(node.GetChild(i), selection);
     }
 }
 protected bool IsDescendentOf(MultiLevelItem <T> node1, MultiLevelItem <T> node2)
 {
     if (node1.Equals(node2))
     {
         return(true);
     }
     if (node2.IsLeaf)
     {
         return(false);
     }
     for (int i = 0; i < node2.ChildCount; ++i)
     {
         if (IsDescendentOf(node1, node2.GetChild(i)))
         {
             return(true);
         }
     }
     return(false);
 }
        public override bool Equals(object obj)
        {
            MultiLevelItem <T> rhs = obj as MultiLevelItem <T>;

            return(rhs.mItem.Equals(mItem));
        }
 public void AddChild(MultiLevelItem <T> item)
 {
     mChildren.Add(item);
 }
 public bool IsDescendentOf(MultiLevelItem <T> node)
 {
     return(IsDescendentOf(this, node));
 }
        public int CompareTo(MultiLevelItem <T> obj)
        {
            MultiLevelItem <T> rhs = obj as MultiLevelItem <T>;

            return(mItem.CompareTo(rhs.mItem));
        }
Пример #9
0
        public virtual ItemSets <MultiLevelItem <T> > MinePatterns(IEnumerable <TransactionWithMultiLevelItems <T> > database, MultiLevelItem <T> hierarchy, int partitionCount)
        {
            IList <MultiLevelItem <T> > domain2 = hierarchy.Flatten();

            domain2.Remove(hierarchy);

            return(mMethod.MinePatterns(database,
                                        (itemset) =>
            {
                double minSupport = 1;
                for (int i = 0; i < itemset.Count; ++i)
                {
                    minSupport = System.Math.Min(minSupport, itemset[i].MinSupport);
                }
                return minSupport;
            }, domain2, partitionCount));
        }
        public ItemSets <MultiLevelItem <T> > MinePatterns(IEnumerable <TransactionWithMultiLevelItems <T> > database, IList <MultiLevelItem <T> > domain, GetMinSupportHandle getMinItemSetSupport)
        {
            Dictionary <MultiLevelItem <T>, int> counts = new Dictionary <MultiLevelItem <T>, int>();

            for (int i = 0; i < domain.Count; ++i)
            {
                counts[domain[i]] = 0;
            }

            foreach (TransactionWithMultiLevelItems <T> transaction in database)
            {
                for (int i = 0; i < domain.Count; ++i)
                {
                    if (transaction.ContainsItem(domain[i]))
                    {
                        counts[domain[i]]++;
                    }
                }
            }

            List <MultiLevelItem <T> > freqItems = new List <MultiLevelItem <T> >();

            for (int i = 0; i < domain.Count; ++i)
            {
                if (counts[domain[i]] >= getMinItemSetSupport(new ItemSet <MultiLevelItem <T> >()
                {
                    domain[i]
                }))
                {
                    freqItems.Add(domain[i]);
                }
            }

            MultiLevelItem <T>[] FList = freqItems.ToArray();
            Array.Sort(FList, (i1, i2) =>
            {
                int comp = counts[i1].CompareTo(counts[i2]);
                return(-comp);
            });

            FPTree <MultiLevelItem <T> > fpTree = new FPTree <MultiLevelItem <T> >();

            int dbSize = 0;

            foreach (TransactionWithMultiLevelItems <T> transaction in database)
            {
                dbSize++;

                List <MultiLevelItem <T> > orderedFreqItems = new List <MultiLevelItem <T> >();
                for (int i = 0; i < FList.Length; ++i)
                {
                    if (transaction.ContainsItem(FList[i]))
                    {
                        orderedFreqItems.Add(FList[i]);
                    }
                }

                fpTree.AddOrderedFreqItems(orderedFreqItems);
            }

            fpTree.DbSize = dbSize;

            ItemSets <MultiLevelItem <T> > allItemSets = new ItemSets <MultiLevelItem <T> >();

            for (int i = FList.Length - 1; i >= 0; i--)
            {
                MultiLevelItem <T> item = FList[i];
                List <ItemSet <MultiLevelItem <T> > > fis = fpTree.MinePatternsContaining(item, (candidate) => { return(getMinItemSetSupport(candidate)); });
                fpTree.RemoveFromLeaves(item);
                allItemSets.AddRange(fis);
            }

            return(allItemSets);
        }