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); }
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; } } }