Classifier
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.
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: 1000.
:active_node_value => Default: 1 :inactive_node_value => Default: 1
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.
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 66 def build(data_set) data_set.check_not_empty @data_set = data_set @domains = @data_set.build_domains.collect {|domain| domain.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 @training_iterations.times do data_set.data_items.each do |data_item| input_values = data_to_input(data_item[0...-1]) output_values = data_to_output(data_item.last) @network.train(input_values, output_values) end end return self end
You can evaluate new data, predicting its class. e.g.
classifier.eval(['New York', '<30', 'F']) # => 'Y'
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 88 def eval(data) input_values = data_to_input(data) output_values = @network.eval(input_values) return @domains.last[get_max_index(output_values)] end
Multilayer Perceptron Classifiers cannot generate human-readable rules.
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 96 def get_rules return "raise 'Neural networks classifiers do not generate human-readable rules.'" end
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 102 def data_to_input(data_item) input_values = Array.new(@inputs, @inactive_node_value) accum_index = 0 data_item.each_index do |att_index| att_value = data_item[att_index] domain_index = @domains[att_index].index(att_value) input_values[domain_index + accum_index] = @active_node_value accum_index = @domains[att_index].length end return input_values end
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 114 def data_to_output(data_item) output_values = Array.new(@outputs, @inactive_node_value) output_values[@domains.last.index(data_item)] = @active_node_value return output_values end
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 120 def get_max_index(output_values) max_value = @inactive_node_value max_index = 0 output_values.each_index do |output_index| if max_value < output_values[output_index] max_value = output_values[output_index] max_index = output_index end end return max_index end
Generated with the Darkfish Rdoc Generator 2.