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();
        }
示例#2
0
        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;
        }