void IAiTest.Evaluate() { IDataView dataView = _context.Data.LoadFromTextFile <GitHubIssue>($"{RootFolder}/{EvaluateDataFile}", hasHeader: true); Console.WriteLine("=============== Evaluating Model accuracy with Test data==============="); var predictions = _model.Transform(dataView); var metrics = _context.MulticlassClassification.Evaluate(predictions, "Area", "Score"); Common.ConsoleHelper.PrintMultiClassClassificationMetrics(_trainer.ToString(), metrics); Utility.SaveModelAsFile(_context, _model, dataView, $"{RootFolder}/{ModelFileName}"); }
/// <summary> /// Show accuracy stats. /// </summary> /// <param name="trainer"></param> /// <param name="metrics"></param> private static void ShowAccuracyStats(EstimatorChain <KeyToValueMappingTransformer> trainer, MulticlassClassificationMetrics metrics) { Console.WriteLine($"************************************************************"); Console.WriteLine($"* Metrics for {trainer.ToString()} multi-class classification model "); Console.WriteLine($"*-----------------------------------------------------------"); Console.WriteLine($" AccuracyMacro = {metrics.MacroAccuracy.ToString(CultureInfo.CurrentCulture)}, a value between 0 and 1, the closer to 1, the better"); Console.WriteLine($" AccuracyMicro = {metrics.MicroAccuracy.ToString(CultureInfo.CurrentCulture)}, a value between 0 and 1, the closer to 1, the better"); Console.WriteLine($" LogLoss = {metrics.LogLoss.ToString(CultureInfo.CurrentCulture)}, the closer to 0, the better"); Console.WriteLine($" LogLoss for class 1 = {metrics.PerClassLogLoss[0].ToString(CultureInfo.CurrentCulture)}, the closer to 0, the better"); Console.WriteLine($" LogLoss for class 2 = {metrics.PerClassLogLoss[1].ToString(CultureInfo.CurrentCulture)}, the closer to 0, the better"); Console.WriteLine($" LogLoss for class 3 = {metrics.PerClassLogLoss[2].ToString(CultureInfo.CurrentCulture)}, the closer to 0, the better"); Console.WriteLine($"************************************************************"); }