class Apriori::ItemSet

Attributes

min_confidence[R]
min_support[R]
transactions[R]

Public Class Methods

new(transactions) click to toggle source
# File lib/apriori/item_set.rb, line 5
def initialize(transactions)
  @transactions = transactions
end

Public Instance Methods

confidence(set1, set2) click to toggle source
# File lib/apriori/item_set.rb, line 30
def confidence set1, set2
  (support(set1 + set2) / support(set1)) * 100
end
count_frequency(set) click to toggle source
# File lib/apriori/item_set.rb, line 34
def count_frequency set
  transactions.map do |items|
    contains_all?(items, set)
  end.reject { |item| item == false }.size
end
create_association_rules(min_confidence) click to toggle source
# File lib/apriori/item_set.rb, line 21
def create_association_rules min_confidence
  make_association_rules unless frequent_item_sets.empty?
  association_rules.select{ |name, rule| rule >= min_confidence }
end
create_frequent_item_sets(min_support) click to toggle source
# File lib/apriori/item_set.rb, line 15
def create_frequent_item_sets min_support
  @min_support = min_support
  make_item_sets
  frequent_item_sets
end
mine(min_support=0, min_confidence=0) click to toggle source
# File lib/apriori/item_set.rb, line 9
def mine(min_support=0, min_confidence=0)
  @min_support, @min_confidence, @candidates = min_support, min_confidence, nil
  create_frequent_item_sets(min_support)
  create_association_rules(min_confidence)
end
support(item) click to toggle source
# File lib/apriori/item_set.rb, line 26
def support item
  (count_frequency(item).to_f / transactions.size) * 100
end

Private Instance Methods

association_rules() click to toggle source
# File lib/apriori/item_set.rb, line 65
def association_rules
  @association_rules ||= {}
  @association_rules[min_support] ||= {}
end
candidates() click to toggle source
# File lib/apriori/item_set.rb, line 42
def candidates
  @candidates ||= transactions.flatten.uniq.map { |item| [item] }
end
contains_all?(set, subset) click to toggle source
# File lib/apriori/item_set.rb, line 75
def contains_all? set, subset
  set.to_set.superset? subset.to_set
end
frequent_item_sets() click to toggle source
# File lib/apriori/item_set.rb, line 70
def frequent_item_sets
  @frequent_item_sets ||= {}
  @frequent_item_sets[min_support] ||= []
end
make_association_rules() click to toggle source
# File lib/apriori/item_set.rb, line 54
def make_association_rules
  frequent_item_sets.each do |freq_lists|
    freq_lists.sets.each do |set|
      List.create_subsets(set).each do |combo|
        rule_name = "#{combo.join(',')}=>#{(set.flatten - combo.flatten).join(',')}"
        association_rules[rule_name] ||= confidence(combo.flatten, (set.flatten - combo.flatten))
      end
    end
  end
end
make_item_sets() click to toggle source
# File lib/apriori/item_set.rb, line 46
def make_item_sets
  while candidates.any?
    list = List.new(new_candidates)
    frequent_item_sets << list
    @candidates = list.make_candidates
  end
end
new_candidates() click to toggle source
# File lib/apriori/item_set.rb, line 79
def new_candidates
  candidates.reject{ |item| support(item) < min_support }
end