Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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)));
        }