public void CreateClustersMovieLens()
        {
            var reader = new MovieLensReader(Paths.MovieLens1M);
            var dataset = new Dataset<ItemRating>(reader);
            var clusterer = new Clusterer(dataset);

            for (int i = 2; i < 15; i += 2)
            {
                clusterer.WriteUsersCluster(Paths.MovieLens1MUsersCluster + i + ".csv", i, 5);
                clusterer.WriteItemsCluster(Paths.MovieLens1MItemsCluster + i + ".csv", i, 5);
            }
        }
        public void CreateClustersMovieLens()
        {
            var reader    = new MovieLensReader(Paths.MovieLens1M);
            var dataset   = new Dataset <ItemRating>(reader);
            var clusterer = new Clusterer(dataset);

            for (int i = 2; i < 15; i += 2)
            {
                clusterer.WriteUsersCluster(Paths.MovieLens1MUsersCluster + i + ".csv", i, 5);
                clusterer.WriteItemsCluster(Paths.MovieLens1MItemsCluster + i + ".csv", i, 5);
            }
        }
        public void TestMovieLensWithClusters()
        {
            // Todo: instead of loading the dataset every time add a updateCluster method to the Dataset<ItemRatingWithCluster>

            List <string> rmses = new List <string>();
            List <string> maes  = new List <string>();

            for (int i = 0; i < 15; i += 2)
            {
                string usersClusterFile = Paths.MovieLens1MUsersCluster + i + ".csv";
                string itemsClusterFile = Paths.MovieLens1MItemsCluster + i + ".csv";

                MovieLensReader trainReader, testReader;

                if (i == 0)
                {
                    trainReader = new MovieLensReader(Paths.MovieLens1MTrain75);
                    testReader  = new MovieLensReader(Paths.MovieLens1MTest25);
                }
                else
                {
                    trainReader = new MovieLensReader(Paths.MovieLens1MTrain75, usersClusterFile, itemsClusterFile);
                    testReader  = new MovieLensReader(Paths.MovieLens1MTest25, usersClusterFile, itemsClusterFile);
                }

                var dataset = new Dataset <MovieLensItemRating>(trainReader, testReader);

                var recommender = new LibFmTrainTester();

                var context = new EvalutationContext <ItemRating>(recommender, dataset);

                var ep = new EvaluationPipeline <ItemRating>(context);
                ep.Evaluators.Add(new RMSE());
                ep.Evaluators.Add(new MAE());

                ep.Run();

                rmses.Add(context["RMSE"].ToString());
                maes.Add(context["MAE"].ToString());
            }

            Console.WriteLine("RMSEs--------------");
            rmses.ForEach(Console.WriteLine);

            Console.WriteLine("MAEs-------------");
            maes.ForEach(Console.WriteLine);
        }
        public void TestMovieLensWithClusters()
        {
            // Todo: instead of loading the dataset every time add a updateCluster method to the Dataset<ItemRatingWithCluster>

            List<string> rmses = new List<string>();
            List<string> maes = new List<string>();

            for (int i = 0; i < 15; i += 2)
            {
                string usersClusterFile = Paths.MovieLens1MUsersCluster + i + ".csv";
                string itemsClusterFile = Paths.MovieLens1MItemsCluster + i + ".csv";

                MovieLensReader trainReader, testReader;

                if (i == 0)
                {
                    trainReader = new MovieLensReader(Paths.MovieLens1MTrain75);
                    testReader = new MovieLensReader(Paths.MovieLens1MTest25);
                }
                else
                {
                    trainReader = new MovieLensReader(Paths.MovieLens1MTrain75, usersClusterFile, itemsClusterFile);
                    testReader = new MovieLensReader(Paths.MovieLens1MTest25, usersClusterFile, itemsClusterFile);
                }

                var dataset = new Dataset<MovieLensItemRating>(trainReader, testReader);

                var recommender = new LibFmTrainTester();

                var context = new EvalutationContext<ItemRating>(recommender, dataset);

                var ep = new EvaluationPipeline<ItemRating>(context);
                ep.Evaluators.Add(new RMSE());
                ep.Evaluators.Add(new MAE());

                ep.Run();

                rmses.Add(context["RMSE"].ToString());
                maes.Add(context["MAE"].ToString());
            }

            Console.WriteLine("RMSEs--------------");
            rmses.ForEach(Console.WriteLine);

            Console.WriteLine("MAEs-------------");
            maes.ForEach(Console.WriteLine);
        }