Esempio n. 1
0
        /// <summary>
        /// Evaluates scored regression data.
        /// </summary>
        /// <param name="data">The data to evaluate.</param>
        /// <param name="label">The name of the label column.</param>
        /// <param name="groupId">The name of the groupId column.</param>
        /// <param name="score">The name of the predicted score column.</param>
        /// <returns>The evaluation metrics for these outputs.</returns>
        public RankerMetrics Evaluate(IDataView data, string label, string groupId, string score)
        {
            Host.CheckValue(data, nameof(data));
            Host.CheckNonEmpty(label, nameof(label));
            Host.CheckNonEmpty(score, nameof(score));
            var roles = new RoleMappedData(data, opt: false,
                                           RoleMappedSchema.ColumnRole.Label.Bind(label),
                                           RoleMappedSchema.ColumnRole.Group.Bind(groupId),
                                           RoleMappedSchema.CreatePair(MetadataUtils.Const.ScoreValueKind.Score, score));

            var resultDict = Evaluate(roles);

            Host.Assert(resultDict.ContainsKey(MetricKinds.OverallMetrics));
            var overall = resultDict[MetricKinds.OverallMetrics];

            RankerMetrics result;

            using (var cursor = overall.GetRowCursor(i => true))
            {
                var moved = cursor.MoveNext();
                Host.Assert(moved);
                result = new RankerMetrics(Host, cursor);
                moved  = cursor.MoveNext();
                Host.Assert(!moved);
            }
            return(result);
        }
        private static RankerMetrics RankingDelta(
            RankerMetrics a, RankerMetrics b)
        {
            var dcg  = ComputeArrayDeltas(a.Dcg, b.Dcg);
            var ndcg = ComputeArrayDeltas(a.Ndcg, b.Ndcg);

            return(new RankerMetrics(dcg: dcg, ndcg: ndcg));
        }