public override void Test() { var recommender = (TRecommender)Activator.CreateInstance(typeof(TRecommender), new object[] { Sim, Rg, K }); TestName = string.Format("Knn-K{0}-{1}-{2}-{3}-T{4}", K, Sim, Rg, recommender, NumberOfTests); writeFrequency = (int)Math.Ceiling(NumberOfTests / 100d); base.Test(); try { Write(string.Format("Test {0} ({1})", TestName, DateTime.Now)); Write("------------------------------------------------------", false); rs = new SimpleKnnRecommendationSystem(Trainer, recommender); Timer.Restart(); MaeBiasAndVariance[] mbvsByRatings; var mbv = TestRecommendationSystem(out mbvsByRatings); Timer.Stop(); Write("------------------------------------------------------", false); for (var i = 0; i < mbvsByRatings.Length; i++) { Write(string.Format(CultureInfo.InvariantCulture, "{0}\t->\tRating:{1}\t{2}.", TestName, i + 1, mbvsByRatings[i])); } Write(string.Format(CultureInfo.InvariantCulture, "{0}\t->\tAll ratings\t{1}\t({2}).", TestName, mbv, TimeSpan.FromMilliseconds(Timer.ElapsedMilliseconds))); } catch (Exception e) { Write(string.Format(CultureInfo.InvariantCulture, "{0}{1}{1}{2}", e, Environment.NewLine, e.Message)); } FileWriter.Close(); }
private MaeAndBias TestRecommendationSystem <TModel, TUser>(IRecommendationSystem <TModel, TUser, ITrainer <TModel>, IRecommender <TModel> > rs, IEnumerable <TUser> testUsers, TModel model, List <IArtist> artists) where TModel : IModel where TUser : IUser { var maeList = new List <float>(); var biasList = new List <float>(); foreach (var user in TestUsers) { lock (user) { var originalRatings = user.Ratings; foreach (var rating in user.Ratings) { user.Ratings = originalRatings.Where(r => r != rating).ToList(); var predictedRating = rs.Recommender.PredictRatingForArtist(user, model, artists, rating.ArtistIndex); var error = predictedRating - rating.Value; biasList.Add(error); maeList.Add((float)Math.Sqrt(error * error)); } user.Ratings = originalRatings; } } return(new MaeAndBias(maeList, biasList)); }
public SvdTester(string testName, IRecommendationSystem <TSvdModel, IUser, ISvdTrainer <TSvdModel>, ISvdRecommender <TSvdModel> > recommendationSystem, TSvdModel model, List <IUser> testUsers, List <IRating> testRatings, List <IArtist> artists) { RecommendationSystem = recommendationSystem; Model = model; TestUsers = testUsers; TestRatings = testRatings; Artists = artists; TestName = testName; }