Class: Apriori::Algorithm
- Inherits:
-
Object
- Object
- Apriori::Algorithm
- Defined in:
- lib/apriori/algorithm.rb
Instance Attribute Summary collapse
-
#min_confidence ⇒ Object
readonly
Returns the value of attribute min_confidence.
-
#min_support ⇒ Object
readonly
Returns the value of attribute min_support.
Instance Method Summary collapse
-
#analyze(transactions) ⇒ Object
transactions: string[].
-
#initialize(min_support = 0.15, min_confidence = 0.6) ⇒ Algorithm
constructor
A new instance of Algorithm.
Constructor Details
#initialize(min_support = 0.15, min_confidence = 0.6) ⇒ Algorithm
Returns a new instance of Algorithm.
14 15 16 17 |
# File 'lib/apriori/algorithm.rb', line 14 def initialize(min_support = 0.15, min_confidence = 0.6) @min_support = min_support @min_confidence = min_confidence end |
Instance Attribute Details
#min_confidence ⇒ Object (readonly)
Returns the value of attribute min_confidence.
12 13 14 |
# File 'lib/apriori/algorithm.rb', line 12 def min_confidence @min_confidence end |
#min_support ⇒ Object (readonly)
Returns the value of attribute min_support.
12 13 14 |
# File 'lib/apriori/algorithm.rb', line 12 def min_support @min_support end |
Instance Method Details
#analyze(transactions) ⇒ Object
transactions: string[]
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/apriori/algorithm.rb', line 20 def analyze(transactions) # AnalysisResult frequencies = {} # {item_set: count} frequent_item_sets = {} # {item_set_size: FrequentItemSet[]} one_element_item_sets = to_one_element_item_sets(transactions) # string[][] one_c_item_sets = find_item_sets_min_support_satisfied( one_element_item_sets, transactions, min_support, frequencies) # FrequentItemSet[] current_l_item_sets = one_c_item_sets # FrequentItemSet[] item_set_size = 1 while current_l_item_sets.length != 0 frequent_item_sets[item_set_size] = current_l_item_sets joined_sets = to_fixed_size_joined_sets(current_l_item_sets.map { |_| _.item_set }, item_set_size + 1) current_l_item_sets = find_item_sets_min_support_satisfied(joined_sets, transactions, min_support, frequencies) item_set_size += 1 end found_sub_sets = [] # string[][] association_rules = [] # AssociationRule[] frequent_item_sets.each do |item_set_size, item_sets| item_sets = item_sets.map { |_| _.item_set } next if item_sets.length == 0 || item_sets[0].length <= 1 item_sets.each do |item_set| to_all_sub_sets(item_set).each do |subset_item_set| diff_item_set = ((item_set - subset_item_set) + (subset_item_set - item_set)).uniq if diff_item_set.length > 0 item_support = calculate_support(item_set, frequencies, transactions) subset_support = calculate_support(subset_item_set, frequencies, transactions) confidence = item_support / subset_support if !is_the_rule_already_found(found_sub_sets, subset_item_set) && confidence >= min_confidence found_sub_sets << subset_item_set association_rules << Apriori::AssociationRule.new(subset_item_set, diff_item_set, confidence) end end end end end Apriori::AnalysisResult.new(frequent_item_sets, association_rules) end |