Class: FpGrowth::Miner::Miner

Inherits:
Object
  • Object
show all
Defined in:
lib/fpgrowth/miner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMiner

Returns a new instance of Miner.



29
30
31
# File 'lib/fpgrowth/miner.rb', line 29

def initialize
  @pattern_set = []
end

Instance Attribute Details

#pattern_setObject (readonly)

Returns the value of attribute pattern_set.



27
28
29
# File 'lib/fpgrowth/miner.rb', line 27

def pattern_set
  @pattern_set
end

Instance Method Details

#build_conditional_tree(tree = FpTree.new, item) ⇒ Object



33
34
35
36
# File 'lib/fpgrowth/miner.rb', line 33

def build_conditional_tree(tree=FpTree.new, item)
  pattern_base = PatternBaseExtractor.new(tree, item).execute()
  tree = ConditionalTreeBuilder.new(pattern_base, tree.threshold).execute()
end

#fp_growth(fp_tree, pattern_alpha = Pattern.new(), rank = 0) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/fpgrowth/miner.rb', line 39

def fp_growth(fp_tree, pattern_alpha=Pattern.new(), rank=0)
  if fp_tree.single_path?
    # Fin de la récursivité
    for combination in fp_tree.combinations
      # generate pattern_beta U pattern_alpha
      # with support = minimum support of nodes in pattern_beta
      pattern_beta = pattern_alpha.clone
      for node in combination
        pattern_beta << node
      end
      @pattern_set << pattern_beta
      #puts "Pattern extracted : #{pattern_beta.content.to_s} - #{pattern_beta.support}"
    end
  else
    for item in fp_tree.supports.keys
      # generate pattern_beta = item U pattern_alpha with support = item.support
      # construct pattern_beta's conditional pattern base and then pattern_beta's conditionnal FpTree
      pattern_beta = pattern_alpha.clone
      pattern_beta.content << item
      pattern_beta.support= fp_tree.supports[item]
      tree_beta = build_conditional_tree(fp_tree, item)
      fp_growth(tree_beta, pattern_beta, rank + 1) unless tree_beta == nil or tree_beta.empty?
    end
  end
end

#top_down_fp_growth(header_table, pattern_alpha = Pattern.new(), min_support = 0) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/fpgrowth/miner.rb', line 65

def top_down_fp_growth(header_table, pattern_alpha=Pattern.new(), min_support=0)

  if header_table.instance_of? FpTree::FpTree
    header_table = header_table.header_table
  end


  # For each row of header_table
  for row in header_table.keys
    # If Support of header_table > min_support
    if header_table.count[row] > min_support then
      # output pattern extended with row.item
      pattern_beta = Pattern.new(pattern_alpha.content + [row], header_table.count[row])
      @pattern_set << pattern_beta
      # puts "Pattern extracted : #{pattern_beta.content.to_s} - #{pattern_beta.support}"
      # Build new Header Table
      header_table_new = FpTree::HeaderTable.build(row, header_table)
      # Mine extended pattern, new header table
      top_down_fp_growth(header_table_new, pattern_beta)
    end
  end

end