[Test()] public void TestComputeCorrelations2() { // load data from disk var user_mapping = new EntityMapping(); var item_mapping = new EntityMapping(); var ratings = RatingPrediction.Read("../../../../data/ml100k/u1.base", user_mapping, item_mapping); Assert.AreEqual(-0.02855815f, Pearson.ComputeCorrelation(ratings, EntityType.ITEM, 45, 311, 200f), 0.00001); }
private void CreateRecommender() { BiasedMatrixFactorization recommender = new BiasedMatrixFactorization(); Console.Error.Write("Reading in ratings ... "); TimeSpan time = Utils.MeasureTime(delegate() { recommender.Ratings = RatingPrediction.Read(ratings_file, user_mapping, item_mapping); }); Console.Error.WriteLine("done ({0,0:0.##}).", time.TotalSeconds.ToString(CultureInfo.InvariantCulture)); //Console.Error.Write("Reading in additional ratings ... "); //string[] rating_files = Directory.GetFiles("../../saved_data/", "user-ratings-*"); //Console.Error.WriteLine("done."); foreach (var indices_for_item in recommender.Ratings.ByItem) { if (indices_for_item.Count > 0) { movies_by_frequency.Add(new WeightedItem(recommender.Ratings.Items[indices_for_item[0]], indices_for_item.Count)); } } movies_by_frequency.Sort(); movies_by_frequency.Reverse(); for (int i = 0; i < n_movies; i++) { top_n_movies.Add(movies_by_frequency[i].item_id); } Console.Error.Write("Loading prediction model ... "); recommender.UpdateUsers = true; recommender.UpdateItems = false; recommender.BiasReg = 0.001; recommender.Regularization = 0.045; recommender.NumIter = 60; time = Utils.MeasureTime(delegate() { recommender.LoadModel(model_file); }); Console.Error.WriteLine("done ({0,0:0.##}).", time.TotalSeconds.ToString(CultureInfo.InvariantCulture)); rating_predictor = recommender; current_user_id = user_mapping.ToInternalID(current_user_external_id); //rating_predictor.AddUser(current_user_id); // add movies that were not in the training set //rating_predictor.AddItem( item_mapping.InternalIDs.Count - 1 ); PredictAllRatings(); }
void LoadRatings(string name) { // assumption: ratings, training data and model were reloaded ratings.Clear(); using (var reader = new StreamReader("../../../../saved_data/user-ratings-" + name)) { IRatings user_ratings = RatingPrediction.Read(reader, user_mapping, item_mapping); for (int i = 0; i < user_ratings.Count; i++) { ratings[user_ratings.Items[i]] = user_ratings[i]; current_user_id = user_ratings.Users[i]; // TODO check whether user ID is the same for all ratings } } }