public void TestDefaultBehaviorIsNoDecay() { var mf = new BiasedMatrixFactorization() { LearnRate = 1.1f, NumIter = 10, Ratings = TestUtils.CreateRatings() }; mf.Train(); Assert.AreEqual(1.1f, mf.current_learnrate); }
/// <summary> /// Predict the rating of the item by users /// </summary> private static void PredictRating(string[] args) { Console.WriteLine("Predicting ratings for Users..."); String outputFile = Path.Combine(args[2], outputFileForRatings); testingFile = Path.Combine(args[1], testingFile); testingFileModified = Path.Combine(args[2], testingFileModified); ModifyTestingFileForRating(testingFile, testingFileModified); float minRating = 1; float maxRating = 5; var userMapping = new Mapping(); var itemMapping = new Mapping(); var trainingData = StaticRatingData.Read(trainingCompactFileForRatings, userMapping, itemMapping, RatingType.FLOAT, TestRatingFileFormat.WITH_RATINGS, false); var testUsers = trainingData.AllUsers; // users that will be taken into account in the evaluation var candidate_items = trainingData.AllItems; // items that will be taken into account in the evaluation var testData = StaticRatingData.Read(testingFileModified, userMapping, itemMapping, RatingType.FLOAT, TestRatingFileFormat.WITH_RATINGS, false); var recommender = new BiasedMatrixFactorization(); recommender.MinRating = minRating; recommender.MaxRating = maxRating; recommender.Ratings = trainingData; recommender.NumFactors = 30; recommender.NumIter = 100; recommender.RegI = 0.04F; recommender.RegU = 0.04F; //recommender.BiasReg = 0.09F; recommender.FrequencyRegularization = true; recommender.BoldDriver = true; recommender.LearnRate = 0.07F; Stopwatch timeKeeper = new Stopwatch(); timeKeeper.Start(); recommender.Train(); timeKeeper.Stop(); Console.WriteLine("time passed for training rating prediction model: " + timeKeeper.ElapsedMilliseconds); // measure the accuracy on the test data set timeKeeper = new Stopwatch(); timeKeeper.Start(); var results = recommender.Evaluate(testData); timeKeeper.Stop(); Console.WriteLine("time passed for rating prediction: " + timeKeeper.ElapsedMilliseconds); Console.WriteLine("RMSE={0}", results["RMSE"]); recommender.WritePredictions(testData, outputFile, userMapping, itemMapping, "{0}-{1},{2}", "userID-itemID,rating"); }
public void TestDecay() { var mf = new BiasedMatrixFactorization() { LearnRate = 1.0f, Decay = 0.5f, NumIter = 1, Ratings = TestUtils.CreateRatings() }; mf.Train(); Assert.AreEqual(0.5f, mf.current_learnrate); mf.Iterate(); Assert.AreEqual(0.25f, mf.current_learnrate); }
public void TestIncrementalUpdates() { var mf = new BiasedMatrixFactorization() { Ratings = TestUtils.CreateRatings(), FrequencyRegularization = true }; mf.Train(); var new_ratings = new Ratings(); new_ratings.Add(mf.MaxUserID + 1, mf.MaxItemID + 1, 3f); mf.AddRatings(new_ratings); }
public void TestFoldIn() { var mf = new BiasedMatrixFactorization() { Ratings = TestUtils.CreateRatings() }; mf.Train(); var user_ratings = new List <Tuple <int, float> >(); user_ratings.Add(new Tuple <int, float>(0, 4.0f)); var candidate_items = new List <int> { 0, 1 }; // have a known and an unknown item var results = mf.ScoreItems(user_ratings, candidate_items); Assert.AreEqual(2, results.Count); }