public void Train(IEnumerable <ItemRanking> trainSet) { Console.WriteLine("Training..."); _itemRecommender.Feedback = trainSet.ToPosOnlyFeedback(_usersMap, _itemsMap); _itemRecommender.Train(); _isTrained = true; }
public void SetUp() { training_data = new PosOnlyFeedback <SparseBooleanMatrix>(); training_data.Add(1, 1); training_data.Add(1, 2); training_data.Add(2, 2); training_data.Add(2, 3); training_data.Add(3, 1); training_data.Add(3, 2); recommender = new MostPopular() { Feedback = training_data }; recommender.Train(); test_data = new PosOnlyFeedback <SparseBooleanMatrix>(); test_data.Add(2, 3); test_data.Add(2, 4); test_data.Add(4, 4); all_users = Enumerable.Range(1, 4).ToList(); candidate_items = Enumerable.Range(1, 5).ToList(); }
static void DoTrack2() { TimeSpan seconds; if (find_iter != 0) { if (!(recommender_validate is IIterativeModel)) { Usage("Only iterative recommenders support find_iter."); } IIterativeModel iterative_recommender_validate = (IIterativeModel)recommender_validate; IIterativeModel iterative_recommender_final = (IIterativeModel)recommender_final; Console.WriteLine(); if (load_model_file == string.Empty) { recommender_validate.Train(); // TODO parallelize if (prediction_file != string.Empty) { recommender_final.Train(); } } // evaluate and display results double error = KDDCup.EvaluateTrack2(recommender_validate, validation_candidates, validation_hits); Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "ERR {0:0.######} {1}", error, iterative_recommender_validate.NumIter)); for (int i = (int)iterative_recommender_validate.NumIter + 1; i <= max_iter; i++) { TimeSpan time = Utils.MeasureTime(delegate() { iterative_recommender_validate.Iterate(); // TODO parallelize if (prediction_file != string.Empty) { iterative_recommender_final.Iterate(); } }); training_time_stats.Add(time.TotalSeconds); if (i % find_iter == 0) { time = Utils.MeasureTime(delegate() { // TODO parallelize // evaluate error = KDDCup.EvaluateTrack2(recommender_validate, validation_candidates, validation_hits); err_eval_stats.Add(error); Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "ERR {0:0.######} {1}", error, i)); if (prediction_file != string.Empty) { if (predict_score) { Console.Error.WriteLine("Predicting validation scores ..."); KDDCup.PredictScoresTrack2(recommender_validate, validation_candidates, prediction_file + "-validate-it-" + i); Console.Error.WriteLine("Predicting real scores ..."); KDDCup.PredictScoresTrack2(recommender_final, test_candidates, prediction_file + "-it-" + i); } else { KDDCup.PredictTrack2(recommender_validate, validation_candidates, prediction_file + "-validate-it-" + i); KDDCup.PredictTrack2(recommender_final, test_candidates, prediction_file + "-it-" + i); } } }); eval_time_stats.Add(time.TotalSeconds); if (save_model_file != string.Empty) { Recommender.SaveModel(recommender_validate, save_model_file + "-validate", i); if (prediction_file != string.Empty) { Recommender.SaveModel(recommender_final, save_model_file, i); } } if (err_eval_stats.Last() > err_cutoff) { Console.Error.WriteLine("Reached cutoff after {0} iterations.", i); break; } if (err_eval_stats.Last() > err_eval_stats.Min() + epsilon) { Console.Error.WriteLine(string.Format(CultureInfo.InvariantCulture, "Reached convergence (eps={0:0.######}) on training/validation data after {1} iterations.", epsilon, i)); break; } DisplayStats(); } } // for DisplayStats(); } else { if (load_model_file == string.Empty) { seconds = Utils.MeasureTime(delegate() { // TODO parallelize recommender_validate.Train(); if (prediction_file != string.Empty) { recommender_final.Train(); } }); Console.Write(" training_time " + seconds + " "); } seconds = Utils.MeasureTime(delegate() { // evaluate double error = KDDCup.EvaluateTrack2(recommender_validate, validation_candidates, validation_hits); Console.Write(string.Format(CultureInfo.InvariantCulture, "ERR {0:0.######}", error)); if (prediction_file != string.Empty) { if (predict_score) { KDDCup.PredictScoresTrack2(recommender_validate, validation_candidates, prediction_file + "-validate"); KDDCup.PredictScoresTrack2(recommender_final, test_candidates, prediction_file); } else { KDDCup.PredictTrack2(recommender_validate, validation_candidates, prediction_file + "-validate"); KDDCup.PredictTrack2(recommender_final, test_candidates, prediction_file); } } }); Console.Write(" evaluation_time " + seconds + " "); if (save_model_file != string.Empty) { Recommender.SaveModel(recommender_validate, save_model_file + "-validate"); if (prediction_file != string.Empty) { Recommender.SaveModel(recommender_final, save_model_file); } } } Console.WriteLine(); }