protected virtual void LoadData()
    {
        training_file = Path.Combine(data_dir, training_file);
        if (test_file != null)
        {
            test_file = Path.Combine(data_dir, test_file);
        }

        // user attributes
        if (user_attributes_file != null)
        {
            user_attributes = AttributeData.Read(Path.Combine(data_dir, user_attributes_file), user_mapping);
        }
        if (recommender is IUserAttributeAwareRecommender)
        {
            ((IUserAttributeAwareRecommender)recommender).UserAttributes = user_attributes;
        }

        // item attributes
        if (item_attributes_file != null)
        {
            item_attributes = AttributeData.Read(Path.Combine(data_dir, item_attributes_file), item_mapping);
        }
        if (recommender is IItemAttributeAwareRecommender)
        {
            ((IItemAttributeAwareRecommender)recommender).ItemAttributes = item_attributes;
        }

        // user relation
        if (recommender is IUserRelationAwareRecommender)
        {
            ((IUserRelationAwareRecommender)recommender).UserRelation = RelationData.Read(Path.Combine(data_dir, user_relations_file), user_mapping);
            Console.WriteLine("relation over {0} users", ((IUserRelationAwareRecommender)recommender).NumUsers);
        }

        // item relation
        if (recommender is IItemRelationAwareRecommender)
        {
            ((IItemRelationAwareRecommender)recommender).ItemRelation = RelationData.Read(Path.Combine(data_dir, item_relations_file), item_mapping);
            Console.WriteLine("relation over {0} items", ((IItemRelationAwareRecommender)recommender).NumItems);
        }
    }
