Exemple #1
0
        private IDictionary <int, float> Recomend(IDictionary <int, float> userRatings)
        {
            Dictionary <int, float> Recomendations = new Dictionary <int, float>();

            foreach (var itemId in this._Items)
            {
                if (userRatings.Keys.Contains(itemId))
                {
                    continue;                                    // User has rated this item, just skip it
                }
                ColoborativeRating itemRating = new ColoborativeRating();

                foreach (var userRating in userRatings)
                {
                    if (userRating.Key == itemId)
                    {
                        continue;
                    }
                    int inputItemId = userRating.Key;
                    if (_DiffMarix.Contains(itemId, inputItemId))
                    {
                        ColoborativeRating diff = _DiffMarix[itemId, inputItemId];
                        itemRating.Value += diff.Freq * (userRating.Value + diff.AverageValue * ((itemId < inputItemId) ? 1 : -1));
                        itemRating.Freq  += diff.Freq;
                    }
                }
                Recomendations.Add(itemId, itemRating.AverageValue);
            }
            return(Recomendations);
        }
Exemple #2
0
        private void AddRatings(IDictionary <int, float> filterRatings)
        {
            foreach (var item1 in filterRatings)
            {
                int   item1Id     = item1.Key;
                float item1Rating = item1.Value;
                _Items.Add(item1.Key);

                foreach (var item2 in filterRatings)
                {
                    if (item2.Key <= item1Id)
                    {
                        continue;                       // Eliminate redundancy
                    }
                    int   item2Id     = item2.Key;
                    float item2Rating = item2.Value;

                    ColoborativeRating ratingDiff;
                    if (_DiffMarix.Contains(item1Id, item2Id))
                    {
                        ratingDiff = _DiffMarix[item1Id, item2Id];
                    }
                    else
                    {
                        ratingDiff = new ColoborativeRating();
                        _DiffMarix[item1Id, item2Id] = ratingDiff;
                    }

                    ratingDiff.Value += item1Rating - item2Rating;
                    ratingDiff.Freq  += 1;
                }
            }
        }