public static double Predicted(Dictionary <int, double> neighbours, Hashmap ratings, int item) { double c1 = 0; double c2 = 0; foreach (var kvpair in neighbours) { if (ratings.GetEntry(kvpair.Key).GetInnerDict().ContainsKey(item)) { c1 += neighbours[kvpair.Key] * ratings.GetEntry(kvpair.Key).GetValueAtKey(item); c2 += neighbours[kvpair.Key]; } } return(c1 / c2); }
public static double Pearson(Hashmap ratings, int user_one, int user_two, Boolean nn) { double sx = 0, sy = 0, summ = 0, ssx = 0, ssy = 0; var n = 0; var user_one_ratings = ratings.GetEntry(user_one).GetInnerDict(); var user_two_ratings = ratings.GetEntry(user_two).GetInnerDict(); var similairRatingOne = new List <double>(); var similairRatingTwo = new List <double>(); foreach (var kvpair in user_one_ratings) { if (user_two_ratings.ContainsKey(kvpair.Key)) { similairRatingOne.Add(user_one_ratings[kvpair.Key]); similairRatingTwo.Add(user_two_ratings[kvpair.Key]); } } if (similairRatingOne.Count == similairRatingTwo.Count) { n = similairRatingOne.Count; } if (n == 0 && nn == false) { throw new Exception("No items for users"); } for (var i = 0; i < n; i++) { summ += similairRatingOne[i] * similairRatingTwo[i]; sx += similairRatingOne[i]; sy += similairRatingTwo[i]; ssx += Pow(similairRatingOne[i], 2); ssy += Pow(similairRatingTwo[i], 2); } var c1 = summ - sx * sy / n; var c2 = Sqrt(ssx - Pow(sx, 2) / n); var c3 = Sqrt(ssy - Pow(sy, 2) / n); return(c1 / (c2 * c3)); }
public static double Generalised(Hashmap ratings, int r, int user_one, int user_two, int item) { var user_one_ratings = ratings.GetEntry(user_one).GetInnerDict(); var user_two_ratings = ratings.GetEntry(user_two).GetInnerDict(); double sums = 0; if (user_two_ratings.ContainsKey(item) && user_one_ratings.ContainsKey(item)) { sums += Pow(Abs(user_one_ratings[item] - user_two_ratings[item]), r); } else { throw new Exception("No item for users"); } var answer = Pow(sums, 1 / r); return(Similarity(answer)); }
public static double Cosine(Hashmap ratings, int user_one, int user_two) { double summ = 0, ssx = 0, ssy = 0; var n = 0; var user_one_ratings = ratings.GetEntry(user_one).GetInnerDict(); var user_two_ratings = ratings.GetEntry(user_two).GetInnerDict(); var similairRatingOne = new List <double>(); var similairRatingTwo = new List <double>(); foreach (var kvpair in user_one_ratings) { if (user_two_ratings.ContainsKey(kvpair.Key) && user_one_ratings.ContainsKey(kvpair.Key)) { similairRatingOne.Add(user_one_ratings[kvpair.Key]); similairRatingTwo.Add(user_two_ratings[kvpair.Key]); } else { throw new Exception("No sim"); } } if (similairRatingOne.Count == similairRatingTwo.Count) { n = similairRatingOne.Count; } for (var i = 0; i < n; i++) { summ += similairRatingOne[i] * similairRatingTwo[i]; ssx += Pow(similairRatingOne[i], 2); ssy += Pow(similairRatingTwo[i], 2); } return(summ / (Sqrt(ssx) * Sqrt(ssy))); }