diff --git a/machine-learning/tutorials/GitHubIssueClassification/GitHubIssueClassification.csproj b/machine-learning/tutorials/GitHubIssueClassification/GitHubIssueClassification.csproj index 9f0fdc281c3..904dbb36461 100644 --- a/machine-learning/tutorials/GitHubIssueClassification/GitHubIssueClassification.csproj +++ b/machine-learning/tutorials/GitHubIssueClassification/GitHubIssueClassification.csproj @@ -15,7 +15,7 @@ - + diff --git a/machine-learning/tutorials/GitHubIssueClassification/Program.cs b/machine-learning/tutorials/GitHubIssueClassification/Program.cs index 6cfd5b8a3fc..c06e57da286 100644 --- a/machine-learning/tutorials/GitHubIssueClassification/Program.cs +++ b/machine-learning/tutorials/GitHubIssueClassification/Program.cs @@ -2,10 +2,7 @@ using System; using System.IO; using System.Linq; -using Microsoft.Data.DataView; using Microsoft.ML; -using Microsoft.ML.Data; -using Microsoft.ML.Transforms; // namespace GitHubIssueClassification @@ -55,7 +52,7 @@ static void Main(string[] args) // // - Evaluate(); + Evaluate(_trainingDataView.Schema); // // @@ -95,7 +92,7 @@ public static IEstimator BuildAndTrainModel(IDataView trainingData // Use the multi-class SDCA algorithm to predict the label using features. //Set the trainer/algorithm and map label to value (original readable state) // - var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(DefaultColumnNames.Label, DefaultColumnNames.Features)) + var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features")) .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); // @@ -112,7 +109,7 @@ public static IEstimator BuildAndTrainModel(IDataView trainingData // Create prediction engine related to the loaded trained model // - _predEngine = _trainedModel.CreatePredictionEngine(_mlContext); + _predEngine = _mlContext.Model.CreatePredictionEngine(_trainedModel); // // GitHubIssue issue = new GitHubIssue() { @@ -135,7 +132,7 @@ public static IEstimator BuildAndTrainModel(IDataView trainingData } - public static void Evaluate() + public static void Evaluate(DataViewSchema trainingDataViewSchema) { // STEP 5: Evaluate the model in order to get the model's accuracy metrics Console.WriteLine($"=============== Evaluating to get model's accuracy metrics - Starting time: {DateTime.Now.ToString()} ==============="); @@ -155,8 +152,8 @@ public static void Evaluate() Console.WriteLine($"*************************************************************************************************************"); Console.WriteLine($"* Metrics for Multi-class Classification model - Test Data "); Console.WriteLine($"*------------------------------------------------------------------------------------------------------------"); - Console.WriteLine($"* MicroAccuracy: {testMetrics.AccuracyMicro:0.###}"); - Console.WriteLine($"* MacroAccuracy: {testMetrics.AccuracyMacro:0.###}"); + Console.WriteLine($"* MicroAccuracy: {testMetrics.MicroAccuracy:0.###}"); + Console.WriteLine($"* MacroAccuracy: {testMetrics.MacroAccuracy:0.###}"); Console.WriteLine($"* LogLoss: {testMetrics.LogLoss:#.###}"); Console.WriteLine($"* LogLossReduction: {testMetrics.LogLossReduction:#.###}"); Console.WriteLine($"*************************************************************************************************************"); @@ -164,7 +161,7 @@ public static void Evaluate() // Save the new model to .ZIP file // - SaveModelAsFile(_mlContext, _trainedModel); + SaveModelAsFile(_mlContext, trainingDataViewSchema, _trainedModel); // } @@ -172,11 +169,7 @@ public static void Evaluate() public static void PredictIssue() { // - ITransformer loadedModel; - using (var stream = new FileStream(_modelPath, FileMode.Open, FileAccess.Read, FileShare.Read)) - { - loadedModel = _mlContext.Model.Load(stream); - } + ITransformer loadedModel = _mlContext.Model.Load(_modelPath, out var modelInputSchema); // // @@ -185,7 +178,7 @@ public static void PredictIssue() //Predict label for single hard-coded issue // - _predEngine = loadedModel.CreatePredictionEngine(_mlContext); + _predEngine = _mlContext.Model.CreatePredictionEngine(loadedModel); // // @@ -198,11 +191,10 @@ public static void PredictIssue() } - private static void SaveModelAsFile(MLContext mlContext, ITransformer model) + private static void SaveModelAsFile(MLContext mlContext,DataViewSchema trainingDataViewSchema, ITransformer model) { // - using (var fs = new FileStream(_modelPath, FileMode.Create, FileAccess.Write, FileShare.Write)) - mlContext.Model.Save(model, fs); + mlContext.Model.Save(model, trainingDataViewSchema, _modelPath); // Console.WriteLine("The model is saved to {0}", _modelPath);