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