public static void Run(double threshhold, int targetUser, IDistance iDistance, Dictionary <int, double[, ]> dataSet, int K) { neighbors = new Dictionary <int, double>(); var userRatings = dataSet[targetUser]; Dictionary <int, List <Tuple <int, double> > > convertedDataSet = ConvertToDictionary.ConvertData(dataSet); foreach (var userID in dataSet.Keys) { if (userID != targetUser) { double similarity = iDistance.ComputeDistance(userRatings, dataSet[userID]); if (similarity > threshhold) { if (hasMoreProductRated(targetUser, userID, convertedDataSet)) { neighbors.Add(userID, similarity); } } } } var sorted = neighbors.OrderByDescending(x => x.Value).ToDictionary(x => x.Key, x => x.Value).Take(K); // var sorted = from pair in neighbors // orderby pair.Value descending // select pair; foreach (var neighbor in sorted) { Console.WriteLine("Neighbor id:" + neighbor.Key + ", similarity " + neighbor.Value); } }
public static void IterateSimilarity(Dictionary <int, double[, ]> dataSet, int targetUser, IDistance iDistance) { var userRatings = dataSet[targetUser]; foreach (var userID in dataSet.Keys) { if (userID != targetUser) { Console.WriteLine("UserId:" + userID + ", The similarity is: " + iDistance.ComputeDistance(userRatings, dataSet[userID])); } } }