Esempio n. 2
0
    static void LoadData()
    {
        TimeSpan loading_time = Utils.MeasureTime(delegate() {
            // training data
            training_data = ItemRecommendation.Read(Path.Combine(data_dir, training_file), user_mapping, item_mapping);

            // relevant users and items
            if (relevant_users_file != null)
            {
                relevant_users = new HashSet <int>(user_mapping.ToInternalID(Utils.ReadIntegers(Path.Combine(data_dir, relevant_users_file))));
            }
            else
            {
                relevant_users = training_data.AllUsers;
            }
            if (relevant_items_file != null)
            {
                relevant_items = new HashSet <int>(item_mapping.ToInternalID(Utils.ReadIntegers(Path.Combine(data_dir, relevant_items_file))));
            }
            else
            {
                relevant_items = training_data.AllItems;
            }

            if (!(recommender is MyMediaLite.ItemRecommendation.Random))
            {
                ((ItemRecommender)recommender).Feedback = training_data;
            }

            // user attributes
            if (recommender is IUserAttributeAwareRecommender)
            {
                if (user_attributes_file == null)
                {
                    Usage("Recommender expects --user-attributes=FILE.");
                }
                else
                {
                    ((IUserAttributeAwareRecommender)recommender).UserAttributes = AttributeData.Read(Path.Combine(data_dir, user_attributes_file), user_mapping);
                }
            }

            // item attributes
            if (recommender is IItemAttributeAwareRecommender)
            {
                if (item_attributes_file == null)
                {
                    Usage("Recommender expects --item-attributes=FILE.");
                }
                else
                {
                    ((IItemAttributeAwareRecommender)recommender).ItemAttributes = AttributeData.Read(Path.Combine(data_dir, item_attributes_file), item_mapping);
                }
            }
            if (filtered_eval)
            {
                if (item_attributes_file == null)
                {
                    Usage("--filtered-evaluation expects --item-attributes=FILE.");
                }
                else
                {
                    item_attributes = AttributeData.Read(Path.Combine(data_dir, item_attributes_file), item_mapping);
                }
            }

            // user relation
            if (recommender is IUserRelationAwareRecommender)
            {
                if (user_relations_file == null)
                {
                    Usage("Recommender expects --user-relation=FILE.");
                }
                else
                {
                    ((IUserRelationAwareRecommender)recommender).UserRelation = RelationData.Read(Path.Combine(data_dir, user_relations_file), user_mapping);
                    Console.WriteLine("relation over {0} users", ((IUserRelationAwareRecommender)recommender).NumUsers);                     // TODO move to DisplayDataStats
                }
            }

            // item relation
            if (recommender is IItemRelationAwareRecommender)
            {
                if (user_relations_file == null)
                {
                    Usage("Recommender expects --item-relation=FILE.");
                }
                else
                {
                    ((IItemRelationAwareRecommender)recommender).ItemRelation = RelationData.Read(Path.Combine(data_dir, item_relations_file), item_mapping);
                    Console.WriteLine("relation over {0} items", ((IItemRelationAwareRecommender)recommender).NumItems);                     // TODO move to DisplayDataStats
                }
            }

            // test data
            if (test_ratio == 0)
            {
                if (test_file != null)
                {
                    test_data = ItemRecommendation.Read(Path.Combine(data_dir, test_file), user_mapping, item_mapping);
                }
            }
            else
            {
                var split     = new PosOnlyFeedbackSimpleSplit <PosOnlyFeedback <SparseBooleanMatrix> >(training_data, test_ratio);
                training_data = split.Train[0];
                test_data     = split.Test[0];
            }
        });

        Console.Error.WriteLine(string.Format(CultureInfo.InvariantCulture, "loading_time {0,0:0.##}", loading_time.TotalSeconds));
    }
    protected virtual void LoadData()
    {
        training_file = Path.Combine(data_dir, training_file);
        if (test_file != null)
        {
            test_file = Path.Combine(data_dir, test_file);
        }

        // user attributes
        if (user_attributes_file != null)
        {
            string[] files = user_attributes_file.Split(' ');
            foreach (string file in files)
            {
                if (file.Length > 0)
                {
                    user_attributes.Add(AttributeData.Read(Path.Combine(data_dir, file), user_mapping));
                }
            }
        }



        //Original

        for (int i = 0; i < recommenders.Count; i++)
        {
            if (recommenders[i] is IUserAttributeAwareRecommender)
            {
                ((IUserAttributeAwareRecommender)recommenders[i]).UserAttributes = user_attributes[0];
                if (user_attributes.Count > 1)
                {
                    ((IUserAttributeAwareRecommender)recommenders[i]).AdditionalUserAttributes = user_attributes.GetRange(1, user_attributes.Count - 1);
                }
                else
                {
                    ((IUserAttributeAwareRecommender)recommenders[i]).AdditionalUserAttributes = new List <IBooleanMatrix>();
                }
            }
        }

        // item attributes
        item_attributes = new List <IBooleanMatrix>();
        if (item_attributes_file != null)
        {
            string[] files = item_attributes_file.Split(' ');
            foreach (string file in files)
            {
                if (file.Length > 0)
                {
                    item_attributes.Add(AttributeData.Read(Path.Combine(data_dir, file), item_mapping));
                }
            }
        }


        //Cada um pega um metadado
        for (int i = 0; i < item_attributes.Count; i++)
        {
            if (recommenders[i] is IItemAttributeAwareRecommender)
            {
                ((IItemAttributeAwareRecommender)recommenders[i]).ItemAttributes           = item_attributes[i];
                ((IItemAttributeAwareRecommender)recommenders[i]).AdditionalItemAttributes = new List <IBooleanMatrix>();
            }
        }


        //Original

        /*
         * for (int i = 0; i < recommenders.Count; i++)
         * {
         *  if (recommenders[i] is IItemAttributeAwareRecommender)
         *  {
         *      ((IItemAttributeAwareRecommender)recommenders[i]).ItemAttributes = item_attributes[0];
         *      if (item_attributes.Count > 1)
         *          ((IItemAttributeAwareRecommender)recommenders[i]).AdditionalItemAttributes = item_attributes.GetRange(1, item_attributes.Count - 1);
         *      else
         *          ((IItemAttributeAwareRecommender)recommenders[i]).AdditionalItemAttributes = new List<IBooleanMatrix>();
         *  }
         *
         * }
         *
         */



        for (int i = 0; i < recommenders.Count; i++)
        {
            // user relation
            if (recommenders[i] is IUserRelationAwareRecommender)
            {
                ((IUserRelationAwareRecommender)recommenders[i]).UserRelation = RelationData.Read(Path.Combine(data_dir, user_relations_file), user_mapping);
                Console.WriteLine("relation over {0} users", ((IUserRelationAwareRecommender)recommenders[i]).NumUsers);
            }

            // item relation
            if (recommenders[i] is IItemRelationAwareRecommender)
            {
                ((IItemRelationAwareRecommender)recommenders[i]).ItemRelation = RelationData.Read(Path.Combine(data_dir, item_relations_file), item_mapping);
                Console.WriteLine("relation over {0} items", ((IItemRelationAwareRecommender)recommenders[i]).NumItems);
            }
        }
    }
