Created
October 27, 2017 18:54
-
-
Save PetarIvancevic/37c31708df227c71e12d1d529be3aa3e to your computer and use it in GitHub Desktop.
Pearson correlation coefficient
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function squaredNum (review) { | |
return Math.pow(review.rating, 2) | |
} | |
function pcc (user1, user2) { | |
const n = _.size(user1.reviews) | |
if (n === 0) { | |
return n | |
} | |
const user1MovieScoreSum = _.sumBy(user1.reviews, 'rating') | |
const user2MovieScoreSum = _.sumBy(user2.reviews, 'rating') | |
const user1MovieScoreSqSum = _.sumBy(user1.reviews, squaredNum) | |
const user2MovieScoreSqSum = _.sumBy(user2.reviews, squaredNum) | |
let pSum = 0 | |
for (let i = 0; i < n; i++) { | |
pSum += (user1.reviews[i].rating * user2.reviews[i].rating) | |
} | |
const num = pSum - ((user1MovieScoreSum * user2MovieScoreSum) / n) | |
const den = Math.sqrt( | |
(user1MovieScoreSqSum - (Math.pow(user1MovieScoreSum, 2) / n)) * | |
(user2MovieScoreSqSum - (Math.pow(user2MovieScoreSum, 2) / n)) | |
) | |
if (den === 0) { | |
return 0 | |
} | |
return num / den | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment