Class: Ai4r::Classifiers::Hyperpipes
- Inherits:
-
Classifier
- Object
- Classifier
- Ai4r::Classifiers::Hyperpipes
- Defined in:
- lib/ai4r/classifiers/hyperpipes.rb
Overview
Introduction
A fast classifier algorithm, created by Lucio de Souza Coelho and Len Trigg.
Instance Attribute Summary collapse
-
#data_set ⇒ Object
readonly
Returns the value of attribute data_set.
-
#pipes ⇒ Object
readonly
Returns the value of attribute pipes.
Instance Method Summary collapse
-
#build(data_set) ⇒ Object
Build a new Hyperpipes classifier.
-
#eval(data) ⇒ Object
You can evaluate new data, predicting its class.
-
#get_rules ⇒ Object
This method returns the generated rules in ruby code.
Methods included from Data::Parameterizable
#get_parameters, included, #set_parameters
Instance Attribute Details
#data_set ⇒ Object (readonly)
Returns the value of attribute data_set.
25 26 27 |
# File 'lib/ai4r/classifiers/hyperpipes.rb', line 25 def data_set @data_set end |
#pipes ⇒ Object (readonly)
Returns the value of attribute pipes.
25 26 27 |
# File 'lib/ai4r/classifiers/hyperpipes.rb', line 25 def pipes @pipes end |
Instance Method Details
#build(data_set) ⇒ Object
Build a new Hyperpipes classifier. You must provide a DataSet instance as parameter. The last attribute of each item is considered as the item class.
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ai4r/classifiers/hyperpipes.rb', line 30 def build(data_set) data_set.check_not_empty @data_set = data_set @domains = data_set.build_domains @pipes = {} @domains.last.each {|cat| @pipes[cat] = build_pipe(@data_set)} @data_set.data_items.each {|item| update_pipe(@pipes[item.last], item) } return self end |
#eval(data) ⇒ Object
You can evaluate new data, predicting its class. e.g.
classifier.eval(['New York', '<30', 'F']) # => 'Y'
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/ai4r/classifiers/hyperpipes.rb', line 45 def eval(data) votes = Hash.new {0} @pipes.each do |category, pipe| pipe.each_with_index do |bounds, i| if data[i].is_a? Numeric votes[category]+=1 if data[i]>=bounds[:min] && data[i]<=bounds[:max] else votes[category]+=1 if bounds[data[i]] end end end return votes.to_a.max {|x, y| x.last <=> y.last}.first end |
#get_rules ⇒ Object
This method returns the generated rules in ruby code. e.g.
classifier.get_rules
# => if age_range == '<30' then marketing_target = 'Y'
elsif age_range == '[30-50)' then marketing_target = 'N'
elsif age_range == '[50-80]' then marketing_target = 'N'
end
It is a nice way to inspect induction results, and also to execute them:
marketing_target = nil
eval classifier.get_rules
puts marketing_target
# => 'Y'
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/ai4r/classifiers/hyperpipes.rb', line 73 def get_rules rules = [] rules << "votes = Hash.new {0}" data = @data_set.data_items.first labels = @data_set.data_labels.collect {|l| l.to_s} @pipes.each do |category, pipe| pipe.each_with_index do |bounds, i| rule = "votes['#{category}'] += 1 " if data[i].is_a? Numeric rule += "if #{labels[i]} >= #{bounds[:min]} && #{labels[i]} <= #{bounds[:max]}" else rule += "if #{bounds.inspect}[#{labels[i]}]" end rules << rule end end rules << "#{labels.last} = votes.to_a.max {|x, y| x.last <=> y.last}.first" return rules.join("\n") end |