static async System.Threading.Tasks.Task Main(string[] args) { // MLOps: Create experiment and run var mlOpsContext = new MLOpsBuilder() .UseSQLite(@"C:/MLOps") .Build(); Console.WriteLine("Creating an MLOps Run"); var runId = await mlOpsContext.CreateRunAsync("Product Category Predictor"); Console.WriteLine($"Run created with Id {runId}"); var mlContext = new MLContext(seed: 1); Console.WriteLine("Loading the data"); var data = mlContext.Data.LoadFromTextFile <ModelInput>("Data/titanic.csv", hasHeader: true, separatorChar: ','); var testTrainTest = mlContext.Data.TrainTestSplit(data); var features = new[] { nameof(ModelInput.Pclass), nameof(ModelInput.Sex), nameof(ModelInput.Age), nameof(ModelInput.SibSp), nameof(ModelInput.Parch), nameof(ModelInput.Fare), nameof(ModelInput.Embarked) }; Console.WriteLine("Creating a data processing pipeline"); var dataProcessingPipeline = mlContext.Transforms.ReplaceMissingValues(nameof(ModelInput.Age), replacementMode: MissingValueReplacingEstimator.ReplacementMode.Mean) .Append(mlContext.Transforms.Categorical.OneHotEncoding(nameof(ModelInput.Sex))) .Append(mlContext.Transforms.Categorical.OneHotEncoding(nameof(ModelInput.Embarked))) .Append(mlContext.Transforms.Categorical.OneHotEncoding(nameof(ModelInput.Pclass))) .Append(mlContext.Transforms.Concatenate("Features", features)) .Append(mlContext.Transforms.NormalizeMinMax("Features")); Console.WriteLine("Training the model, please stand-by..."); var trainingPipeline = dataProcessingPipeline .Append(mlContext.BinaryClassification.Trainers.SdcaLogisticRegression("Label", "Features")); var trainedModel = trainingPipeline.Fit(testTrainTest.TrainSet); Console.WriteLine("Evaluating the model"); var predictions = trainedModel.Transform(testTrainTest.TestSet); var metrics = mlContext.BinaryClassification.Evaluate(predictions); //MLOps: Log Metrics Console.WriteLine("Logging metrics"); await mlOpsContext.LogMetricsAsync(runId, metrics); //Save the model mlContext.Model.Save(trainedModel, testTrainTest.TrainSet.Schema, "BinaryClassificationModel.zip"); //MLOps: Upload artifact/model Console.WriteLine("Uploading artifact"); await mlOpsContext.UploadModelAsync(runId, "BinaryClassificationModel.zip"); }
static async Task Main(string[] args) { // MLOps: Create experiment and run var mlOpsContext = new MLOpsBuilder() .UseSQLite(@"C:/MLOps") .Build(); Console.WriteLine("Creating an MLOps Run"); var runId = await mlOpsContext.CreateRunAsync("Product Category Predictor"); Console.WriteLine($"Run created with Id {runId}"); var mlContext = new MLContext(seed: 1); Console.WriteLine("Loading the data"); var data = mlContext.Data.LoadFromTextFile <ProductInformation>("Data/ecommerce.csv", hasHeader: true, separatorChar: ','); var testTrainTest = mlContext.Data.TrainTestSplit(data); Console.WriteLine("Creating a data processing pipeline"); var dataProcessingPipeline = mlContext.Transforms.Conversion.MapValueToKey(nameof(ProductInformation.Category)) .Append(mlContext.Transforms.Text.FeaturizeText(nameof(ProductInformation.ProductName))) .Append(mlContext.Transforms.Text.FeaturizeText(nameof(ProductInformation.Description))) .Append(mlContext.Transforms.Categorical.OneHotHashEncoding(nameof(ProductInformation.Brand)) .Append(mlContext.Transforms.Concatenate("Features", nameof(ProductInformation.ProductName), nameof(ProductInformation.Description), nameof(ProductInformation.Brand), nameof(ProductInformation.Price)) .Append(mlContext.Transforms.NormalizeMinMax("Features")))); Console.WriteLine("Training the model, please stand-by..."); var trainingPipeline = dataProcessingPipeline .Append(mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy(nameof(ProductInformation.Category), "Features") .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"))); var trainedModel = trainingPipeline.Fit(testTrainTest.TrainSet); Console.WriteLine("Evaluating the model"); var predictions = trainedModel.Transform(testTrainTest.TestSet); var metrics = mlContext.MulticlassClassification.Evaluate(predictions, nameof(ProductInformation.Category)); //MLOps: Log Metrics Console.WriteLine("Logging metrics"); await mlOpsContext.LogMetricsAsync(runId, metrics); //Save the model mlContext.Model.Save(trainedModel, testTrainTest.TrainSet.Schema, "MultiClassificationModel.zip"); //MLOps: Upload artifact/model Console.WriteLine("Uploading artifact"); await mlOpsContext.UploadModelAsync(runId, "MultiClassificationModel.zip"); }
static async Task Main(string[] args) { // MLOps: Create experiment and run var mlOpsContext = new MLOpsBuilder() .UseSQLite(@"C:/MLOps") .Build(); Console.WriteLine("Creating an MLOps Run"); var runId = await mlOpsContext.CreateRunAsync("Product Category Predictor"); Console.WriteLine($"Run created with Id {runId}"); var mlContext = new MLContext(seed: 1); Console.WriteLine("Loading the data"); var data = mlContext.Data.LoadFromTextFile <ModelInput>("Data/taxi-fare.csv", hasHeader: true, separatorChar: ','); var testTrainTest = mlContext.Data.TrainTestSplit(data); Console.WriteLine("Creating a data processing pipeline"); var dataProcessingPipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Label", inputColumnName: "FareAmount") .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "VendorIdEncoded", inputColumnName: "VendorId")) .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "RateCodeEncoded", inputColumnName: "RateCode")) .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "PaymentTypeEncoded", inputColumnName: "PaymentType")) .Append(mlContext.Transforms.Concatenate("Features", "VendorIdEncoded", "RateCodeEncoded", "PassengerCount", "TripDistance", "PaymentTypeEncoded")); Console.WriteLine("Training the model, please stand-by..."); var trainingPipeline = dataProcessingPipeline .Append(mlContext.Regression.Trainers.FastTree()); var trainedModel = trainingPipeline.Fit(testTrainTest.TrainSet); Console.WriteLine("Evaluating the model"); var predictions = trainedModel.Transform(testTrainTest.TestSet); var metrics = mlContext.Regression.Evaluate(predictions); //MLOps: Log Metrics Console.WriteLine("Logging metrics"); await mlOpsContext.LogMetricsAsync(runId, metrics); //Save the model mlContext.Model.Save(trainedModel, testTrainTest.TrainSet.Schema, "RegressionClassificationModel.zip"); //MLOps: Upload artifact/model Console.WriteLine("Uploading artifact"); await mlOpsContext.UploadModelAsync(runId, "RegressionClassificationModel.zip"); }