PermutationFeatureImportance( this RankingContext ctx, IPredictionTransformer <IPredictor> model, IDataView data, string label = DefaultColumnNames.Label, string groupId = DefaultColumnNames.GroupId, string features = DefaultColumnNames.Features, bool useFeatureWeightFilter = false, int?topExamples = null) { return(PermutationFeatureImportance <RankerMetrics> .GetImportanceMetricsMatrix( CatalogUtils.GetEnvironment(ctx), model, data, idv => ctx.Evaluate(idv, label, groupId), RankingDelta, features, useFeatureWeightFilter, topExamples)); }
[ConditionalFact(typeof(Environment), nameof(Environment.Is64BitProcess))] // LightGBM is 64-bit only public void LightGBMRanking() { var env = new MLContext(seed: 0); var dataPath = GetDataPath(TestDatasets.adultRanking.trainFilename); var dataSource = new MultiFileSource(dataPath); var ctx = new RankingContext(env); var reader = TextLoader.CreateReader(env, c => (label: c.LoadFloat(0), features: c.LoadFloat(9, 14), groupId: c.LoadText(1)), separator: '\t', hasHeader: true); LightGbmRankingModelParameters pred = null; var est = reader.MakeNewEstimator() .Append(r => (r.label, r.features, groupId: r.groupId.ToKey())) .Append(r => (r.label, r.groupId, score: ctx.Trainers.LightGbm(r.label, r.features, r.groupId, onFit: (p) => { pred = p; }))); var pipe = reader.Append(est); Assert.Null(pred); var model = pipe.Fit(dataSource); Assert.NotNull(pred); var data = model.Read(dataSource); var metrics = ctx.Evaluate(data, r => r.label, r => r.groupId, r => r.score); Assert.NotNull(metrics); Assert.True(metrics.Ndcg.Length == metrics.Dcg.Length && metrics.Dcg.Length == 3); Assert.InRange(metrics.Dcg[0], 1.4, 1.6); Assert.InRange(metrics.Dcg[1], 1.4, 1.8); Assert.InRange(metrics.Dcg[2], 1.4, 1.8); Assert.InRange(metrics.Ndcg[0], 36.5, 37); Assert.InRange(metrics.Ndcg[1], 36.5, 37); Assert.InRange(metrics.Ndcg[2], 36.5, 37); }