Пример #1
0
        /// <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="writer">the TextWriter to write the predictions to</param>
        /// <param name="user_mapping">an <see cref="Mapping"/> object for the user IDs</param>
        /// <param name="item_mapping">an <see cref="Mapping"/> 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="header">if specified, write this string at the start of the output</param>
        public static void WritePredictions(
            this IRecommender recommender,
            IRatings ratings,
            TextWriter writer,
            IMapping user_mapping = null,
            IMapping item_mapping = null,
            string line_format    = "{0}\t{1}\t{2}",
            string header         = null)
        {
            if (user_mapping == null)
            {
                user_mapping = new IdentityMapping();
            }
            if (item_mapping == null)
            {
                item_mapping = new IdentityMapping();
            }

            if (header != null)
            {
                writer.WriteLine(header);
            }

            if (line_format == "ranking")
            {
                foreach (int user_id in ratings.AllUsers)
                {
                    if (ratings.ByUser[user_id].Count > 0)
                    {
                        recommender.WritePredictions(
                            user_id,
                            new List <int>(from index in ratings.ByUser[user_id] select ratings.Items[index]),
                            new int[] { },
                            ratings.ByUser[user_id].Count,
                            writer,
                            user_mapping, item_mapping);
                    }
                }
            }
            else
            {
                for (int index = 0; index < ratings.Count; index++)
                {
                    writer.WriteLine(
                        string.Format(
                            CultureInfo.InvariantCulture,
                            line_format,
                            user_mapping.ToOriginalID(ratings.Users[index]),
                            item_mapping.ToOriginalID(ratings.Items[index]),
                            recommender.Predict(ratings.Users[index], ratings.Items[index])
                            )
                        );
                }
            }
        }