Example #1
0
        protected override Itemset[] ScanDbAndCountCandidatesSupport(Itemset[] candidates)
        {
            foreach (var transaction in _db.Transactions)
            {
                if (IsReducted(transaction))
                {
                    continue;
                }

                bool containsCandidates = false;

                foreach (var candidate in candidates)
                {
                    if (ItemsetHelper.IsSubset(transaction.Items, candidate.Items))
                    {
                        candidate.Support++;
                        containsCandidates = true;
                    }
                }

                if (containsCandidates)
                {
                    continue;
                }

                ReduceTransaction(transaction);
            }

            return(candidates);
        }
Example #2
0
        protected virtual Itemset[] PruneCandidatesByAprioriSlim(UInt32[][] candidatesItemset, Itemset[] frequentItemset)
        {
            var frequentCandidates = new List <Itemset>();
            var frequent           = new HashSet <UInt32[]>(frequentItemset.Select(i => i.Items), new ItemsEqualityComparer());

            for (int i = 0; i < candidatesItemset.Length; i++)
            {
                bool hasAllSubItemsetFrequent = true;


                // TODO: Lazy generating, we can stop generating subitemset if we know that an one is not frequent.
                List <UInt32[]> subItemsets = ItemsetHelper.GenerateOneLevelSubItemsets(candidatesItemset[i]);

                for (int j = 0; j < subItemsets.Count; j++)
                {
                    if (frequent.Contains(subItemsets[j]))
                    {
                        continue;
                    }

                    hasAllSubItemsetFrequent = false;

                    break;
                }

                if (hasAllSubItemsetFrequent)
                {
                    frequentCandidates.Add(new Itemset(candidatesItemset[i]));
                }
            }

            return(frequentCandidates.ToArray());
        }
Example #3
0
        protected override Itemset[] ScanDbAndCountCandidatesSupport(Itemset[] candidates)
        {
            if (candidates.Length == 0)
            {
                return(candidates);
            }

            Dictionary <UInt32[], Itemset> candidatesDictionary = CreateCandidatesDictionary(candidates);

            foreach (var transaction in _db.Transactions)
            {
                List <UInt32[]> transactionsSubItemsets = ItemsetHelper.GenerateSubItemsets(transaction.Items, candidates[0].Length);

                for (int i = 0; i < transactionsSubItemsets.Count; i++)
                {
                    Itemset itemset;

                    if (candidatesDictionary.TryGetValue(transactionsSubItemsets[i], out itemset))
                    {
                        itemset.Support++;
                    }
                }
            }

            return(candidates);
        }
Example #4
0
 private void CountSupportForCandidatesInRange(Tuple <int, int> range)
 {
     for (int i = range.Item1; i < range.Item2; i++)
     {
         if (ItemsetHelper.IsSubset(_actualTransaction.Items, _candidates[i].Items))
         {
             _candidates[i].Support++;
         }
     }
 }
Example #5
0
        public void Can_Generate_SubItemset_From_2_Length_Itemset()
        {
            Itemset itemset = new Itemset(new uint[] { 0, 1 });

            Itemset[] result = ItemsetHelper.GenerateOneLevelSubItemsets(itemset).ToArray();

            Assert.AreEqual(2, result.Length);

            Assert.AreEqual(1, result[0].Length);
            Assert.AreEqual(1, result[1].Length);

            Assert.AreEqual(result[0][0], 0);
            Assert.AreEqual(result[1][0], 1);
        }
Example #6
0
        protected virtual Itemset[] ScanDbAndCountCandidatesSupport(Itemset[] candidates)
        {
            foreach (var transaction in _db.Transactions)
            {
                foreach (var candidate in candidates)
                {
                    if (ItemsetHelper.IsSubset(transaction.Items, candidate.Items))
                    {
                        candidate.Support++;
                    }
                }
            }

            return(candidates);
        }
Example #7
0
        public void Can_Calculate_SubItemset()
        {
            bool result = ItemsetHelper.IsSubset(Itemset.Create(1), Itemset.Create(2));

            Assert.AreEqual(false, result);

            result = ItemsetHelper.IsSubset(Itemset.Create(1, 2), Itemset.Create(2));
            Assert.AreEqual(true, result);

            result = ItemsetHelper.IsSubset(Itemset.Create(1, 2, 3), Itemset.Create(2));
            Assert.AreEqual(true, result);

            result = ItemsetHelper.IsSubset(Itemset.Create(1, 2, 3), Itemset.Create(2, 3));
            Assert.AreEqual(true, result);

            result = ItemsetHelper.IsSubset(Itemset.Create(1, 2, 3), Itemset.Create(2, 3, 4));
            Assert.AreEqual(false, result);
        }
Example #8
0
        public void Can_Generate_All_3_Length_SubItemsets()
        {
            Itemset itemset = new Itemset(new uint[] { 1, 2, 3, 5, 6 });

            var result = ItemsetHelper.GenerateSubItemsets(itemset.Items, 3);

            Assert.AreEqual(10, result.Count);

            // Length
            Assert.AreEqual(3, result[0].Length);
            Assert.AreEqual(3, result[9].Length);

            // SubItemsets
            Assert.AreEqual(result[0][0], 1);
            Assert.AreEqual(result[0][1], 2);
            Assert.AreEqual(result[0][2], 3);

            Assert.AreEqual(result[9][0], 3);
            Assert.AreEqual(result[9][1], 5);
            Assert.AreEqual(result[9][2], 6);
        }
Example #9
0
        public void Can_Enumerate_All_3_Length_SubItemsets()
        {
            Itemset itemset = new Itemset(new uint[] { 1, 2, 3, 5, 6 });

            UInt32[][] result = ItemsetHelper.EnumerateSubItemsets(itemset.Items, 3).ToArray();

            Assert.AreEqual(10, result.Length);

            // Length
            Assert.AreEqual(3, result[0].Length);
            Assert.AreEqual(3, result[9].Length);

            // SubItemsets
            Assert.AreEqual(result[0][0], 1);
            Assert.AreEqual(result[0][1], 2);
            Assert.AreEqual(result[0][2], 3);

            Assert.AreEqual(result[9][0], 3);
            Assert.AreEqual(result[9][1], 5);
            Assert.AreEqual(result[9][2], 6);
        }
Example #10
0
        public void Can_Generate_SubItemset_From_3_Length_Itemset()
        {
            Itemset itemset = Itemset.Create(0, 1, 2);

            Itemset[] result = ItemsetHelper.GenerateOneLevelSubItemsets(itemset).ToArray();

            Assert.AreEqual(3, result.Length);

            Assert.AreEqual(2, result[0].Length);
            Assert.AreEqual(2, result[1].Length);
            Assert.AreEqual(2, result[2].Length);

            Assert.AreEqual(result[0][0], 0);
            Assert.AreEqual(result[0][1], 1);

            Assert.AreEqual(result[1][0], 0);
            Assert.AreEqual(result[1][1], 2);

            Assert.AreEqual(result[2][0], 1);
            Assert.AreEqual(result[2][1], 2);
        }