class GaussianNaiveBayes::Learner

Public Instance Methods

average(numbers) click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 34
def average(numbers)
  numbers.reduce(&:+).to_f/numbers.length
end
categories_probabilities() click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 46
def categories_probabilities
  total_instances = @category_to_num_instances.values.reduce(&:+)
  @category_to_num_instances.inject({}) do |map, (category, num_instances)|
    map[category] = num_instances.to_f/total_instances
    map
  end
end
categories_summaries() click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 18
def categories_summaries
  @category_to_feature_group.inject({}) do |map, (category, feature_group)|
    map[category] = category_summary(feature_group)
    map
  end
end
category_summary(feature_group) click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 25
def category_summary(feature_group)
  feature_group.inject({}) do |map, (feature, feature_values)|
    map[feature] = {}
    map[feature][:mean] = average(feature_values)
    map[feature][:standard_deviation] = standard_deviation(feature_values)
    map
  end
end
classifier() click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 14
def classifier
  Classifier.new(categories_summaries, categories_probabilities)
end
standard_deviation(numbers) click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 38
def standard_deviation(numbers)
  mean = average(numbers)
  variance = numbers.inject(0) do |sum, number|
    sum += (number - mean)**2
  end.to_f/(numbers.length - 1)
  Math.sqrt(variance)
end
train(vector, category) click to toggle source
# File lib/gaussian_naive_bayes/learner.rb, line 3
def train(vector, category)
  @category_to_feature_group ||= {}
  @category_to_feature_group[category] ||= {}
  vector.each_with_index do |feature_value, feature|
    @category_to_feature_group[category][feature] ||= []
    @category_to_feature_group[category][feature] << feature_value
  end
  @category_to_num_instances ||= Hash.new(0)
  @category_to_num_instances[category] += 1
end