class MultinomialNaiveBayes::Learner

Public Class Methods

new(alpha = 1.0) click to toggle source
# File lib/multinomial_naive_bayes/learner.rb, line 3
def initialize(alpha = 1.0)
  @alpha = alpha
end

Public Instance Methods

categories_probabilities() click to toggle source
# File lib/multinomial_naive_bayes/learner.rb, line 39
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/multinomial_naive_bayes/learner.rb, line 23
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/multinomial_naive_bayes/learner.rb, line 30
def category_summary(feature_group)
  total_count_of_all_features =  feature_group.values.flatten.reduce(&:+)
  feature_group.inject({}) do |map, (feature, feature_values)|
    total_count_of_feature = feature_values.reduce(&:+)
    map[feature] = (total_count_of_feature + @alpha).to_f/(total_count_of_all_features + @number_of_features)
    map
  end
end
classifier() click to toggle source
# File lib/multinomial_naive_bayes/learner.rb, line 19
def classifier
  Classifier.new(categories_summaries, categories_probabilities)
end
train(vector, category) click to toggle source
# File lib/multinomial_naive_bayes/learner.rb, line 7
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
  @number_of_features ||= vector.length
  @category_to_num_instances ||= Hash.new(0)
  @category_to_num_instances[category] += 1
end