/// <summary>Write item predictions (scores) to a TextWriter object</summary> /// <param name="recommender">the <see cref="IRecommender"/> to use for making the predictions</param> /// <param name="user_id">the ID of the user to make recommendations for</param> /// <param name="relevant_items">the list of candidate items</param> /// <param name="ignore_items">a list of items for which no predictions should be made</param> /// <param name="num_predictions">the number of items to return per user, -1 if there should be no limit</param> /// <param name="user_mapping">an <see cref="IEntityMapping"/> object for the user IDs</param> /// <param name="item_mapping">an <see cref="IEntityMapping"/> object for the item IDs</param> /// <param name="writer">the <see cref="TextWriter"/> to write to</param> static public void WritePredictions( IRecommender recommender, int user_id, ICollection <int> relevant_items, ICollection <int> ignore_items, int num_predictions, IEntityMapping user_mapping, IEntityMapping item_mapping, TextWriter writer) { var score_list = new List <WeightedItem>(); foreach (int item_id in relevant_items) { score_list.Add(new WeightedItem(item_id, recommender.Predict(user_id, item_id))); } score_list.Sort(); score_list.Reverse(); int prediction_count = 0; writer.Write("{0}\t[", user_mapping.ToOriginalID(user_id)); foreach (var wi in score_list) { if (!ignore_items.Contains(wi.item_id) && wi.weight > double.MinValue) { if (prediction_count == 0) { writer.Write("{0}:{1}", item_mapping.ToOriginalID(wi.item_id), wi.weight.ToString(CultureInfo.InvariantCulture)); } else { writer.Write(",{0}:{1}", item_mapping.ToOriginalID(wi.item_id), wi.weight.ToString(CultureInfo.InvariantCulture)); } prediction_count++; } if (prediction_count == num_predictions) { break; } } writer.WriteLine("]"); }
// TODO as soon as we drop support for Mono 2.6, use default arguments /// <summary>Rate a given set of instances and write it to a TextWriter</summary> /// <param name="recommender">rating predictor</param> /// <param name="ratings">test cases</param> /// <param name="user_mapping">an <see cref="EntityMapping"/> object for the user IDs</param> /// <param name="item_mapping">an <see cref="EntityMapping"/> object for the item IDs</param> /// <param name="line_format">a format string specifying the line format; {0} is the user ID, {1} the item ID, {2} the rating</param> /// <param name="writer">the TextWriter to write the predictions to</param> public static void WritePredictions( IRatingPredictor recommender, IRatings ratings, IEntityMapping user_mapping, IEntityMapping item_mapping, string line_format, TextWriter writer) { for (int index = 0; index < ratings.Count; index++) writer.WriteLine(line_format, user_mapping.ToOriginalID(ratings.Users[index]), item_mapping.ToOriginalID(ratings.Items[index]), recommender.Predict(ratings.Users[index], ratings.Items[index]).ToString(CultureInfo.InvariantCulture)); }
// TODO as soon as we drop support for Mono 2.6, use default arguments /// <summary>Rate a given set of instances and write it to a TextWriter</summary> /// <param name="recommender">rating predictor</param> /// <param name="ratings">test cases</param> /// <param name="user_mapping">an <see cref="EntityMapping"/> object for the user IDs</param> /// <param name="item_mapping">an <see cref="EntityMapping"/> object for the item IDs</param> /// <param name="line_format">a format string specifying the line format; {0} is the user ID, {1} the item ID, {2} the rating</param> /// <param name="writer">the TextWriter to write the predictions to</param> public static void WritePredictions( IRatingPredictor recommender, IRatings ratings, IEntityMapping user_mapping, IEntityMapping item_mapping, string line_format, TextWriter writer) { for (int index = 0; index < ratings.Count; index++) { writer.WriteLine(line_format, user_mapping.ToOriginalID(ratings.Users[index]), item_mapping.ToOriginalID(ratings.Items[index]), recommender.Predict(ratings.Users[index], ratings.Items[index]).ToString(CultureInfo.InvariantCulture)); } }
/// <summary>Write item predictions (scores) to a TextWriter object</summary> /// <param name="recommender">the <see cref="IRecommender"/> to use for making the predictions</param> /// <param name="user_id">the ID of the user to make recommendations for</param> /// <param name="relevant_items">the list of candidate items</param> /// <param name="ignore_items">a list of items for which no predictions should be made</param> /// <param name="num_predictions">the number of items to return per user, -1 if there should be no limit</param> /// <param name="user_mapping">an <see cref="IEntityMapping"/> object for the user IDs</param> /// <param name="item_mapping">an <see cref="IEntityMapping"/> object for the item IDs</param> /// <param name="writer">the <see cref="TextWriter"/> to write to</param> public static void WritePredictions( IRecommender recommender, int user_id, ICollection<int> relevant_items, ICollection<int> ignore_items, int num_predictions, IEntityMapping user_mapping, IEntityMapping item_mapping, TextWriter writer) { var score_list = new List<WeightedItem>(); foreach (int item_id in relevant_items) score_list.Add( new WeightedItem(item_id, recommender.Predict(user_id, item_id))); score_list.Sort(); score_list.Reverse(); int prediction_count = 0; writer.Write("{0}\t[", user_mapping.ToOriginalID(user_id)); foreach (var wi in score_list) { if (!ignore_items.Contains(wi.item_id) && wi.weight > double.MinValue) { if (prediction_count == 0) writer.Write("{0}:{1}", item_mapping.ToOriginalID(wi.item_id), wi.weight.ToString(CultureInfo.InvariantCulture)); else writer.Write(",{0}:{1}", item_mapping.ToOriginalID(wi.item_id), wi.weight.ToString(CultureInfo.InvariantCulture)); prediction_count++; } if (prediction_count == num_predictions) break; } writer.WriteLine("]"); }