class FpGrowth::Miner::Miner
Attributes
pattern_set[R]
Public Class Methods
new()
click to toggle source
# File lib/fpgrowth/miner.rb, line 29 def initialize @pattern_set = [] end
Public Instance Methods
build_conditional_tree(tree=FpTree.new, item)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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