public void SaveToCsvTest()
        {
            // Setup results
            BlockingCollection <TrainingHelper.ParameterResult> results =
                new BlockingCollection <TrainingHelper.ParameterResult>();

            int logTo   = int.Parse(Configuration.Get("logTo"));
            int logFrom = int.Parse(Configuration.Get("logFrom"));

            for (double cLog = logFrom; cLog <= logTo; cLog++)
            {
                for (double gammaLog = logFrom; gammaLog <= logTo; gammaLog++)
                {
                    results.Add(new TrainingHelper.ParameterResult()
                    {
                        Accuracy = 1, C = Math.Pow(2, cLog),
                        Gamma    = Math.Pow(2, gammaLog)
                    });
                }
            }

            File.Delete(@"svmDataActual.txt");

            TrainingHelper.SaveToCsv(results, "svmDataActual.txt");

            FileInfo expectedFile = new FileInfo(@"svmDataExpected.txt");
            FileInfo actualFile   = new FileInfo(@"svmDataActual.txt");


            FileAssert.AreEqual(expectedFile, actualFile);
        }
        public void SaveToCsvOutOfBoundsTest()
        {
            // Setup results
            BlockingCollection <TrainingHelper.ParameterResult> results =
                new BlockingCollection <TrainingHelper.ParameterResult>();


            File.Delete(@"svmDataActual.txt");

            Assert.Throws <IndexOutOfRangeException>(() => TrainingHelper.SaveToCsv(results, "svmDataActual.txt"));
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            var mlContext = new MLContext(seed: 0);

            // Load data
            var data = mlContext.Data.LoadFromTextFile <TyreStint>(DatasetsLocation, ';', true);

            // Filtering data
            var filtered = mlContext.Data.FilterByCustomPredicate(data, (TyreStint row) => !(row.Reason.Equals("Pit Stop") || row.Reason.Equals("Race Finish")));
            var debug    = mlContext.Data.CreateEnumerable <TyreStint>(filtered, reuseRowObject: false).Count();

            // Divide dataset into training and testing data
            var split        = mlContext.Data.TrainTestSplit(filtered, testFraction: 0.1);
            var trainingData = split.TrainSet;
            var testingData  = split.TestSet;


            // Run AutoML experiment
            var experimentTime = 900u;

            Console.WriteLine("=============== Training the model ===============");
            Console.WriteLine($"Running AutoML regression experiment for {experimentTime} seconds...");
            var experimentResult = mlContext.Auto()
                                   .CreateRegressionExperiment(experimentTime)
                                   .Execute(trainingData, testingData,
                                            columnInformation: new ColumnInformation()
            {
                CategoricalColumnNames = { nameof(TyreStint.Team), nameof(TyreStint.Car), nameof(TyreStint.Driver), nameof(TyreStint.Compound), nameof(TyreStint.Reason) },
                NumericColumnNames     = { nameof(TyreStint.AirTemperature), nameof(TyreStint.TrackTemperature) },
                LabelColumnName        = nameof(TyreStint.Distance)
            }
                                            );


            // Print top models found by AutoML
            TrainingHelper.PrintTopModels(experimentResult);

            Console.WriteLine("===== Evaluating model's accuracy with test data =====");
            var best = experimentResult.BestRun;

            var trainedModel = best.Model;
            var predictions  = trainedModel.Transform(testingData);

            var metrics = mlContext.Regression.Evaluate(predictions, labelColumnName: nameof(TyreStint.Distance), scoreColumnName: "Score");

            TrainingHelper.PrintRegressionMetrics(best.TrainerName, metrics);


            // Run sample predictions
            var predictionEngine = mlContext.Model.CreatePredictionEngine <TyreStint, TyreStintPrediction>(trainedModel);

            var lh = new TyreStint()
            {
                Track = "Bahrain International Circuit", TrackLength = 5412f, Team = "Mercedes", Car = "W12", Driver = "Lewis Hamilton", Compound = "C3", AirTemperature = 20.5f, TrackTemperature = 28.3f, Reason = "Pit Stop"
            };
            var lhPred = predictionEngine.Predict(lh);
            var lhLaps = lhPred.Distance / 5412f;

            var mv = new TyreStint()
            {
                Track = "Bahrain International Circuit", TrackLength = 5412f, Team = "Red Bull", Car = "RB16B", Driver = "Max Verstappen", Compound = "C3", AirTemperature = 20.5f, TrackTemperature = 28.3f, Reason = "Pit Stop"
            };
            var mvPred = predictionEngine.Predict(mv);
            var mvLaps = mvPred.Distance / 5412f;


            // Printing predictions for top10 grid places
            var top10Monaco = new List <Top10Driver>()
            {
                new Top10Driver()
                {
                    Team = "Ferrari", Car = "SF21", Name = "Charles Leclerc", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Red Bull", Car = "RB16B", Name = "Max Verstappen", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Mercedes", Car = "W12", Name = "Valtteri Bottas", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Ferrari", Car = "SF21", Name = "Carlos Sainz", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "McLaren", Car = "MCL35M", Name = "Lando Norris", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Toro Rosso / AlphaTauri", Car = "AT02", Name = "Pierre Gasly", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Mercedes", Car = "W12", Name = "Lewis Hamilton", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Force India / Racing Point / Aston Martin", Car = "AMR21", Name = "Sebastian Vettel", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Red Bull", Car = "RB16B", Name = "Sergio Pérez", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Sauber / Alfa Romeo", Car = "C41", Name = "Antonio Giovinazzi", StartingCompound = "C5"
                },
                new Top10Driver()
                {
                    Team = "Renault / Alpine", Car = "A521", Name = "Esteban Ocon", StartingCompound = "C5"
                },
            };

            DataHelper.PrintPredictionTable(predictionEngine, "Monaco", 20.0f, 35.0f, top10Monaco);
        }
