private List <KeyValuePair <int, double> > PredictRatings(Matrix <int> ratingsMatrix, Matrix <float> weightsMatrix, RatingPredictor ratingPredictor, int user, int item) { List <KeyValuePair <int, double> > predictions = new List <KeyValuePair <int, double> >(); HashSet <int> randomItems = new HashSet <int>(); randomItems.Add(item); Random random = new Random(); while (randomItems.Count < randomRatingsCount + 1) { int randomMovie = random.Next(this.moviesCount); if (!ratingsMatrix[user].Contains(randomMovie)) { randomItems.Add(randomMovie); } } foreach (int i in randomItems) { double predictedRating = ratingPredictor.PredictRating(ratingsMatrix, weightsMatrix, user, i, false); if (predictedRating > 0) { predictions.Add(new KeyValuePair <int, double>(i, predictedRating)); } } List <KeyValuePair <int, double> > orderedPredictions = predictions.OrderByDescending(x => x.Value).ToList(); return(orderedPredictions); }