NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0
, '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

NAReplace estimator - #917

Merged
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace
Sep 19, 2018
Merged

NAReplace estimator#917
Ivanidzo4ka merged 11 commits into
dotnet:masterfrom
Ivanidzo4ka:ivanidze/NaReplace

Conversation

@Ivanidzo4ka

Copy link
Copy Markdown
Contributor

Converts NAReplace to estimator

@Ivanidzo4kaIvanidzo4ka self-assigned this Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added the API Issues pertaining the friendly API label Sep 14, 2018
@Ivanidzo4kaIvanidzo4ka added this to the 0918 milestone Sep 14, 2018
@Zruty0Zruty0 mentioned this pull request Sep 14, 2018
public readonly bool ImputeBySlot;
public readonly ReplacementKind Kind;

public ColumnInfo(string input, string output, ReplacementKind kind = ReplacementKind.DefaultValue, bool imputeBySlot = true)

@Zruty0Zruty0Sep 14, 2018

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.

ColumnInfo [](start = 19, length = 10)

summary comment #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.

Is it a good comment?


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

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.

summary: Describes how the transformer handles one column pair.
input: name of input column
output: name of output column
replacementMode: what to replace the missing value with
imputeBySlot: if true, per-slot imputation of replacement is performed. Otherwise, replacement value is imputed for the entire vector column. This setting is ignored for scalars and variable vectors, where imputation is always for the entire column.


In reply to: 217855806 [](ancestors = 217855806,217834730)

return columns.Select(x => (x.Input, x.Output)).ToArray();
}

///IVAN: move to mapper.

@Zruty0Zruty0Sep 14, 2018

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.

move to mapper. [](start = 17, length = 15)

maybe just turn into one 'type' ? The rest is accessible via _parent.ColumnPairs #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.

I'm actually quite tempted to move whole ColInfo into MapperBase.
Since it's heavily used almost in every mapper I wrote.

But yeah, I have _types array which I will use in Estimator.


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

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.

Moving ColInfo to MapperBase will be a bit unwieldy I think.


In reply to: 217836517 [](ancestors = 217836517,217834859)

var type = inputSchema.GetColumnType(srcCol);
string reason = TestType(type);
if (reason != null)
//IVAN: not sure about schema mismatch

@Zruty0Zruty0Sep 14, 2018

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.

t sure about schema mismatch [](start = 26, length = 28)

no, it looks right #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.

Look on TestType and what kind of string it returns.
No way I can convert it to current SchemaMismatch wording.


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

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.

oh yuck. Ok, then do ExceptParam


In reply to: 217836776 [](ancestors = 217836776,217835064)

var colMetaInfo = new ColumnMetadataInfo(_parent.ColumnPairs[i].output);
foreach (var type in InputSchema.GetMetadataTypes(colIndex).Where(x => x.Key == MetadataUtils.Kinds.SlotNames || x.Key == MetadataUtils.Kinds.IsNormalized))
Utils.MarshalInvoke(AddMetaGetter<int>, type.Value.RawType, colMetaInfo, InputSchema, type.Key, type.Value, colIndex);
result[i] = new RowMapperColumnInfo(_parent.ColumnPairs[i].output, _parent._types[i], colMetaInfo);

@Zruty0Zruty0Sep 14, 2018

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.

colMetaInfo [](start = 106, length = 11)

can we just do RowColumnUtils.GetMetadataAsRow(InputSchema, colIndex, x=> x == SlotNames || x == IsNormalized) ? #Resolved

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 is the whole purpose of this 'metadata as IRow' exercise, to avoid creating such 'identity getters' for metadata


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

@Zruty0Zruty0 left a comment

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.

:shipit:

using Microsoft.ML.Runtime.Internal.Utilities;
using Microsoft.ML.Runtime.Model;
using Microsoft.ML.Runtime.Model.Onnx;
using Microsoft.ML.Core.Data;

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

using Microsoft.ML.Core.Data [](start = 0, length = 28)

Why VS can't sort it properly, why, oh why? #Resolved

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

after re-activating resharper, the sorting problem went away.

also, are we doing system, than Microsoft.ML or vice versa in ML.NET?


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

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.

Let's do what Ctrl-R-G does (which is alphabetically)


In reply to: 217875183 [](ancestors = 217875183,217855717)

public static class NAHandleTransform
{
public enum ReplacementKind
public enum ReplacementKind:byte

@Ivanidzo4kaIvanidzo4kaSep 14, 2018

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.

:byte [](start = 35, length = 5)

ctrl+k+d #Resolved

// creating output columns that are identical to the input columns except for replacing NA values
// with either the default value, user input, or imputed values (min/max/mean are currently supported).
// Imputation modes are supported for vectors both by slot and across all slots.
// REVIEW: May make sense to implement the transform template interface.

@sfilipisfilipiSep 15, 2018

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

why remove it? why remove the doc link? #Closed

namespace Legacy.Transforms
{
public enum NAReplaceTransformReplacementKind
public enum NAReplaceTransformReplacementKind : byte

@Zruty0Zruty0Sep 17, 2018

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.

: byte [](start = 53, length = 7)

fix codegen? Or is it already good? #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.

it's already good


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


var est = data.MakeNewEstimator().
Append(row => (
A: row.ScalarString.NAReplace(),

@Zruty0Zruty0Sep 17, 2018

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.

NAReplace [](start = 39, length = 9)

ReplaceMissingValues( #Resolved


[assembly: LoadableClass(typeof(NAReplaceTransform), typeof(NAReplaceTransform.Arguments), typeof(SignatureDataTransform),
NAReplaceTransform.FriendlyName, NAReplaceTransform.LoadName, "NAReplace", NAReplaceTransform.ShortName, DocName = "transform/NAHandle.md")]
[assembly: LoadableClass(NAReplaceTransform.Summary, typeof(IDataView), typeof(NAReplaceTransform), null, typeof(SignatureLoadDataTransform),

@Ivanidzo4kaIvanidzo4kaSep 18, 2018

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.

IDataView [](start = 60, length = 9)

IDataTransform #Resolved

@Ivanidzo4kaIvanidzo4ka changed the title WIP NAReplace estimatorNAReplace estimatorSep 18, 2018

@sfilipisfilipi left a comment

Copy link
Copy Markdown
Member

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 731381c into dotnet:masterSep 19, 2018
@ghostghost locked as resolved and limited conversation to collaborators Mar 29, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

APIIssues pertaining the friendly API

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@Ivanidzo4ka@sfilipi@Zruty0