Exemplo n.º 1
0
        /// <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("]");
        }
Exemplo n.º 2
0
        // 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));
        }
Exemplo n.º 3
0
        // 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));
            }
        }
Exemplo n.º 4
0
        /// <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("]");
        }