class RecommEngine::PearsonCalculator

Attributes

_number_of_hits[R]
_similar_items[R]
sum_of_comparate_scores[R]
sum_of_scores_product[R]
sum_of_sq_comparate_scores[R]
sum_of_sq_subject_scores[R]
sum_of_subject_scores[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method RecommEngine::Calculator::new
# File lib/recommengine/pearson_calculator.rb, line 5
def initialize(*args)
  super
  @sum_of_subject_scores = @sum_of_comparate_scores = @sum_of_sq_subject_scores = @sum_of_sq_comparate_scores = @sum_of_scores_product = 0
end

Public Instance Methods

calc() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 10
def calc
  return 0 if number_of_hits < 2
  sum_all_scores
  perform_equation
end

Private Instance Methods

denominator() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 48
def denominator
  @_denominator ||= Math.sqrt((sum_of_sq_subject_scores - (sum_of_subject_scores**2.0)/number_of_hits)*(sum_of_sq_comparate_scores - (sum_of_comparate_scores**2.0)/number_of_hits))
end
number_of_hits() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 22
def number_of_hits
  @_number_of_hits ||= similar_items.length
end
numerator() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 44
def numerator
  sum_of_scores_product - (sum_of_subject_scores * sum_of_comparate_scores/number_of_hits)
end
perform_equation() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 40
def perform_equation
  denominator.zero? ? 0 : numerator/denominator
end
similar_items() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 18
def similar_items
  @_similar_items ||= data[subject].map{ |k, v| k if data[comparate].keys.include?(k) }.compact
end
sum_all_scores() click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 26
def sum_all_scores
  similar_items.each{ |item| sum_scores_for(item) }
end
sum_scores_for(item) click to toggle source
# File lib/recommengine/pearson_calculator.rb, line 30
def sum_scores_for(item)
  subject_val = data[subject][item]
  comparate_val = data[comparate][item]
  @sum_of_subject_scores += subject_val
  @sum_of_comparate_scores += comparate_val
  @sum_of_sq_subject_scores += subject_val**2.0
  @sum_of_sq_comparate_scores += comparate_val**2.0
  @sum_of_scores_product += subject_val * comparate_val
end