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