class Mirlo::Perceptron

Attributes

learning_rate[RW]

Public Class Methods

new(learning_rate = DEFAULT_LEARNING_RATE) click to toggle source
# File lib/mirlo/classifiers/perceptron.rb, line 5
def initialize(learning_rate = DEFAULT_LEARNING_RATE)
  @learning_rate = learning_rate
end

Public Instance Methods

activations(inputs = train_set.input_matrix) click to toggle source
# File lib/mirlo/classifiers/perceptron.rb, line 9
def activations(inputs = train_set.input_matrix)
  (inputs * weights).collect { |v| v > 0 ? 1 : 0 }
end
classify(input) click to toggle source
# File lib/mirlo/classifiers/perceptron.rb, line 13
def classify(input)
  input = SampleWithBias.new(features: input) unless input.is_a?(Mirlo::Sample)

  input_vector = Matrix[input.features]
  result = (input_vector * weights).row(0).to_a
  result.collect { |v| v > 0 ? 1 : 0 }
end
iterate() click to toggle source
# File lib/mirlo/classifiers/perceptron.rb, line 25
def iterate
  @weights = weights + learning_rate * weight_updates
end
weight_updates() click to toggle source
# File lib/mirlo/classifiers/perceptron.rb, line 21
def weight_updates
  train_set.input_matrix.transpose * (train_set.target_matrix - activations)
end
weights() click to toggle source
# File lib/mirlo/classifiers/perceptron.rb, line 29
def weights
  @weights ||= Matrix.build(train_set.num_features, train_set.num_outputs) { rand(-0.05..0.05) }
end