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); } }
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); } } }
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); } }
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(); }
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)); }
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(); }