Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Projection documentation - #3232

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation
Apr 12, 2019
Merged

Projection documentation#3232
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:Ivanidze/ProjectionDocumentation

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Towards #1209

// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = (X - M) / D where M is mean, and D is selected norm.

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the selected norm? Is it norm of the feature vector in a row being processed? Also, what are the shapes of X, Y, M, and D? #Pending

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mean -> mean vector
D is selected norm -> D is calculated value of selected norm parameter
Does that sound better?


In reply to: 273152443 [](ancestors = 273152443)

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Norm on what? A column? A row? Is it a scalar? In tensor computation, norm operation can produce another tensor.

Say, if I have rows, x_1, x_2, x_3. Is M=1/3 (x_1 + x_2 + x_3) true? Or M=ReduceSum(x_i) for the x subscripted by i? In addition, is D=||x_i||_2 for the x subscripted by i?


In reply to: 273153905 [](ancestors = 273153905,273152443)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here. Please move the final answer to what NormalizeLpNorm does' to the section for the estimator.


In reply to: 273181155 [](ancestors = 273181155,273153905,273152443)

{
public static class ApproximatedKernelMap
{
public static void Example()

@wschinwschinApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
publicstaticvoidExample()
// Transform feature vector to another non-linear space. See https://people.eecs.berkeley.edu/~brecht/papers/07.rah.rec.nips.pdf.
publicstaticvoidExample()

This transform is non-trivial, so some references are required. #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 [](start = 24, length = 1)

It shouldn't work! #Resolved


private class DataPoint
{
[VectorType(7)]

@Ivanidzo4kaIvanidzo4kaApr 8, 2019

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it shouldn't work! #Resolved

//-0.0119, 0.5867, 0.4942, 0.7041
// 0.4720, 0.5639, 0.4346, 0.2671
//-0.2243, 0.7071, 0.7053, -0.1681
// 0.0846, 0.5836, 0.6575, 0.0581

@artidoroartidoroApr 8, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you move these lines below the foreach loop and use:
// Expected output:

Could you do the same for the other files? #Resolved

@codecov

codecovBot commented Apr 9, 2019

Copy link
Copy Markdown

Codecov Report

Merging #3232 into master will decrease coverage by <.01%.
The diff coverage is n/a.

@@ Coverage Diff @@## master #3232 +/- ##
==========================================
- Coverage 72.62% 72.62% -0.01% 
==========================================
Files 807 807 Lines 145080 145080 Branches 16213 16213 ==========================================
- Hits 105369 105365 -4 - Misses 35294 35297 +3 - Partials 4417 4418 +1
FlagCoverage Δ
#Debug72.62% <ø> (-0.01%)⬇️
#production68.17% <ø> (-0.01%)⬇️
#test88.92% <ø> (-0.01%)⬇️
Impacted FilesCoverage Δ
src/Microsoft.ML.Transforms/NormalizerCatalog.cs84.78% <ø> (ø)⬆️
src/Microsoft.ML.Transforms/KernelCatalog.cs33.33% <ø> (ø)⬆️
...rosoft.ML.Transforms/FourierDistributionSampler.cs84.16% <ø> (ø)⬆️
...soft.ML.TestFramework/DataPipe/TestDataPipeBase.cs73.7% <0%> (-0.34%)⬇️
...StandardTrainers/Standard/LinearModelParameters.cs60.05% <0%> (-0.27%)⬇️

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[GlobalContrastNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeGlobalContrast.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalContrastNormalize [](start = 26, length = 23)

NormalizeGlobalContrast #Resolved

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[LpNormalize](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/NormalizeLpNorm.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LpNormalize [](start = 26, length = 11)

NormalizeLpNorm #Resolved

// Performs the following operaion on a row X: Y = (X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of selected `norm` parameter .
var approximation = mlContext.Transforms.NormalizeLpNorm("Features", norm: LpNormNormalizingEstimatorBase.NormFunction.L1, ensureZeroMean: true);

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ensureZeroMean [](start = 135, length = 14)

What does EnsureZeroMean do? Subtract the mean? #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, added it to comment above.


In reply to: 273740225 [](ancestors = 273740225)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move parameter details to xml docstring.


In reply to: 273741392 [](ancestors = 273741392,273740225)

/// <format type="text/markdown">
/// <![CDATA[
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/ProjectionTransforms.cs?range=1-6,12-112)]
/// [!code-csharp[CreateRandomFourierFeatures](~/../docs/samples/docs/samples/Microsoft.ML.Samples/Dynamic/Transforms/ApproximatedKernelMap.cs)]

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CreateRandomFourierFeatures [](start = 26, length = 27)

ApproximatedKernelMap #Resolved

foreach (var row in column)
Console.WriteLine(string.Join(", ", row.Select(x => x.ToString("f4"))));
// Expected output:
// -0.0119, 0.5867, 0.4942, 0.7041

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[](start = 14, length = 1)

Space Space #ByDesign

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer to align numbers, so one space was taken by minus sign.


In reply to: 273740487 [](ancestors = 273740487)

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row,
// and D(X) is scalar value of either Standard deviation or L2 norm.

@rogancarrrogancarrApr 9, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment looks like a copy/paste holdover. #Resolved

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you come up with better one?


In reply to: 273740748 [](ancestors = 273740748)

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NormalizeLpNorm [](start = 15, length = 15)

old name? #Resolved

};
// Convert training data to IDataView, the general data type used in ML.NET.
var data = mlContext.Data.LoadFromEnumerable(samples);
// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

normalize [](start = 31, length = 9)

normalizes #Resolved

// NormalizeLpNorm normalize rows individually by rescaling them to unit norm.
// Performs the following operaion on a row X: Y = scale *(X - M(X)) / D(X)
// where M(X) is scalar value of mean for current row if ensureZeroMean = true or 0 othewise
// and D(X) is scalar value of either Standard deviation or L2 norm.

@shmoradimsshmoradimsApr 12, 2019

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's actually drop detailed algorithm descriptions inside examples. such details belong to the section and we don't want to repeat them again here. #Resolved

/// <param name="scale">Scale features by this value.</param>
/// <remarks>
/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// where M(X) is scalar value of mean for all elements in the current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
``` #Resolved

/// This transform performs the following operation on a row X: Y = scale * (X - M(X)) / D(X)
/// where M(X) is scalar value of mean for current row if <paramref name="ensureZeroMean"/>set to <see langword="true"/> or <value>0</value> othewise
/// D(X) is scalar value of standard deviation for row if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="true"/> or
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.

@wschinwschinApr 12, 2019

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// L2 norm value for this row if it set to <see langword="false"/> and scale is <paramref name="scale"/>.
/// L2 norm of this row vector if <paramref name="ensureUnitStandardDeviation"/> set to <see langword="false"/>. "scale" is defined by <paramref name="scale"/>.
``` #Resolved

@shmoradimsshmoradims left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:shipit:

@Ivanidzo4ka
Ivanidzo4ka merged commit 9ca5a5a into dotnet:masterApr 12, 2019
@ghostghost locked as resolved and limited conversation to collaborators Mar 23, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@Ivanidzo4ka@wschin@artidoro@shmoradims@rogancarr