Esempio n. 4
0
    public static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Handlers.UnhandledExceptionHandler);

        // check number of command line parameters
        if (args.Length < 4)
        {
            Usage("Not enough arguments.");
        }

        // read command line parameters
        RecommenderParameters parameters = null;

        try     { parameters = new RecommenderParameters(args, 4); }
        catch (ArgumentException e)     { Usage(e.Message); }

        // other parameters
        string data_dir = parameters.GetRemoveString("data_dir");
        //Console.Error.WriteLine("data_dir " + data_dir);
        string item_attributes_file = parameters.GetRemoveString("item_attributes");
        string user_attributes_file = parameters.GetRemoveString("user_attributes");
        //string save_mapping_file    = parameters.GetRemoveString( "save_model");
        int    random_seed     = parameters.GetRemoveInt32("random_seed", -1);
        bool   no_eval         = parameters.GetRemoveBool("no_eval", false);
        bool   compute_fit     = parameters.GetRemoveBool("compute_fit", false);
        string prediction_file = parameters.GetRemoveString("prediction_file");

        if (random_seed != -1)
        {
            MyMediaLite.Util.Random.InitInstance(random_seed);
        }

        // main data files and method
        string trainfile       = args[0].Equals("-") ? "-" : Path.Combine(data_dir, args[0]);
        string testfile        = args[1].Equals("-") ? "-" : Path.Combine(data_dir, args[1]);
        string load_model_file = args[2];
        string method          = args[3];

        // set correct recommender
        switch (method)
        {
        case "MF-ItemMapping":
            recommender = Recommender.Configure(mf_map, parameters, Usage);
            break;

//				case "MF-ItemMapping-Optimal":
//					recommender = Recommender.Configure(mf_map_opt, parameters, Usage);
//					break;
//				case "BPR-MF-ItemMapping-kNN":
//					recommender = Recommender.Configure(mf_map_knn, parameters, Usage);
//					break;
//				case "BPR-MF-ItemMapping-SVR":
//					recommender = Recommender.Configure(mf_map_svr, parameters, Usage);
//					break;
        default:
            Usage(string.Format("Unknown method: '{0}'", method));
            break;
        }

        if (parameters.CheckForLeftovers())
        {
            Usage(-1);
        }

        // TODO move loading into its own method

        // ID mapping objects
        EntityMapping user_mapping = new EntityMapping();
        EntityMapping item_mapping = new EntityMapping();

        // training data
        training_data       = MyMediaLite.IO.RatingPrediction.Read(Path.Combine(data_dir, trainfile), user_mapping, item_mapping);
        recommender.Ratings = training_data;

        // user attributes
        if (recommender is IUserAttributeAwareRecommender)
        {
            if (user_attributes_file.Equals(string.Empty))
            {
                Usage("Recommender expects user_attributes=FILE.");
            }
            else
            {
                ((IUserAttributeAwareRecommender)recommender).UserAttributes = AttributeData.Read(Path.Combine(data_dir, user_attributes_file), user_mapping);
            }
        }

        // item attributes
        if (recommender is IItemAttributeAwareRecommender)
        {
            if (item_attributes_file.Equals(string.Empty))
            {
                Usage("Recommender expects item_attributes=FILE.");
            }
            else
            {
                ((IItemAttributeAwareRecommender)recommender).ItemAttributes = AttributeData.Read(Path.Combine(data_dir, item_attributes_file), item_mapping);
            }
        }

        // test data
        test_data = MyMediaLite.IO.RatingPrediction.Read(Path.Combine(data_dir, testfile), user_mapping, item_mapping);

        TimeSpan seconds;

        Recommender.LoadModel(recommender, load_model_file);

        // set the maximum user and item IDs in the recommender - this is important for the cold start use case
        recommender.MaxUserID = user_mapping.InternalIDs.Max();
        recommender.MaxItemID = item_mapping.InternalIDs.Max();

        Console.Error.WriteLine(string.Format(CultureInfo.InvariantCulture, "ratings range: [{0}, {1}]", recommender.MinRating, recommender.MaxRating));

        DisplayDataStats();

        Console.Write(recommender.ToString() + " ");

        if (compute_fit)
        {
            seconds = Utils.MeasureTime(delegate() {
                int num_iter = recommender.NumIterMapping;
                recommender.NumIterMapping = 0;
                recommender.LearnAttributeToFactorMapping();
                Console.Error.WriteLine();
                Console.Error.WriteLine(string.Format(CultureInfo.InvariantCulture, "iteration {0} fit {1}", -1, recommender.ComputeFit()));

                recommender.NumIterMapping = 1;
                for (int i = 0; i < num_iter; i++, i++)
                {
                    recommender.IterateMapping();
                    Console.Error.WriteLine(string.Format(CultureInfo.InvariantCulture, "iteration {0} fit {1}", i, recommender.ComputeFit()));
                }
                recommender.NumIterMapping = num_iter;                 // restore
            });
        }
        else
        {
            seconds = Utils.MeasureTime(delegate() {
                recommender.LearnAttributeToFactorMapping();
            });
        }
        Console.Write("mapping_time " + seconds + " ");

        if (!no_eval)
        {
            seconds = EvaluateRecommender(recommender);
        }
        Console.WriteLine();

        if (prediction_file != string.Empty)
        {
            Console.WriteLine();
            seconds = Utils.MeasureTime(
                delegate() {
                Prediction.WritePredictions(recommender, test_data, user_mapping, item_mapping, prediction_file);
            }
                );
            Console.Error.WriteLine("predicting_time " + seconds);
        }
    }
