예제 #1
0
파일: Apriori.cs 프로젝트: PHParis/LOD-CM
        public virtual ItemSets <T> MinePatterns(GetCountHandle updateItemSetSupport, GetMinSupportHandle getMinItemSetSupport, IList <T> domain)
        {
            ItemSets <T>        Fk         = new ItemSets <T>();
            List <ItemSet <T> > itemsetSup = new List <ItemSet <T> >();

            for (int i = 0; i < domain.Count; ++i)
            {
                T           item    = domain[i];
                ItemSet <T> itemset = new ItemSet <T>()
                {
                    item
                };
                itemset.TransactionCount = 0;
                itemsetSup.Add(itemset);
            }

            updateItemSetSupport(itemsetSup);
            foreach (ItemSet <T> itemset in itemsetSup)
            {
                if (itemset.Support >= getMinItemSetSupport(itemset))
                {
                    Fk.Add(itemset);
                }
            }

            int          k = 1;
            ItemSets <T> allFrequentItemSets = new ItemSets <T>();

            allFrequentItemSets.AddRange(Fk);
            while (Fk.Count > 0)
            {
                ItemSets <T> Fkp1 = new ItemSets <T>();

                //do self-join
                for (int i = 0; i < Fk.Count; ++i)
                {
                    for (int j = 0; j < Fk.Count; ++j)
                    {
                        if (i == j)
                        {
                            continue;
                        }
                        bool canJoin = true;

                        for (int l = 0; l < k - 1; ++l)
                        {
                            if (Fk[i][l].CompareTo(Fk[j][l]) != 0)
                            {
                                canJoin = false;
                                break;
                            }
                        }
                        if (canJoin)
                        {
                            if (CanJoin(Fk[i], Fk[j][k - 1]))
                            {
                                ItemSet <T> c = Fk[i].Clone();
                                c.Add(Fk[j][k - 1]);
                                Fkp1.Add(c);
                            }
                        }
                    }
                }


                updateItemSetSupport(Fkp1);

                List <ItemSet <T> > fis = new List <ItemSet <T> >();
                foreach (ItemSet <T> itemset in Fkp1)
                {
                    if (itemset.Support >= getMinItemSetSupport(itemset))
                    {
                        fis.Add(itemset);
                    }
                }

                allFrequentItemSets.AddRange(fis);

                Fk.Clear();
                Fk.AddRange(fis);
                k++;
            }

            return(allFrequentItemSets);
        }
예제 #2
0
파일: Apriori.cs 프로젝트: PHParis/LOD-CM
 public virtual ItemSets <T> MinePatterns(GetCountHandle UpdateItemSetSupport, double minSup, IList <T> domain)
 {
     return(MinePatterns(UpdateItemSetSupport, (itemset) => { return minSup; }, domain));
 }