private static void BuildTrainEvaluateAndSaveModel(MLContext mlContext) { // STEP 1: Common data loading configuration var textLoader = IrisTextLoaderFactory.CreateTextLoader(mlContext); var trainingDataView = textLoader.Read(TrainDataPath); var testDataView = textLoader.Read(TestDataPath); // STEP 2: Common data process configuration with pipeline data transformations var dataProcessPipeline = mlContext.Transforms.Concatenate("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"); // STEP 3: Set the training algorithm, then create and config the modelBuilder var modelBuilder = new Common.ModelBuilder <IrisData, IrisPrediction>(mlContext, dataProcessPipeline); // We apply our selected Trainer var trainer = mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(labelColumn: "Label", featureColumn: "Features"); modelBuilder.AddTrainer(trainer); // STEP 4: Train the model fitting to the DataSet //The pipeline is trained on the dataset that has been loaded and transformed. Console.WriteLine("=============== Training the model ==============="); modelBuilder.Train(trainingDataView); // STEP 5: Evaluate the model and show accuracy stats Console.WriteLine("===== Evaluating Model's accuracy with Test data ====="); var metrics = modelBuilder.EvaluateMultiClassClassificationModel(testDataView, "Label"); Common.ConsoleHelper.PrintMultiClassClassificationMetrics(trainer.ToString(), metrics); // STEP 6: Save/persist the trained model to a .ZIP file Console.WriteLine("=============== Saving the model to a file ==============="); modelBuilder.SaveModelAsFile(ModelPath); }
private static void BuildTrainEvaluateAndSaveModel(MLContext mlContext) { // STEP 1: Common data loading configuration DataLoader dataLoader = new DataLoader(mlContext); var trainingDataView = dataLoader.GetDataView(TrainDataPath); var testDataView = dataLoader.GetDataView(TestDataPath); // STEP 2: Common data process configuration with pipeline data transformations var dataProcessor = new DataProcessor(mlContext); var dataProcessPipeline = dataProcessor.DataProcessPipeline; // (OPTIONAL) Peek data (such as 5 records) in training DataView after applying the ProcessPipeline's transformations into "Features" Common.ConsoleHelper.PeekDataViewInConsole <IrisData>(mlContext, trainingDataView, dataProcessPipeline, 5); Common.ConsoleHelper.PeekVectorColumnDataInConsole(mlContext, "Features", trainingDataView, dataProcessPipeline, 5); // STEP 3: Set the training algorithm, then create and config the modelBuilder var modelBuilder = new Common.ModelBuilder <IrisData, IrisPrediction>(mlContext, dataProcessPipeline); // We apply our selected Trainer var trainer = mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(label: "Label", features: "Features"); modelBuilder.AddTrainer(trainer); // STEP 4: Train the model fitting to the DataSet //The pipeline is trained on the dataset that has been loaded and transformed. Console.WriteLine("=============== Training the model ==============="); modelBuilder.Train(trainingDataView); // STEP 5: Evaluate the model and show accuracy stats Console.WriteLine("===== Evaluating Model's accuracy with Test data ====="); var metrics = modelBuilder.EvaluateMultiClassClassificationModel(testDataView, "Label"); Common.ConsoleHelper.PrintMultiClassClassificationMetrics("StochasticDualCoordinateAscent", metrics); // STEP 6: Save/persist the trained model to a .ZIP file Console.WriteLine("=============== Saving the model to a file ==============="); modelBuilder.SaveModelAsFile(ModelPath); }