class GaussianNaiveBayes::Classifier

Attributes

categories_probabilities[R]
categories_summaries[R]

Public Class Methods

new(categories_summaries, categories_probabilities) click to toggle source
# File lib/gaussian_naive_bayes/classifier.rb, line 4
def initialize(categories_summaries, categories_probabilities)
  @categories_summaries = categories_summaries
  @categories_probabilities = categories_probabilities
end

Public Instance Methods

all_ln_categories_probabilities(vector) click to toggle source
# File lib/gaussian_naive_bayes/classifier.rb, line 20
def all_ln_categories_probabilities(vector)
  @categories_summaries.keys.inject({}) do |map, category|
    map[category] = ln_category_probability(vector, category)
    map
  end
end
classify(vector) click to toggle source
# File lib/gaussian_naive_bayes/classifier.rb, line 9
def classify(vector)
  max_ln_category_probability(vector)[0]
end
ln_category_probability(vector, category) click to toggle source
# File lib/gaussian_naive_bayes/classifier.rb, line 27
def ln_category_probability(vector, category)
  sum = 0
  vector.each_with_index do |feature_value, feature|
    sum += ln_normal_distribution(feature_value, @categories_summaries[category][feature][:mean], @categories_summaries[category][feature][:standard_deviation])
  end
  sum + Math.log(@categories_probabilities[category])
end
ln_normal_distribution(x, mean, stdev) click to toggle source
# File lib/gaussian_naive_bayes/classifier.rb, line 35
def ln_normal_distribution(x, mean, stdev)
  Math.log(1.0/(stdev*Math.sqrt(2*Math::PI))) - ((x - mean)**2)/(2*(stdev**2))
end
max_ln_category_probability(vector) click to toggle source
# File lib/gaussian_naive_bayes/classifier.rb, line 13
def max_ln_category_probability(vector)
  all_ln_categories_probabilities(vector).
    to_a.
    sort_by{|ln_category_probability| -ln_category_probability[1]}.
    first
end