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")); }
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); }
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); }
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(); } }