Пример #1
0
        private Apriori GetNextItemset()
        {
            Apriori retObj = new Apriori(K + 1);

            retObj.GetCandidateSet(this); // this扩展到retObj的候选项集
            retObj.CalSupCount();
            return(retObj);
        }
Пример #2
0
        static public List <Apriori> GetAllSets()
        {
            List <Apriori> allSets = new List <Apriori>();
            Apriori        set     = new Apriori(1);

            set.GetFirstItemset();
            while (set.freqSet.freqSet.Count > 0)
            {
                Console.WriteLine("频繁" + set.K + "项集个数:" + set.freqSet.freqSet.Count);
                allSets.Add(set);
                set = set.GetNextItemset();
            }
            return(allSets);
        }
Пример #3
0
 private void GetCandidateSet(Apriori SrcSet)
 {
     // 组合得到K+1集
     // 组合方法是两个项0~k-2的元素相等的话,那么就能产生新项{0~k-2,第一项k-1,第二项k-1}
     // 找出频繁项集内的两个项尝试组合
     for (int i = 0; i < SrcSet.freqSet.freqSet.Count; ++i)
     {
         for (int j = i + 1; j < SrcSet.freqSet.freqSet.Count; ++j)
         {
             // 对于每个频繁项集内的元素
             for (int k = 0; k < SrcSet.K; ++k)
             {
                 // 如果两个项第k个元素相等
                 if (SrcSet.freqSet.freqSet[i][k] != SrcSet.freqSet.freqSet[j][k])
                 {
                     // 如果k不是最后一个,直接跳过
                     if (k != SrcSet.K - 1)
                     {
                         break;
                     }
                     else
                     {
                         // 组合的结果unit
                         List <int> unit = new List <int>();
                         // 组合生成候选项集的项
                         for (int g = 0; g < SrcSet.K + 1; ++g)
                         {
                             if (g != SrcSet.K)
                             {
                                 unit.Add(SrcSet.freqSet.freqSet[i][g]);
                             }
                             else
                             {
                                 unit.Add(SrcSet.freqSet.freqSet[j][g - 1]);
                             }
                         }
                         if (!SrcSet.IsInFreq(unit))
                         {
                             freqSet.freqSet.Add(unit);
                             freqSet.supCount.Add(0);
                         }
                     }
                 }
             }
         }
     }
 }
Пример #4
0
        static void AP(string inPath, int useMinSup)
        {
            // 设置最小支持度
            Apriori.minSup = useMinSup;
            // 求得频繁项集
            DateTime       time1   = DateTime.Now;
            List <Apriori> allSets = Apriori.GetAllSets();
            DateTime       time2   = DateTime.Now;
            string         a       = "花费时间:" + Environment.NewLine +
                                     "分钟:" + (time2 - time1).TotalMinutes.ToString() + Environment.NewLine +
                                     "秒:" + (time2 - time1).TotalSeconds.ToString() + Environment.NewLine;
            // 写入文件
            string aprioriOutPath = inPath.Substring(0, inPath.LastIndexOf(@".")) + "_minsup_" + useMinSup.ToString() + @".txt";

            DataHelper.WriteToFile(aprioriOutPath, allSets);
            // 展示支持度最高的频繁项集
            Apriori.ShowMaxSup(allSets);
            Console.Write(a);
        }