Esempio n. 5
0
        static void Main(string[] args)
        {
            String path_training_data = "user_ratedmovies.dat";
            String path_user_data     = "users.dat";
            String path_atr_data      = "movie_genres.dat";
            String path_pred_data     = "predict.dat";

            var user_mapping = new Mapping();
            var item_mapping = new Mapping();

            //var user_mapping = new EntityMapping();
            //var item_mapping = new EntityMapping();
            //String path_training_data = "1.rec.train";
            //String path_test_data = "1.rec.test";
            //String path_training_data = "u1.base";
            //String path_test_data = "u1.test";
            //var training_data = ItemData.Read(path_training_data);
            //var test_data = ItemData.Read(path_test_data);

            var training_data  = RatingData.Read(path_training_data, user_mapping, item_mapping);
            var relevant_items = item_mapping.InternalIDs;
            var atr_data       = AttributeData.Read(path_atr_data, item_mapping);
            var pred_data      = RatingData.Read(path_pred_data, user_mapping, item_mapping);

            //var user_data = ItemData.Read(path_user_data, user_mapping);
            Console.WriteLine("I'm here");
            //Console.WriteLine(String.Join(";", user_data.AllUsers));
            //var test_data = RatingData.Read(path_test_data);

            //var recommender = new ItemKNN();
            //recommender.Feedback = training_data;
            //recommender.Train();

            //var recommender = new GSVDPlusPlus();
            //var recommender = new MatrixFactorization();
            //recommender.Ratings = training_data;
            // recommender.MaxRating = 5;
            // recommender.MinRating = 1;
            //recommender.ItemAttributes = atr_data;
            //recommender.NumFactors = 5;
            //recommender.NumIter = 10;

            //recommender.Train();


            var recommender = new SVDPlusPlus();

            recommender.Ratings = training_data;
            //recommender.AdditionalFeedback = user_data;
            Console.WriteLine("I'm here2");
            Console.WriteLine(recommender.ToString());
            //recommender.ItemAttributes = atr_data;
            recommender.NumFactors = 10;

            Console.WriteLine("I'm here3");
            Console.WriteLine(recommender.ToString());
            recommender.Train();
            Console.WriteLine("I'm here4");


            //var results = recommender.DoIterativeCrossValidation(recommdender, 10, 1, 1, true);
            var results = recommender.DoCrossValidation(10, false, true);

            ////var results = recommender.Evaluate(test_data, training_data);
            foreach (var key in results.Keys)
            {
                Console.WriteLine("{0}={1}", key, results[key]);
            }
            Console.WriteLine(results);
            //recommender.Predict();
            recommender.WritePredictions(pred_data, "test45.dat", user_mapping, item_mapping, "{0}|{1}|{2}");

            Console.WriteLine(recommender.Predict(1, 1));
            Console.ReadLine();
        }
