Skip to content

Commit 727f6c3

Browse files
srsaggamDmitry-A
authored andcommitted
UI missing features (dotnet#382)
* added formatting changes * added accuracy specifically
1 parent c7d68a1 commit 727f6c3

File tree

3 files changed

+67
-12
lines changed

3 files changed

+67
-12
lines changed

src/mlnet/CodeGenerator/CodeGenerationHelper.cs

+17-6
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public void GenerateCode()
3939
{
4040
Stopwatch watch = Stopwatch.StartNew();
4141
var context = new MLContext();
42+
var verboseLevel = Utils.GetVerbosity(settings.Verbosity);
4243

4344
// Infer columns
4445
ColumnInferenceResults columnInference = null;
@@ -56,7 +57,7 @@ public void GenerateCode()
5657
{
5758
logger.Log(LogLevel.Error, $"{Strings.InferColumnError}");
5859
logger.Log(LogLevel.Error, e.Message);
59-
logger.Log(LogLevel.Debug, e.ToString());
60+
logger.Log(LogLevel.Trace, e.ToString());
6061
logger.Log(LogLevel.Error, Strings.Exiting);
6162
return;
6263
}
@@ -79,9 +80,20 @@ public void GenerateCode()
7980
IEnumerable<RunDetail<BinaryClassificationMetrics>> binaryRunDetails = default;
8081
IEnumerable<RunDetail<MulticlassClassificationMetrics>> multiRunDetails = default;
8182
IEnumerable<RunDetail<RegressionMetrics>> regressionRunDetails = default;
83+
if (verboseLevel > LogLevel.Trace)
84+
{
85+
Console.Write($"{Strings.ExplorePipeline}: ");
86+
Console.ForegroundColor = ConsoleColor.Yellow;
87+
Console.WriteLine($"{settings.MlTask}");
88+
Console.ResetColor();
89+
Console.Write($"{Strings.FurtherLearning}: ");
90+
Console.ForegroundColor = ConsoleColor.Yellow;
91+
Console.WriteLine($"{ Strings.LearningHttpLink}");
92+
Console.ResetColor();
93+
}
8294

83-
Console.WriteLine($"{Strings.ExplorePipeline}: {settings.MlTask}");
84-
Console.WriteLine($"{Strings.FurtherLearning}: {Strings.LearningHttpLink}");
95+
logger.Log(LogLevel.Trace, $"{Strings.ExplorePipeline}: {settings.MlTask}");
96+
logger.Log(LogLevel.Trace, $"{Strings.FurtherLearning}: {Strings.LearningHttpLink}");
8597
try
8698
{
8799
var options = new ProgressBarOptions
@@ -93,7 +105,6 @@ public void GenerateCode()
93105
BackgroundCharacter = '─',
94106
};
95107
var wait = TimeSpan.FromSeconds(settings.MaxExplorationTime);
96-
var verboseLevel = Utils.GetVerbosity(settings.Verbosity);
97108

98109
if (verboseLevel > LogLevel.Trace && !Console.IsOutputRedirected)
99110
{
@@ -205,8 +216,8 @@ public void GenerateCode()
205216

206217
// Generate the Project
207218
GenerateProject(columnInference, bestPipeline, columnInformation.LabelColumnName, modelPath);
208-
logger.Log(LogLevel.Info, $"{Strings.GenerateModelConsumption} : { Path.Combine(settings.OutputPath.FullName, $"{settings.Name}.Predict")}");
209-
logger.Log(LogLevel.Info, $"{Strings.GenerateModelTraining} : { Path.Combine(settings.OutputPath.FullName, $"{settings.Name}.Train")}");
219+
logger.Log(LogLevel.Info, $"{Strings.GenerateModelConsumption}: { Path.Combine(settings.OutputPath.FullName, $"{settings.Name}.Predict")}");
220+
logger.Log(LogLevel.Info, $"{Strings.GenerateModelTraining}: { Path.Combine(settings.OutputPath.FullName, $"{settings.Name}.Train")}");
210221
Console.ResetColor();
211222
}
212223

src/mlnet/Utilities/ConsolePrinter.cs

+24
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ internal static void PrintIterationSummary(IEnumerable<RunDetail<BinaryClassific
8181
foreach (var pair in topNResults)
8282
{
8383
var result = pair.Item1;
84+
if (i == 0)
85+
{
86+
// Print top iteration colored.
87+
Console.ForegroundColor = ConsoleColor.Yellow;
88+
PrintMetrics(++i, result?.TrainerName, result?.ValidationMetrics, metricsAgent.GetScore(result?.ValidationMetrics), result?.RuntimeInSeconds, LogLevel.Info, pair.Item2);
89+
Console.ResetColor();
90+
continue;
91+
}
8492
PrintMetrics(++i, result?.TrainerName, result?.ValidationMetrics, metricsAgent.GetScore(result?.ValidationMetrics), result?.RuntimeInSeconds, LogLevel.Info, pair.Item2);
8593
}
8694
logger.Log(LogLevel.Info, TABLESEPERATOR);
@@ -99,6 +107,14 @@ internal static void PrintIterationSummary(IEnumerable<RunDetail<RegressionMetri
99107
foreach (var pair in topNResults)
100108
{
101109
var result = pair.Item1;
110+
if (i == 0)
111+
{
112+
// Print top iteration colored.
113+
Console.ForegroundColor = ConsoleColor.Yellow;
114+
PrintMetrics(++i, result?.TrainerName, result?.ValidationMetrics, metricsAgent.GetScore(result?.ValidationMetrics), result?.RuntimeInSeconds, LogLevel.Info, pair.Item2);
115+
Console.ResetColor();
116+
continue;
117+
}
102118
PrintMetrics(++i, result?.TrainerName, result?.ValidationMetrics, metricsAgent.GetScore(result?.ValidationMetrics), result?.RuntimeInSeconds, LogLevel.Info, pair.Item2);
103119
}
104120
logger.Log(LogLevel.Info, TABLESEPERATOR);
@@ -116,6 +132,14 @@ internal static void PrintIterationSummary(IEnumerable<RunDetail<MulticlassClass
116132
foreach (var pair in topNResults)
117133
{
118134
var result = pair.Item1;
135+
if (i == 0)
136+
{
137+
// Print top iteration colored.
138+
Console.ForegroundColor = ConsoleColor.Yellow;
139+
PrintMetrics(++i, result?.TrainerName, result?.ValidationMetrics, metricsAgent.GetScore(result?.ValidationMetrics), result?.RuntimeInSeconds, LogLevel.Info, pair.Item2);
140+
Console.ResetColor();
141+
continue;
142+
}
119143
PrintMetrics(++i, result?.TrainerName, result?.ValidationMetrics, metricsAgent.GetScore(result?.ValidationMetrics), result?.RuntimeInSeconds, LogLevel.Info, pair.Item2);
120144
}
121145
logger.Log(LogLevel.Info, TABLESEPERATOR);

src/mlnet/Utilities/ProgressHandlers.cs

+26-6
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ internal class BinaryClassificationHandler : IProgress<RunDetail<BinaryClassific
6464
private RunDetail<BinaryClassificationMetrics> bestResult;
6565
private int iterationIndex;
6666
private ProgressBar progressBar;
67-
private string optimizationMetric = string.Empty;
67+
private BinaryClassificationMetric optimizationMetric;
6868

6969
public BinaryClassificationHandler(BinaryClassificationMetric optimizationMetric, ProgressBar progressBar)
7070
{
7171
this.isMaximizing = new OptimizingMetricInfo(optimizationMetric).IsMaximizing;
72-
this.optimizationMetric = optimizationMetric.ToString();
72+
this.optimizationMetric = optimizationMetric;
7373
this.progressBar = progressBar;
7474
GetScore = (RunDetail<BinaryClassificationMetrics> result) => new BinaryMetricsAgent(null, optimizationMetric).GetScore(result?.ValidationMetrics);
7575
ConsolePrinter.PrintBinaryClassificationMetricsHeader(LogLevel.Trace);
@@ -80,14 +80,24 @@ public void Report(RunDetail<BinaryClassificationMetrics> iterationResult)
8080
iterationIndex++;
8181
UpdateBestResult(iterationResult);
8282
if (progressBar != null)
83-
progressBar.Message = $"Best {this.optimizationMetric}: {GetScore(bestResult):F4}, Best Algorithm: {bestResult?.TrainerName}, Last Algorithm: {iterationResult?.TrainerName}";
83+
progressBar.Message = GetProgressBarMessage(iterationResult);
8484
ConsolePrinter.PrintMetrics(iterationIndex, iterationResult?.TrainerName, iterationResult?.ValidationMetrics, GetScore(bestResult), iterationResult?.RuntimeInSeconds, LogLevel.Trace);
8585
if (iterationResult.Exception != null)
8686
{
8787
ConsolePrinter.PrintException(iterationResult.Exception, LogLevel.Trace);
8888
}
8989
}
9090

91+
private string GetProgressBarMessage(RunDetail<BinaryClassificationMetrics> iterationResult)
92+
{
93+
if (optimizationMetric == BinaryClassificationMetric.Accuracy)
94+
{
95+
return $"Best Accuracy: {GetScore(bestResult) * 100:F2}%, Best Algorithm: {bestResult?.TrainerName}, Last Algorithm: {iterationResult?.TrainerName}";
96+
}
97+
98+
return $"Best {this.optimizationMetric}: {GetScore(bestResult):F4}, Best Algorithm: {bestResult?.TrainerName}, Last Algorithm: {iterationResult?.TrainerName}";
99+
}
100+
91101
private void UpdateBestResult(RunDetail<BinaryClassificationMetrics> iterationResult)
92102
{
93103
if (MetricComparator(GetScore(iterationResult), GetScore(bestResult), isMaximizing) > 0)
@@ -104,12 +114,12 @@ internal class MulticlassClassificationHandler : IProgress<RunDetail<MulticlassC
104114
private RunDetail<MulticlassClassificationMetrics> bestResult;
105115
private int iterationIndex;
106116
private ProgressBar progressBar;
107-
private string optimizationMetric = string.Empty;
117+
private MulticlassClassificationMetric optimizationMetric;
108118

109119
public MulticlassClassificationHandler(MulticlassClassificationMetric optimizationMetric, ProgressBar progressBar)
110120
{
111121
this.isMaximizing = new OptimizingMetricInfo(optimizationMetric).IsMaximizing;
112-
this.optimizationMetric = optimizationMetric.ToString();
122+
this.optimizationMetric = optimizationMetric;
113123
this.progressBar = progressBar;
114124
GetScore = (RunDetail<MulticlassClassificationMetrics> result) => new MultiMetricsAgent(null, optimizationMetric).GetScore(result?.ValidationMetrics);
115125
ConsolePrinter.PrintMulticlassClassificationMetricsHeader(LogLevel.Trace);
@@ -120,7 +130,7 @@ public void Report(RunDetail<MulticlassClassificationMetrics> iterationResult)
120130
iterationIndex++;
121131
UpdateBestResult(iterationResult);
122132
if (progressBar != null)
123-
progressBar.Message = $"Best {this.optimizationMetric}: {GetScore(bestResult):F4}, Best Algorithm: {bestResult?.TrainerName}, Last Algorithm: {iterationResult?.TrainerName}";
133+
progressBar.Message = GetProgressBarMessage(iterationResult);
124134
ConsolePrinter.PrintMetrics(iterationIndex, iterationResult?.TrainerName, iterationResult?.ValidationMetrics, GetScore(bestResult), iterationResult?.RuntimeInSeconds, LogLevel.Trace);
125135
if (iterationResult.Exception != null)
126136
{
@@ -135,6 +145,16 @@ private void UpdateBestResult(RunDetail<MulticlassClassificationMetrics> iterati
135145
bestResult = iterationResult;
136146
}
137147
}
148+
149+
private string GetProgressBarMessage(RunDetail<MulticlassClassificationMetrics> iterationResult)
150+
{
151+
if (optimizationMetric == MulticlassClassificationMetric.MicroAccuracy)
152+
{
153+
return $"Best Accuracy: {GetScore(bestResult) * 100:F2}%, Best Algorithm: {bestResult?.TrainerName}, Last Algorithm: {iterationResult?.TrainerName}";
154+
}
155+
156+
return $"Best {this.optimizationMetric}: {GetScore(bestResult):F4}, Best Algorithm: {bestResult?.TrainerName}, Last Algorithm: {iterationResult?.TrainerName}";
157+
}
138158
}
139159

140160
}

0 commit comments

Comments
 (0)