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