예제 #1
0
        /// <summary>
        /// Computes the probability calibration plot for a particular rating value.
        /// </summary>
        /// <param name="instanceSource">The instance source providing the ground truth.</param>
        /// <param name="predictions">A sparse users-by-items matrix of predicted rating distributions.</param>
        /// <param name="rating">The rating value to generate the calibration plot for.</param>
        /// <param name="bins">The number of bins to use.</param>
        /// <returns>The computed probability calibration plot.</returns>
        public double[] ProbabilityCalibrationPlot(
            TInstanceSource instanceSource,
            IDictionary <TUser, IDictionary <TItem, Discrete> > predictions,
            int rating,
            int bins)
        {
            IStarRatingInfo <TGroundTruthRating> starRatingInfo = this.mapping.GetRatingInfo(instanceSource);

            var countTotal   = new int[bins];
            var countGuessed = new int[bins];

            foreach (var userWithPredictionList in predictions)
            {
                foreach (var itemPrediction in userWithPredictionList.Value)
                {
                    TUser  user        = userWithPredictionList.Key;
                    TItem  item        = itemPrediction.Key;
                    double prob        = itemPrediction.Value[rating];
                    int    groundTruth = starRatingInfo.ToStarRating(this.mapping.GetRating(instanceSource, user, item));
                    int    probBin     = Math.Min((int)(prob * bins), bins - 1);

                    countTotal[probBin]   += 1;
                    countGuessed[probBin] += (groundTruth == rating) ? 1 : 0;
                }
            }

            return(Util.ArrayInit(bins, i => (double)countGuessed[i] / countTotal[i]));
        }
예제 #2
0
        /// <summary>
        /// Computes the average of a given rating prediction metric using ground truth in model domain by iterating over
        /// <paramref name="predictions"/> and using the aggregation method given in <paramref name="aggregationMethod"/>.
        /// </summary>
        /// <param name="instanceSource">The instance source providing the ground truth.</param>
        /// <param name="predictions">A sparse users-by-items matrix of predicted rating distributions.</param>
        /// <param name="metric">The rating prediction metric using ground truth in model domain.</param>
        /// <param name="aggregationMethod">A method specifying how metrics are aggregated over all instances.</param>
        /// <returns>The computed average of the given rating prediction metric.</returns>
        public double ModelDomainRatingPredictionMetric(
            TInstanceSource instanceSource,
            IDictionary <TUser, IDictionary <TItem, int> > predictions,
            Func <int, int, double> metric,
            RecommenderMetricAggregationMethod aggregationMethod = RecommenderMetricAggregationMethod.Default)
        {
            IStarRatingInfo <TGroundTruthRating>   starRatingInfo = this.mapping.GetRatingInfo(instanceSource);
            Func <TGroundTruthRating, int, double> metricWrapper  = (g, p) => metric(starRatingInfo.ToStarRating(g), p);

            return(this.RatingPredictionMetric(instanceSource, predictions, metricWrapper, aggregationMethod));
        }