From 6f0ada64c8f42725aa39c7d01e4517252d4e58d3 Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Tue, 16 Apr 2019 00:52:56 -0700 Subject: [PATCH 1/4] Replace Preview API with IDataView based getter API. --- .../Calibrators/FixedPlatt.cs | 32 ++++++++++++------ .../Calibrators/Isotonic.cs | 33 ++++++++++++------- .../BinaryClassification/Calibrators/Naive.cs | 32 ++++++++++++------ .../BinaryClassification/Calibrators/Platt.cs | 32 ++++++++++++------ 4 files changed, 88 insertions(+), 41 deletions(-) diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs index 75b25dcb86..cd62a91e17 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs @@ -27,7 +27,7 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData.Preview(); + var scoredDataPreview = scoredData; PrintRowViewValues(scoredDataPreview); // Preview of scoredDataPreview.RowView @@ -45,7 +45,7 @@ public static void Example() // Transform the scored data with a calibrator transfomer by adding a new column names "Probability". // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. - var finalData = calibratorTransformer.Transform(scoredData).Preview(); + var finalData = calibratorTransformer.Transform(scoredData); PrintRowViewValues(finalData); // Score 4.18144 Probability 0.9856767 // Score -14.10248 Probability 7.890148E-07 @@ -54,18 +54,30 @@ public static void Example() // Score 5.36571 Probability 0.9955735 } - private static void PrintRowViewValues(Microsoft.ML.Data.DataDebuggerPreview data) + private static void PrintRowViewValues(IDataView transformedData) { - var firstRows = data.RowView.Take(5); - - foreach (Microsoft.ML.Data.DataDebuggerPreview.RowInfo row in firstRows) + int count = 0; + using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) { - foreach (var kvPair in row.Values) + var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); + var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; + while (cursor.MoveNext()) { - if (kvPair.Key.Equals("Score") || kvPair.Key.Equals("Probability")) - Console.Write($" {kvPair.Key} {kvPair.Value} "); + float score = default; + scoreGetter(ref score); + Console.Write("{0, -10} {1, -10}", "Score", score); + + if (probabilityGetter != null) + { + float probability = default; + probabilityGetter(ref probability); + Console.Write("{0, -10} {1, -10}", "Probability", probability); + } + + Console.WriteLine(); + if (count++ >= 4) + break; } - Console.WriteLine(); } } } diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs index 1bddd25d94..ad9ad05b29 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -27,7 +26,7 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData.Preview(); + var scoredDataPreview = scoredData; PrintRowViewValues(scoredDataPreview); // Preview of scoredDataPreview.RowView @@ -45,7 +44,7 @@ public static void Example() // Transform the scored data with a calibrator transfomer by adding a new column names "Probability". // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. - var finalData = calibratorTransformer.Transform(scoredData).Preview(); + var finalData = calibratorTransformer.Transform(scoredData); PrintRowViewValues(finalData); // Score 4.18144 Probability 0.8 // Score -14.10248 Probability 1E-15 @@ -54,18 +53,30 @@ public static void Example() // Score 5.36571 Probability 0.8958333 } - private static void PrintRowViewValues(Microsoft.ML.Data.DataDebuggerPreview data) + private static void PrintRowViewValues(IDataView transformedData) { - var firstRows = data.RowView.Take(5); - - foreach (Microsoft.ML.Data.DataDebuggerPreview.RowInfo row in firstRows) + int count = 0; + using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) { - foreach (var kvPair in row.Values) + var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); + var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; + while (cursor.MoveNext()) { - if (kvPair.Key.Equals("Score") || kvPair.Key.Equals("Probability")) - Console.Write($" {kvPair.Key} {kvPair.Value} "); + float score = default; + scoreGetter(ref score); + Console.Write("{0, -10} {1, -10}", "Score", score); + + if (probabilityGetter != null) + { + float probability = default; + probabilityGetter(ref probability); + Console.Write("{0, -10} {1, -10}", "Probability", probability); + } + + Console.WriteLine(); + if (count++ >= 4) + break; } - Console.WriteLine(); } } } diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs index 81f23a0974..3f16ab78a5 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs @@ -27,7 +27,7 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData.Preview(); + var scoredDataPreview = scoredData; PrintRowViewValues(scoredDataPreview); // Preview of scoredDataPreview.RowView @@ -45,7 +45,7 @@ public static void Example() // Transform the scored data with a calibrator transfomer by adding a new column names "Probability". // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. - var finalData = calibratorTransformer.Transform(scoredData).Preview(); + var finalData = calibratorTransformer.Transform(scoredData); PrintRowViewValues(finalData); // Score 4.18144 Probability 0.775 // Score -14.10248 Probability 0.01923077 @@ -54,18 +54,30 @@ public static void Example() // Score 5.36571 Probability 0.9117647 } - private static void PrintRowViewValues(Microsoft.ML.Data.DataDebuggerPreview data) + private static void PrintRowViewValues(IDataView transformedData) { - var firstRows = data.RowView.Take(5); - - foreach (Microsoft.ML.Data.DataDebuggerPreview.RowInfo row in firstRows) + int count = 0; + using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) { - foreach (var kvPair in row.Values) + var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); + var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; + while (cursor.MoveNext()) { - if (kvPair.Key.Equals("Score") || kvPair.Key.Equals("Probability")) - Console.Write($" {kvPair.Key} {kvPair.Value} "); + float score = default; + scoreGetter(ref score); + Console.Write("{0, -10} {1, -10}", "Score", score); + + if (probabilityGetter != null) + { + float probability = default; + probabilityGetter(ref probability); + Console.Write("{0, -10} {1, -10}", "Probability", probability); + } + + Console.WriteLine(); + if (count++ >= 4) + break; } - Console.WriteLine(); } } } diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs index f78f61de22..70680c7855 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs @@ -27,7 +27,7 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData.Preview(); + var scoredDataPreview = scoredData; PrintRowViewValues(scoredDataPreview); // Preview of scoredDataPreview.RowView @@ -45,7 +45,7 @@ public static void Example() // Transform the scored data with a calibrator transfomer by adding a new column names "Probability". // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. - var finalData = calibratorTransformer.Transform(scoredData).Preview(); + var finalData = calibratorTransformer.Transform(scoredData); PrintRowViewValues(finalData); // Score 4.18144 Probability 0.8511352 // Score -14.10248 Probability 0.001633563 @@ -54,18 +54,30 @@ public static void Example() // Score 5.36571 Probability 0.9065308 } - private static void PrintRowViewValues(Microsoft.ML.Data.DataDebuggerPreview data) + private static void PrintRowViewValues(IDataView transformedData) { - var firstRows = data.RowView.Take(5); - - foreach (Microsoft.ML.Data.DataDebuggerPreview.RowInfo row in firstRows) + int count = 0; + using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) { - foreach (var kvPair in row.Values) + var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); + var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; + while (cursor.MoveNext()) { - if (kvPair.Key.Equals("Score") || kvPair.Key.Equals("Probability")) - Console.Write($" {kvPair.Key} {kvPair.Value} "); + float score = default; + scoreGetter(ref score); + Console.Write("{0, -10} {1, -10}", "Score", score); + + if (probabilityGetter != null) + { + float probability = default; + probabilityGetter(ref probability); + Console.Write("{0, -10} {1, -10}", "Probability", probability); + } + + Console.WriteLine(); + if (count++ >= 4) + break; } - Console.WriteLine(); } } } From 34f3b05b909ce2314a1713d7418e2806be37e730 Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Tue, 16 Apr 2019 00:55:54 -0700 Subject: [PATCH 2/4] clean up. --- .../Trainers/BinaryClassification/Calibrators/FixedPlatt.cs | 1 - .../Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs | 1 - .../Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs | 1 - 3 files changed, 3 deletions(-) diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs index cd62a91e17..6e5ba5d4a5 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs index 3f16ab78a5..3d0cb21cfe 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs index 70680c7855..031c40c9cb 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs @@ -1,5 +1,4 @@ using System; -using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators From 8497308865be188285d2b656a1c6642efbd3abc5 Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Tue, 16 Apr 2019 21:35:41 -0700 Subject: [PATCH 3/4] PR feedback. --- .../Calibrators/FixedPlatt.cs | 55 +++++++++------- .../Calibrators/Isotonic.cs | 54 ++++++++------- .../BinaryClassification/Calibrators/Naive.cs | 65 ++++++++++--------- .../BinaryClassification/Calibrators/Platt.cs | 55 +++++++++------- 4 files changed, 129 insertions(+), 100 deletions(-) diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs index 6e5ba5d4a5..28cbf37d55 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -26,9 +27,8 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData; - - PrintRowViewValues(scoredDataPreview); + var outScores = mlContext.Data.CreateEnumerable(scoredData, reuseRowObject: false); + PrintScore(outScores, 5); // Preview of scoredDataPreview.RowView // Score 4.18144 // Score -14.10248 @@ -45,7 +45,8 @@ public static void Example() // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. var finalData = calibratorTransformer.Transform(scoredData); - PrintRowViewValues(finalData); + var outScoresAndProbabilities = mlContext.Data.CreateEnumerable(finalData, reuseRowObject: false); + PrintScoreAndProbability(outScoresAndProbabilities, 5); // Score 4.18144 Probability 0.9856767 // Score -14.10248 Probability 7.890148E-07 // Score 2.731951 Probability 0.9416927 @@ -53,31 +54,37 @@ public static void Example() // Score 5.36571 Probability 0.9955735 } - private static void PrintRowViewValues(IDataView transformedData) + private static void PrintScore(IEnumerable values, int rows) { - int count = 0; - using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) + foreach (var value in values) { - var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); - var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; - while (cursor.MoveNext()) - { - float score = default; - scoreGetter(ref score); - Console.Write("{0, -10} {1, -10}", "Score", score); + if (rows-- <= 0) + break; + + Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); + } + } - if (probabilityGetter != null) - { - float probability = default; - probabilityGetter(ref probability); - Console.Write("{0, -10} {1, -10}", "Probability", probability); - } + private static void PrintScoreAndProbability(IEnumerable values, int rows) + { + foreach (var value in values) + { + if (rows-- <= 0) + break; - Console.WriteLine(); - if (count++ >= 4) - break; - } + Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); } } + + private class ScoreValue + { + public float Score { get; set; } + } + + private class ScoreAndProbabilityValue + { + public float Score { get; set; } + public float Probability { get; set; } + } } } diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs index ad9ad05b29..125d74f086 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -26,9 +27,9 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData; + var outScores = mlContext.Data.CreateEnumerable(scoredData, reuseRowObject: false); - PrintRowViewValues(scoredDataPreview); + PrintScore(outScores, 5); // Preview of scoredDataPreview.RowView // Score 4.18144 // Score -14.10248 @@ -45,7 +46,8 @@ public static void Example() // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. var finalData = calibratorTransformer.Transform(scoredData); - PrintRowViewValues(finalData); + var outScoresAndProbabilities = mlContext.Data.CreateEnumerable(finalData, reuseRowObject: false); + PrintScoreAndProbability(outScoresAndProbabilities, 5); // Score 4.18144 Probability 0.8 // Score -14.10248 Probability 1E-15 // Score 2.731951 Probability 0.7370371 @@ -53,31 +55,37 @@ public static void Example() // Score 5.36571 Probability 0.8958333 } - private static void PrintRowViewValues(IDataView transformedData) + private static void PrintScore(IEnumerable values, int rows) { - int count = 0; - using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) + foreach (var value in values) { - var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); - var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; - while (cursor.MoveNext()) - { - float score = default; - scoreGetter(ref score); - Console.Write("{0, -10} {1, -10}", "Score", score); + if (rows-- <= 0) + break; - if (probabilityGetter != null) - { - float probability = default; - probabilityGetter(ref probability); - Console.Write("{0, -10} {1, -10}", "Probability", probability); - } + Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); + } + } + + private static void PrintScoreAndProbability(IEnumerable values, int rows) + { + foreach (var value in values) + { + if (rows-- <= 0) + break; - Console.WriteLine(); - if (count++ >= 4) - break; - } + Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); } } + + private class ScoreValue + { + public float Score { get; set; } + } + + private class ScoreAndProbabilityValue + { + public float Score { get; set; } + public float Probability { get; set; } + } } } diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs index 3d0cb21cfe..658028c758 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -26,9 +27,8 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData; - - PrintRowViewValues(scoredDataPreview); + var outScores = mlContext.Data.CreateEnumerable(scoredData, reuseRowObject: false); + PrintScore(outScores, 5); // Preview of scoredDataPreview.RowView // Score 4.18144 // Score -14.10248 @@ -45,39 +45,46 @@ public static void Example() // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. var finalData = calibratorTransformer.Transform(scoredData); - PrintRowViewValues(finalData); - // Score 4.18144 Probability 0.775 - // Score -14.10248 Probability 0.01923077 - // Score 2.731951 Probability 0.7738096 - // Score -2.554229 Probability 0.2011494 - // Score 5.36571 Probability 0.9117647 + var outScoresAndProbabilities = mlContext.Data.CreateEnumerable(finalData, reuseRowObject: false); + PrintScoreAndProbability(outScoresAndProbabilities, 5); + // Score 4.18144 Probability 0.775 + // Score -14.10248 Probability 0.01923077 + // Score 2.731951 Probability 0.7738096 + // Score -2.554229 Probability 0.2011494 + // Score 5.36571 Probability 0.9117647 } - private static void PrintRowViewValues(IDataView transformedData) + private static void PrintScore(IEnumerable values, int rows) { - int count = 0; - using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) + foreach (var value in values) { - var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); - var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; - while (cursor.MoveNext()) - { - float score = default; - scoreGetter(ref score); - Console.Write("{0, -10} {1, -10}", "Score", score); + if (rows-- <= 0) + break; + + Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); + } + } - if (probabilityGetter != null) - { - float probability = default; - probabilityGetter(ref probability); - Console.Write("{0, -10} {1, -10}", "Probability", probability); - } + private static void PrintScoreAndProbability(IEnumerable values, int rows) + { + foreach (var value in values) + { + if (rows-- <= 0) + break; - Console.WriteLine(); - if (count++ >= 4) - break; - } + Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); } } + + private class ScoreValue + { + public float Score { get; set; } + } + + private class ScoreAndProbabilityValue + { + public float Score { get; set; } + public float Probability { get; set; } + } } } diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs index 031c40c9cb..1a9eff4349 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -26,9 +27,8 @@ public static void Example() // Let's score the new data. The score will give us a numerical estimation of the chance that the particular sample // bears positive sentiment. This estimate is relative to the numbers obtained. var scoredData = transformer.Transform(trainTestData.TestSet); - var scoredDataPreview = scoredData; - - PrintRowViewValues(scoredDataPreview); + var outScores = mlContext.Data.CreateEnumerable(scoredData, reuseRowObject: false); + PrintScore(outScores, 5); // Preview of scoredDataPreview.RowView // Score 4.18144 // Score -14.10248 @@ -45,7 +45,8 @@ public static void Example() // This column is a calibrated version of the "Score" column, meaning its values are a valid probability value in the [0, 1] interval // representing the chance that the respective sample bears positive sentiment. var finalData = calibratorTransformer.Transform(scoredData); - PrintRowViewValues(finalData); + var outScoresAndProbabilities = mlContext.Data.CreateEnumerable(finalData, reuseRowObject: false); + PrintScoreAndProbability(outScoresAndProbabilities, 5); // Score 4.18144 Probability 0.8511352 // Score -14.10248 Probability 0.001633563 // Score 2.731951 Probability 0.7496456 @@ -53,31 +54,37 @@ public static void Example() // Score 5.36571 Probability 0.9065308 } - private static void PrintRowViewValues(IDataView transformedData) + private static void PrintScore(IEnumerable values, int rows) { - int count = 0; - using (var cursor = transformedData.GetRowCursor(transformedData.Schema)) + foreach (var value in values) { - var scoreGetter = cursor.GetGetter(cursor.Schema["Score"]); - var probabilityGetter = cursor.Schema.GetColumnOrNull("Probability") != null ? cursor.GetGetter(cursor.Schema["Probability"]) : null; - while (cursor.MoveNext()) - { - float score = default; - scoreGetter(ref score); - Console.Write("{0, -10} {1, -10}", "Score", score); + if (rows-- <= 0) + break; + + Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); + } + } - if (probabilityGetter != null) - { - float probability = default; - probabilityGetter(ref probability); - Console.Write("{0, -10} {1, -10}", "Probability", probability); - } + private static void PrintScoreAndProbability(IEnumerable values, int rows) + { + foreach (var value in values) + { + if (rows-- <= 0) + break; - Console.WriteLine(); - if (count++ >= 4) - break; - } + Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); } } + + private class ScoreValue + { + public float Score { get; set; } + } + + private class ScoreAndProbabilityValue + { + public float Score { get; set; } + public float Probability { get; set; } + } } } From 4d1f5a81be01b2def9e1a91c133d1ec1e3dac029 Mon Sep 17 00:00:00 2001 From: Zeeshan Siddiqui Date: Wed, 17 Apr 2019 09:32:38 -0700 Subject: [PATCH 4/4] PR feedback. --- .../Calibrators/FixedPlatt.cs | 19 +++++-------------- .../Calibrators/Isotonic.cs | 19 +++++-------------- .../BinaryClassification/Calibrators/Naive.cs | 19 +++++-------------- .../BinaryClassification/Calibrators/Platt.cs | 19 +++++-------------- 4 files changed, 20 insertions(+), 56 deletions(-) diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs index 28cbf37d55..1da43a7790 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/FixedPlatt.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -54,26 +55,16 @@ public static void Example() // Score 5.36571 Probability 0.9955735 } - private static void PrintScore(IEnumerable values, int rows) + private static void PrintScore(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); - } } - private static void PrintScoreAndProbability(IEnumerable values, int rows) + private static void PrintScoreAndProbability(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); - } } private class ScoreValue diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs index 125d74f086..15a3162d4e 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Isotonic.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -55,26 +56,16 @@ public static void Example() // Score 5.36571 Probability 0.8958333 } - private static void PrintScore(IEnumerable values, int rows) + private static void PrintScore(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); - } } - private static void PrintScoreAndProbability(IEnumerable values, int rows) + private static void PrintScoreAndProbability(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); - } } private class ScoreValue diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs index 658028c758..84a004b1c5 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Naive.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -54,26 +55,16 @@ public static void Example() // Score 5.36571 Probability 0.9117647 } - private static void PrintScore(IEnumerable values, int rows) + private static void PrintScore(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); - } } - private static void PrintScoreAndProbability(IEnumerable values, int rows) + private static void PrintScoreAndProbability(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); - } } private class ScoreValue diff --git a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs index 1a9eff4349..aa0d7d0798 100644 --- a/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs +++ b/docs/samples/Microsoft.ML.Samples/Dynamic/Trainers/BinaryClassification/Calibrators/Platt.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.ML; namespace Samples.Dynamic.Trainers.BinaryClassification.Calibrators @@ -54,26 +55,16 @@ public static void Example() // Score 5.36571 Probability 0.9065308 } - private static void PrintScore(IEnumerable values, int rows) + private static void PrintScore(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10}", "Score", value.Score); - } } - private static void PrintScoreAndProbability(IEnumerable values, int rows) + private static void PrintScoreAndProbability(IEnumerable values, int numRows) { - foreach (var value in values) - { - if (rows-- <= 0) - break; - + foreach (var value in values.Take(numRows)) Console.WriteLine("{0, -10} {1, -10} {2, -10} {3, -10}", "Score", value.Score, "Probability", value.Probability); - } } private class ScoreValue