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)); }
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); }