/// <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)); }