Esempio n. 6
0
    static void LoadData(string data_dir,
                         string user_attributes_file, string item_attributes_file,
                         string user_relation_file, string item_relation_file,
                         bool static_data)
    {
        if (training_file == null)
        {
            Usage("Program expects --training-file=FILE.");
        }

        TimeSpan loading_time = Utils.MeasureTime(delegate() {
            // read training data
            if (file_format == RatingFileFormat.DEFAULT)
            {
                training_data = static_data ? RatingPredictionStatic.Read(Path.Combine(data_dir, training_file), user_mapping, item_mapping, rating_type)
                                                                : MyMediaLite.IO.RatingPrediction.Read(Path.Combine(data_dir, training_file), user_mapping, item_mapping);
            }
            else if (file_format == RatingFileFormat.MOVIELENS_1M)
            {
                training_data = MovieLensRatingData.Read(Path.Combine(data_dir, training_file), user_mapping, item_mapping);
            }
            else if (file_format == RatingFileFormat.KDDCUP_2011)
            {
                training_data = MyMediaLite.IO.KDDCup2011.Ratings.Read(Path.Combine(data_dir, training_file));
            }

            recommender.Ratings = training_data;

            // user attributes
            if (recommender is IUserAttributeAwareRecommender)             // TODO also support the MovieLens format here
            {
                if (user_attributes_file == string.Empty)
                {
                    Usage("Recommender expects --user-attributes=FILE.");
                }
                else
                {
                    ((IUserAttributeAwareRecommender)recommender).UserAttributes = AttributeData.Read(Path.Combine(data_dir, user_attributes_file), user_mapping);
                }
            }

            // item attributes
            if (recommender is IItemAttributeAwareRecommender)
            {
                if (item_attributes_file == string.Empty)
                {
                    Usage("Recommender expects --item-attributes=FILE.");
                }
                else
                {
                    ((IItemAttributeAwareRecommender)recommender).ItemAttributes = AttributeData.Read(Path.Combine(data_dir, item_attributes_file), item_mapping);
                }
            }

            // user relation
            if (recommender is IUserRelationAwareRecommender)
            {
                if (user_relation_file == string.Empty)
                {
                    Usage("Recommender expects --user-relations=FILE.");
                }
                else
                {
                    ((IUserRelationAwareRecommender)recommender).UserRelation = RelationData.Read(Path.Combine(data_dir, user_relation_file), user_mapping);
                    Console.WriteLine("relation over {0} users", ((IUserRelationAwareRecommender)recommender).NumUsers);
                }
            }

            // item relation
            if (recommender is IItemRelationAwareRecommender)
            {
                if (user_relation_file == string.Empty)
                {
                    Usage("Recommender expects --item-relations=FILE.");
                }
                else
                {
                    ((IItemRelationAwareRecommender)recommender).ItemRelation = RelationData.Read(Path.Combine(data_dir, item_relation_file), item_mapping);
                    Console.WriteLine("relation over {0} items", ((IItemRelationAwareRecommender)recommender).NumItems);
                }
            }

            // read test data
            if (test_file != null)
            {
                if (file_format == RatingFileFormat.MOVIELENS_1M)
                {
                    test_data = MovieLensRatingData.Read(Path.Combine(data_dir, test_file), user_mapping, item_mapping);
                }
                else
                {
                    test_data = RatingPredictionStatic.Read(Path.Combine(data_dir, test_file), user_mapping, item_mapping, rating_type);
                }
                // TODO add KDD Cup
            }
        });

        Console.Error.WriteLine(string.Format(CultureInfo.InvariantCulture, "loading_time {0,0:0.##}", loading_time.TotalSeconds));
    }
