Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@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

Moving IModelCombiner to Ensemble and related changes - #1563

Merged
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner
Nov 7, 2018
Merged

Moving IModelCombiner to Ensemble and related changes#1563
TomFinley merged 1 commit into
dotnet:masterfrom
TomFinley:tfinley/MoveModelCombiner

Conversation

@TomFinley

Copy link
Copy Markdown
Contributor

This is an elaborate series of changes that are, incredibly, actually related and strongly dependent on each other. The end result is positive, but how we got there was kind of a wild ride. Hearken to my tale.

  • Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
    not in Core.

  • Remove dependency of Ensemble on FastTree.

  • Remove learners in Ensemble having defaults of FastTree or indeed any
    learner. (Incidentally: fixesConsider defaulting Ensemble Stacking to a trainer in StandardLearners #682.)

  • Rename FastTree Ensemble to TreeEnsemble, so as to avoid namespace/type
    collisions with that type and Ensemble namespace.

  • Add dependency of FastTree to Ensemble project so something there can
    implement TreeEnsembleCombiner.

  • Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
    Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
    since no project we intend to keep should depend on Legacy.

  • Move Legacy specific infrastructure that somehow was in StandardLearners
    over to Legacy.

  • Fix documentation in StandardLearners that was incorrectly referring to the
    Legacy pipelines and types directly, since in reality they have nothing to
    do with the types in Legacy.

* Move IModelCombiner out of Core to Ensemble since it clearly belongs there,
not in Core.
* Remove dependency of Ensemble on FastTree.
* Remove learners in Ensemble having defaults of FastTree or indeed any
learner. (Incidentally: fixesdotnet#682.)
* Rename *FastTree* Ensemble to TreeEnsemble, so as to avoid namespace/type
collisions with that type and Ensemble namespace.
* Add dependency of FastTree to Ensemble project so something there can
implement TreeEnsembleCombiner.
* Resolve circular dependency of FastTree -> Ensemble -> StandardLearners ->
Legacy -> FastTree by removing Legacy as dependency of StandardLearners,
since no project we intend to keep should depend on Legacy.
* Move Legacy specific infrastructure that somehow was in StandardLearners
over to Legacy.
* Fix documentation in StandardLearners that was incorrectly referring to the
Legacy pipelines and types directly, since in reality they have nothing to
do with the types in Legacy.
using TDistPredictor = IDistPredictorProducing<float, float>;
using CR = RoleMappedSchema.ColumnRole;

/// <include file='doc.xml' path='doc/members/member[@name="OVA"]' />

@TomFinleyTomFinleyNov 7, 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.

/// [](start = 4, length = 69)

Hi @sfilipi, I think you own this file? Despite its path, this documentation is very specific to ML.NET 0.1 pieplines (it is also linked in Legacy), so maybe we need something new here, or should update and re-link once we deprecate/delete legacy?

@TomFinleyTomFinley changed the title Moving IModelCombiner to Ensemble and subsequent adventuresMoving IModelCombiner to Ensemble and related changesNov 7, 2018
}

[TlcModule.EntryPoint(Name = "Models.OvaModelCombiner", Desc = "Combines a sequence of PredictorModels into a single model")]
public static PredictorModelOutput CombineOvaModels(IHostEnvironment env, CombineOvaPredictorModelsInput input)

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.

Just for my knowledge - what is the plan for these entry points that we plan on keeping? Do we remove all the "real legacy" stuff from ML.Legacy, and then rename the assembly?

Would this entry point be better served if it was in the Microsoft.ML.Ensemble assembly?

@TomFinleyTomFinleyNov 7, 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.

Good point. We've added some entry-points to legacy, but it's unclear to me whether these were intended to be legacy API entry-points only, or whether they were intended to be generally useful.

For example, we see the "model combiner" directly above this appears in NimbusML, and same for this one I just moved you're commenting on.

So both were published (because they're entry-points after all.) While the one I moved is not used there, the other one that's already here was, which is interesting.

So it is not going to be a problem for this specific code that I just moved, but it will definitely be a problem for these other things in this file. I've opened an issue #1565. It's not clear to me whether the usage of these entry-points in API was deliberate or a good idea, maybe someone that actually worked on NimbusML can comment more on this.

using System.Collections.Generic;
using Microsoft.ML.Runtime;

namespace Microsoft.ML.Runtime.Ensemble

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.

(nit) I'd prefer if we started matching folders and namespaces as much as possible. It makes finding files easier (just like if the file name and the class name match).

This file is in the Trainer folder, but not in a Trainer namespace.

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 indeed. I am making it consistent with the files here (so in a limited, myopic sense my action here was correct), but that does not change the fact that the system, such as it is, is slapdash and haphazard to the point where it's mostly futile to try to find anything without just a broad search. 😛 Let us open an issue on this, I will try to do so before I have to get the kids ready for school.

@TomFinleyTomFinleyNov 7, 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.

Actually this is not such a simple matter -- we first need to decide what those namespaces will be. Obviously it won't be Microsoft.ML.Runtime.Ensemble, but what? Microsoft.ML.Ensemble? Maybe there's already a proposal open for all I know. We have namespaces outlined for specific components I believe, but not a general principle.

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.

It seems very reasonable to me that the assembly name and the root namespace match (that's the default in .csproj files). So Microsoft.ML.Ensemble sounds like a good proposal to me.

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.

Either this, or Microsoft.ML.Borborygmization, I accept nothing else


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

@eerhardteerhardt 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:

@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:

@TomFinley

Copy link
Copy Markdown
ContributorAuthor

For some reason the build did not even start. Going to close and reopen to tickle it.

@TomFinleyTomFinley reopened this Nov 7, 2018
@TomFinley
TomFinley merged commit d3b70b5 into dotnet:masterNov 7, 2018
@TomFinley
TomFinley deleted the tfinley/MoveModelCombiner branch November 7, 2018 22:26
@ghostghost locked as resolved and limited conversation to collaborators Mar 26, 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.

Consider defaulting Ensemble Stacking to a trainer in StandardLearners

3 participants

@TomFinley@eerhardt@Zruty0