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