File: AutoFit\RankingExperiment.cs
Web Access
Project: src\docs\samples\Microsoft.ML.AutoML.Samples\Microsoft.ML.AutoML.Samples.csproj (Microsoft.ML.AutoML.Samples)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Microsoft.ML.AutoML.Samples.DataStructures;
using Microsoft.ML.Data;
 
namespace Microsoft.ML.AutoML.Samples
{
    public static class RankingExperiment
    {
        private static string TrainDataPath = "<Path to your train dataset goes here>";
        private static string TestDataPath = "<Path to your test dataset goes here>";
        private static string ModelPath = @"<Desired model output directory goes here>\Model.zip";
        private static string LabelColumnName = "Label";
        private static string GroupColumnName = "GroupId";
        private static uint ExperimentTime = 60;
 
        public static void Run()
        {
            MLContext mlContext = new MLContext();
 
            // STEP 1: Load data
            IDataView trainDataView = mlContext.Data.LoadFromTextFile<SearchData>(TrainDataPath, hasHeader: true, separatorChar: ',');
            IDataView testDataView = mlContext.Data.LoadFromTextFile<SearchData>(TestDataPath, hasHeader: true, separatorChar: ',');
 
            // STEP 2: Run AutoML experiment
            Console.WriteLine($"Running AutoML recommendation experiment for {ExperimentTime} seconds...");
            ExperimentResult<RankingMetrics> experimentResult = mlContext.Auto()
                .CreateRankingExperiment(new RankingExperimentSettings() { MaxExperimentTimeInSeconds = ExperimentTime })
                .Execute(trainDataView, testDataView,
                    new ColumnInformation()
                    {
                        LabelColumnName = LabelColumnName,
                        GroupIdColumnName = GroupColumnName
                    });
 
            // STEP 3: Print metric from best model
            RunDetail<RankingMetrics> bestRun = experimentResult.BestRun;
            Console.WriteLine($"Total models produced: {experimentResult.RunDetails.Count()}");
            Console.WriteLine($"Best model's trainer: {bestRun.TrainerName}");
            Console.WriteLine($"Metrics of best model from validation data --");
            PrintMetrics(bestRun.ValidationMetrics);
 
            // STEP 5: Evaluate test data
            IDataView testDataViewWithBestScore = bestRun.Model.Transform(testDataView);
            RankingMetrics testMetrics = mlContext.Ranking.Evaluate(testDataViewWithBestScore, labelColumnName: LabelColumnName);
            Console.WriteLine($"Metrics of best model on test data --");
            PrintMetrics(testMetrics);
 
            // STEP 6: Save the best model for later deployment and inferencing
            mlContext.Model.Save(bestRun.Model, trainDataView.Schema, ModelPath);
 
            // STEP 7: Create prediction engine from the best trained model
            var predictionEngine = mlContext.Model.CreatePredictionEngine<SearchData, SearchDataPrediction>(bestRun.Model);
 
            // STEP 8: Initialize a new test, and get the prediction
            var testPage = new SearchData
            {
                GroupId = "1",
                Features = 9,
                Label = 1
            };
            var prediction = predictionEngine.Predict(testPage);
            Console.WriteLine($"Predicted rating for: {prediction.Prediction}");
 
            // New Page
            testPage = new SearchData
            {
                GroupId = "2",
                Features = 2,
                Label = 9
            };
            prediction = predictionEngine.Predict(testPage);
            Console.WriteLine($"Predicted: {prediction.Prediction}");
 
            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();
        }
 
        private static void PrintMetrics(RankingMetrics metrics)
        {
            Console.WriteLine($"NormalizedDiscountedCumulativeGains: {metrics.NormalizedDiscountedCumulativeGains}");
            Console.WriteLine($"DiscountedCumulativeGains: {metrics.DiscountedCumulativeGains}");
 
        }
    }
}