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);
            }
        }
示例#2
0
文件: Program.cs 项目: Donovancm/DSO1
        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]));
                }
            }
        }