Esempio n. 7
0
        protected void Run(string[] args)
        {
            Console.WriteLine("WISER-RecSys começou");

            options = new OptionSet()
            {
                // string-valued options
                { "arquivo=", v => arquivo = v },
                { "measures=", v => measures = v },
                { "recommender-options=", v => recommender_options += " " + v },
                { "help", v => show_help = v != null },
            };

            eval_measures = ItemRecommendationEvaluationResults.DefaultMeasuresToShow;

            IList <string> extra_args = options.Parse(args);

            if (show_help)
            {
                Usage(0);
            }


            //eval
            if (measures != null)
            {
                eval_measures = measures.Split(' ', ',');
            }



            //Rodar o de vocs



            //
            training_file         = "training.data";
            test_file             = "test.data";
            training_partial_file = "training.partial.data";
            test_partial_file     = "test.partial.data";



            for (int i = 0; i < arquivos.Length; i++)
            {
                MyMediaLite.Random.Seed = 1;


                item_attributes_file = "movie_" + arquivos[i] + ".dat_saida";


                user_mapping.Add(new Mapping());
                item_mapping.Add(new Mapping());



                //Setup recommender
                recommenders.Add("BPRMFAttr".CreateItemRecommender());
                recommenders[i].Configure(recommender_options, (string msg) =>
                {
                    Console.Error.WriteLine(msg); Environment.Exit(-1);
                });


                // item attributes
                if (recommenders[i] is IItemAttributeAwareRecommender && item_attributes_file == null)
                {
                    Abort("Recommender expects --item-attributes=FILE.");
                }


                if (item_attributes_file != null)
                {
                    item_attributes.Add(AttributeData.Read(item_attributes_file, item_mapping[i]));
                }
                if (recommenders[i] is IItemAttributeAwareRecommender)
                {
                    ((IItemAttributeAwareRecommender)recommenders[i]).ItemAttributes = item_attributes[i];
                }


                IBooleanMatrix lista_vazia = new SparseBooleanMatrix();
                if (recommenders[i] is IUserAttributeAwareRecommender)
                {
                    ((IUserAttributeAwareRecommender)recommenders[i]).UserAttributes = lista_vazia;
                }


                // training data
                training_data.Add(ItemData.Read(training_file, user_mapping[i], item_mapping[i], false));

                test_data.Add(ItemData.Read(test_file, user_mapping[i], item_mapping[i], false));


                test_users.Add(test_data[i].AllUsers);


                //Probe

                training_probe_data.Add(ItemData.Read(training_partial_file, user_mapping[i], item_mapping[i], false));
                test_probe_data.Add(ItemData.Read(test_partial_file, user_mapping[i], item_mapping[i], false));


                if (recommenders[i] is MyMediaLite.ItemRecommendation.ItemRecommender)
                {
                    ((ItemRecommender)recommenders[i]).Feedback = training_probe_data[i];
                }


                //Trainar
                Console.WriteLine("Vamos ao probe training");
                var train_time_span = Wrap.MeasureTime(delegate() { recommenders[i].Train(); });
                Console.WriteLine("training_time " + train_time_span + " ");
            }

            Evaluation evaluation = new Evaluation(recommenders, test_probe_data, training_probe_data);

            //Probe learn
            Console.WriteLine("Probe learn started");
            TimeSpan time_span = Wrap.MeasureTime(delegate() { evaluation.EvaluateProbe(test_users, user_mapping, item_mapping); });

            Console.WriteLine(" Probe learn time: " + time_span);


            for (int i = 0; i < arquivos.Length; i++)
            {
                MyMediaLite.Random.Seed = 1;


                item_attributes_file = "movie_" + arquivos[i] + ".dat_saida";


                //Setup recommender
                recommenders[i] = "BPRMFAttr".CreateItemRecommender();
                recommenders[i].Configure(recommender_options, (string msg) => { Console.Error.WriteLine(msg); Environment.Exit(-1); });


                // item attributes
                if (recommenders[i] is IItemAttributeAwareRecommender && item_attributes_file == null)
                {
                    Abort("Recommender expects --item-attributes=FILE.");
                }


                if (recommenders[i] is IItemAttributeAwareRecommender)
                {
                    ((IItemAttributeAwareRecommender)recommenders[i]).ItemAttributes = item_attributes[i];
                }


                IBooleanMatrix lista_vazia = new SparseBooleanMatrix();
                if (recommenders[i] is IUserAttributeAwareRecommender)
                {
                    ((IUserAttributeAwareRecommender)recommenders[i]).UserAttributes = lista_vazia;
                }


                if (recommenders[i] is MyMediaLite.ItemRecommendation.ItemRecommender)
                {
                    ((ItemRecommender)recommenders[i]).Feedback = training_data[i];
                }



                //Trainar
                Console.WriteLine("Agora ao treino normal");
                var train_time_span = Wrap.MeasureTime(delegate() { recommenders[i].Train(); });
                Console.WriteLine("training_time " + train_time_span + " ");
            }



            var results = evaluation.Evaluate(test_data, training_data, test_users, user_mapping, item_mapping);

            foreach (EvaluationResults result in results)
            {
                Console.WriteLine(result.ToString());
            }

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }