Class: Ai4r::Classifiers::MultilayerPerceptron
- Inherits:
-
Classifier
- Object
- Classifier
- Ai4r::Classifiers::MultilayerPerceptron
- Defined in:
- lib/ai4r/classifiers/multilayer_perceptron.rb
Overview
Introduction
The idea behind the MultilayerPerceptron classifier is to train a Multilayer Perceptron neural network with the provided examples, and predict the class for new data items.
Parameters
Use class method get_parameters_info to obtain details on the algorithm parameters. Use set_parameters to set values for this parameters. See Parameterizable module documentation.
-
:network_class => Neural network implementation class. By default: Ai4r::NeuralNetwork::Backpropagation.
-
:network_parameters => Parameters to be forwarded to the back end neural ntework.
-
:hidden_layers => Hidden layer structure. E.g. [8, 6] will generate 2 hidden layers with 8 and 6 neurons each. By default []
-
:training_iterations => How many times the training should be repeated. By default: 500.
:active_node_value => Default: 1 :inactive_node_value => Default: 1
Constant Summary collapse
- TRAINING_ITERATIONS =
500
Instance Attribute Summary collapse
-
#class_value ⇒ Object
readonly
Returns the value of attribute class_value.
-
#data_set ⇒ Object
readonly
Returns the value of attribute data_set.
-
#domains ⇒ Object
readonly
Returns the value of attribute domains.
-
#network ⇒ Object
readonly
Returns the value of attribute network.
Instance Method Summary collapse
-
#build(data_set) ⇒ Object
Build a new MultilayerPerceptron classifier.
-
#eval(data) ⇒ Object
You can evaluate new data, predicting its class.
-
#get_rules ⇒ Object
Multilayer Perceptron Classifiers cannot generate human-readable rules.
- #initialize ⇒ Object constructor
Methods included from Data::Parameterizable
#get_parameters, included, #set_parameters
Constructor Details
#initialize ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 57 def initialize super() @network_class = Ai4r::NeuralNetwork::Backpropagation @hidden_layers = [] @training_iterations = TRAINING_ITERATIONS @network_parameters = {} @active_node_value = 1 @inactive_node_value = 0 end |
Instance Attribute Details
#class_value ⇒ Object (readonly)
Returns the value of attribute class_value.
41 42 43 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 41 def class_value @class_value end |
#data_set ⇒ Object (readonly)
Returns the value of attribute data_set.
41 42 43 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 41 def data_set @data_set end |
#domains ⇒ Object (readonly)
Returns the value of attribute domains.
41 42 43 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 41 def domains @domains end |
#network ⇒ Object (readonly)
Returns the value of attribute network.
41 42 43 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 41 def network @network end |
Instance Method Details
#build(data_set) ⇒ Object
Build a new MultilayerPerceptron classifier. You must provide a DataSet instance as parameter. The last attribute of each item is considered as the item class.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 72 def build(data_set) data_set.check_not_empty @data_set = data_set @domains = @data_set.build_domains.collect(&:to_a) @outputs = @domains.last.length @inputs = 0 @domains[0...-1].each { |domain| @inputs += domain.length } @structure = [@inputs] + @hidden_layers + [@outputs] @network = @network_class.new @structure inputs = [] outputs = [] data_set.data_items.each do |data_item| inputs << data_to_input(data_item[0...-1]) outputs << data_to_output(data_item.last) end @network.train_epochs(inputs, outputs, epochs: @training_iterations, batch_size: 1) self end |
#eval(data) ⇒ Object
You can evaluate new data, predicting its class. e.g.
classifier.eval(['New York', '<30', 'F']) # => 'Y'
98 99 100 101 102 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 98 def eval(data) input_values = data_to_input(data) output_values = @network.eval(input_values) @domains.last[get_max_index(output_values)] end |
#get_rules ⇒ Object
Multilayer Perceptron Classifiers cannot generate human-readable rules.
107 108 109 |
# File 'lib/ai4r/classifiers/multilayer_perceptron.rb', line 107 def get_rules "raise 'Neural networks classifiers do not generate human-readable rules.'" end |