Beispiel #4
0
 public void OnMapReady(GoogleMap googleMap)
 {
     trainingHelper = new TrainingHelper(googleMap, CurrentTrainingState);
 }
        public void FindBestHyperparametersGivenAnswersTest()
        {
            SVMProblem problem = new SVMProblem();

            problem.Add(new SVMNode[]
            {
                new SVMNode(1, 1),
                new SVMNode(2, 10),
                new SVMNode(3, 72),
                new SVMNode(4, 55),
                new SVMNode(5, 1),
            }, 1);

            problem.Add(new SVMNode[]
            {
                new SVMNode(1, 1),
                new SVMNode(2, 10),
                new SVMNode(3, 2),
                new SVMNode(4, 95),
                new SVMNode(5, 16),
            }, 1);

            problem.Add(new SVMNode[]
            {
                new SVMNode(1, 1),
                new SVMNode(2, 12),
                new SVMNode(3, 13),
                new SVMNode(4, 14),
                new SVMNode(5, 15),
            }, 1);

            problem.Add(new SVMNode[]
            {
                new SVMNode(1, 0),
                new SVMNode(2, 13),
                new SVMNode(3, 37),
                new SVMNode(4, 4),
                new SVMNode(5, 18),
            }, 0);

            problem.Add(new SVMNode[]
            {
                new SVMNode(1, 0),
                new SVMNode(2, 100),
                new SVMNode(3, 720),
                new SVMNode(4, 550),
                new SVMNode(5, 10),
            }, 0);


            //Setup test SVMParameter
            SVMParameter parameter = new SVMParameter
            {
                Type        = SVMType.C_SVC,
                Kernel      = SVMKernelType.RBF,
                C           = 2,
                Gamma       = 1,
                Probability = true,
            };


            var actualParameter = TrainingHelper.FindBestHyperparameters(problem, parameter);

            Assert.AreEqual(0.015625d, actualParameter.C);
            Assert.AreEqual(0.125d, actualParameter.Gamma);
        }
Beispiel #6
0
        public void GetProblemFromImageModelResultListTest()
        {
            ushort[,] image1 = new ushort[, ]
            {
                { 1, 2, 3, 4, 5 },
                { 6, 2, 8, 9, 10 },
                { 11, 8, 2, 10, 11 },
                { 16, 13, 11, 15, 16 },
                { 21, 2, 1, 1, 25 },
            };

            ushort[,] image2 = new ushort[, ]
            {
                { 1, 2, 3, 4, 5 },
                { 6, 7, 8, 9, 10 },
                { 11, 8, 9, 10, 11 },
                { 16, 13, 14, 15, 16 },
                { 21, 2, 23, 24, 25 },
            };

            ImageWithResultModel resultImage1 = new ImageWithResultModel();

            resultImage1.Image  = new UShortArrayAsImage(image1);
            resultImage1.Result = 1;


            ImageWithResultModel resultImage2 = new ImageWithResultModel();

            resultImage2.Image  = new UShortArrayAsImage(image2);
            resultImage2.Result = 0;

            var images = new List <ImageWithResultModel>()
            {
                resultImage1,
                resultImage2
            };

            File.Delete(@"pca_model-100x100-CC-Train-MassCalc-BI.bin");

            PCA pca  = TrainingHelper.GetPca(images);
            PCA pca2 = TrainingHelper.GetPca(images);

            SVMProblem problem = ProblemHandler.GetProblemFromImageModelResultList(images, pca, 10);

            //Expected value
            SVMProblem realValue = new SVMProblem();

            realValue.Add(new SVMNode[]
            {
                new SVMNode(1, 20.056853498561878),
                new SVMNode(2, 13.190302568584602),
                new SVMNode(3, -1.0813980605883611),
                new SVMNode(4, 0.38976510872122916),
                new SVMNode(5, 8.8596355929840787),
                new SVMNode(6, -7.3433006502883726),
                new SVMNode(7, 10.837768344992746),
                new SVMNode(8, 20.626727358988219),
                new SVMNode(9, -1.7552480617394235),
                new SVMNode(10, 25),
            }, 0);

            realValue.Add(new SVMNode[]
            {
                new SVMNode(1, 22.292105243883533),
                new SVMNode(2, 11.126898461982794),
                new SVMNode(3, -2.3028333386433371),
                new SVMNode(4, -6.2077696783291429),
                new SVMNode(5, 12.172991455602181),
                new SVMNode(6, -4.385545310384054),
                new SVMNode(7, 13.837367251719812),
                new SVMNode(8, 20.646721554636255),
                new SVMNode(9, -1.8000434956830436),
                new SVMNode(10, 25),
            }, 1);

            bool fail = false;

            for (int i = 0; i < realValue.Y.Count; i++)
            {
                // Expected values
                var y = realValue.Y[i];
                var x = realValue.X[i];

                // Actual values
                var py = problem.Y[i];
                var px = problem.X[i];

                for (int j = 0; j < x.Length; j++)
                {
                    if (x[j].Value != px[j].Value)
                    {
                        fail = true;
                    }
                }
            }

            if (!fail)
            {
                Assert.Pass();
            }
            else
            {
                Assert.Fail();
            }
        }