Files

Ai4r::Classifiers::MultilayerPerceptron

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.

:active_node_value => Default: 1 :inactive_node_value => Default: 1

Attributes

class_value[R]
data_set[R]
domains[R]
network[R]

Public Class Methods

new() click to toggle source
# File lib/ai4r/classifiers/multilayer_perceptron.rb, line 54
def initialize
  @network_class = Ai4r::NeuralNetwork::Backpropagation
  @hidden_layers = []
  @training_iterations = 500
  @network_parameters = {}
  @active_node_value = 1
  @inactive_node_value = 0
end

Public Instance Methods

build(data_set) click to toggle source

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
eval(data) click to toggle source

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
get_rules() click to toggle source

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

Protected Instance Methods

data_to_input(data_item) click to toggle source
# 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
data_to_output(data_item) click to toggle source
# 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
get_max_index(output_values) click to toggle source
# 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

[Validate]

Generated with the Darkfish Rdoc Generator 2.