public void FeatureContributionEstimatorWorkout() { var data = GetSparseDataset(); var model = ML.Regression.Trainers.OrdinaryLeastSquares().Fit(data); var estPipe = new FeatureContributionCalculatingEstimator(ML, model.Model, model.FeatureColumn) .Append(new FeatureContributionCalculatingEstimator(ML, model.Model, model.FeatureColumn, normalize: false)) .Append(new FeatureContributionCalculatingEstimator(ML, model.Model, model.FeatureColumn, numPositiveContributions: 0)) .Append(new FeatureContributionCalculatingEstimator(ML, model.Model, model.FeatureColumn, numNegativeContributions: 0)) .Append(new FeatureContributionCalculatingEstimator(ML, model.Model, model.FeatureColumn, numPositiveContributions: 0, numNegativeContributions: 0)); TestEstimatorCore(estPipe, data); Done(); }
private void TestFeatureContribution( ITrainerEstimator <ISingleFeaturePredictionTransformer <IPredictor>, IPredictor> trainer, IDataView data, string testFile, int precision = 6) { // Train the model. var model = trainer.Fit(data); // Extract the predictor, check that it supports feature contribution. var predictor = model.Model as ICalculateFeatureContribution; Assert.NotNull(predictor); // Calculate feature contributions. var est = new FeatureContributionCalculatingEstimator(ML, predictor, "Features", numPositiveContributions: 3, numNegativeContributions: 0) .Append(new FeatureContributionCalculatingEstimator(ML, predictor, "Features", numPositiveContributions: 0, numNegativeContributions: 3)) .Append(new FeatureContributionCalculatingEstimator(ML, predictor, "Features", numPositiveContributions: 1, numNegativeContributions: 1)) .Append(new FeatureContributionCalculatingEstimator(ML, predictor, "Features", numPositiveContributions: 1, numNegativeContributions: 1, normalize: false)); TestEstimatorCore(est, data); // Verify output. var outputPath = GetOutputPath("FeatureContribution", testFile + ".tsv"); using (var ch = Env.Start("save")) { var saver = new TextSaver(ML, new TextSaver.Arguments { Silent = true, OutputHeader = false }); IDataView savedData = TakeFilter.Create(ML, est.Fit(data).Transform(data), 4); using (var fs = File.Create(outputPath)) DataSaverUtils.SaveDataView(ch, saver, savedData, fs, keepHidden: true); } CheckEquality("FeatureContribution", testFile + ".tsv", digitsOfPrecision: precision); Done(); }