class Coletivo::Similarity::PearsonCorrelationStrategy
Public Instance Methods
similarity_between(one, other)
click to toggle source
# File lib/coletivo/similarity/pearson_correlation_strategy.rb, line 4 def similarity_between(one, other) shared = shared_items_between(one, other) prefs_one = preferences[one] prefs_other = preferences[other] return 0 if shared.empty? sum_prefs_one = sum_prefs_other = sum_squares_one = \ sum_squares_other = p_sum = 0.0 shared.each { |item| sum_prefs_one += prefs_one[item] sum_prefs_other += prefs_other[item] sum_squares_one += prefs_one[item] ** 2 sum_squares_other += prefs_other[item] ** 2 p_sum += prefs_one[item] * prefs_other[item] } total_shared = shared.size numerator = p_sum - (sum_prefs_one * sum_prefs_other / total_shared) den_one = sum_squares_one - (sum_prefs_one ** 2) / total_shared den_other = sum_squares_other - (sum_prefs_other ** 2) / total_shared denominator = Math.sqrt(den_one * den_other) denominator == 0 ? 0 : numerator / denominator end