// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using System.Globalization; using System.Threading; using Microsoft.ML; using Microsoft.ML.AutoML; using Microsoft.ML.CodeGenerator.CSharp; using Microsoft.ML.TestFramework; using Microsoft.ML.Trainers; using Xunit; using Xunit.Abstractions; namespace mlnet.Tests { public class TrainerGeneratorTests : BaseTestClass { public TrainerGeneratorTests(ITestOutputHelper output) : base(output) { } [Fact] public void CultureInvariantTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"LearningRate", 0.1f }, {"NumberOfLeaves", 1 }, }; PipelineNode node = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); //Set culture to deutsch. var currentCulture = Thread.CurrentThread.CurrentCulture; Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE"); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); Thread.CurrentThread.CurrentCulture = currentCulture; string expectedTrainerString = "LightGbm(learningRate:0.1f,numberOfLeaves:1,labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void LightGbmBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"LearningRate", 0.1f }, {"NumberOfLeaves", 1 }, }; PipelineNode node = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "LightGbm(learningRate:0.1f,numberOfLeaves:1,labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void LightGbmBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"LearningRate", 0.1f }, {"NumLeaves", 1 }, {"UseSoftmax", true } }; PipelineNode node = new PipelineNode("LightGbmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "LightGbm(new LightGbmBinaryTrainer.Options(){LearningRate=0.1f,NumLeaves=1,UseSoftmax=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; string expectedUsings = "using Microsoft.ML.Trainers.LightGbm;\r\n"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void SymbolicSgdLogisticRegressionBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("SymbolicSgdLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "SymbolicSgdLogisticRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void SymbolicSgdLogisticRegressionBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"LearningRate", 0.1f }, }; PipelineNode node = new PipelineNode("SymbolicSgdLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "SymbolicSgdLogisticRegression(new SymbolicSgdLogisticRegressionBinaryTrainer.Options(){LearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void SgdCalibratedBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("SgdCalibratedBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "SgdCalibrated(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void SgdCalibratedBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shuffle", true }, }; PipelineNode node = new PipelineNode("SgdCalibratedBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "SgdCalibrated(new SgdCalibratedTrainer.Options(){Shuffle=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void SdcaLogisticRegressionBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("SdcaLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "SdcaLogisticRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void SdcaLogisticRegressionBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"BiasLearningRate", 0.1f }, }; PipelineNode node = new PipelineNode("SdcaLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "SdcaLogisticRegression(new SdcaLogisticRegressionBinaryTrainer.Options(){BiasLearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void SdcaMaximumEntropyMultiBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("SdcaMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "SdcaMaximumEntropy(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void SdcaMaximumEntropyMultiAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"BiasLearningRate", 0.1f }, }; PipelineNode node = new PipelineNode("SdcaMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "SdcaMaximumEntropy(new SdcaMaximumEntropyMulticlassTrainer.Options(){BiasLearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void SdcaRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("SdcaRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "Sdca(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void SdcaRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"BiasLearningRate", 0.1f }, }; PipelineNode node = new PipelineNode("SdcaRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "Sdca(new SdcaRegressionTrainer.Options(){BiasLearningRate=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void MatrixFactorizationBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("MatrixFactorization", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "MatrixFactorization(labelColumnName:\"Label\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void MatrixFactorizationAdvancedTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"MatrixColumnIndexColumnName","userId" }, {"MatrixRowIndexColumnName","movieId" }, {"LabelColumnName","rating" }, {nameof(MatrixFactorizationTrainer.Options.NumberOfIterations), 10 }, {nameof(MatrixFactorizationTrainer.Options.LearningRate), 0.01f }, {nameof(MatrixFactorizationTrainer.Options.ApproximationRank), 8 }, {nameof(MatrixFactorizationTrainer.Options.Lambda), 0.01f }, {nameof(MatrixFactorizationTrainer.Options.LossFunction), MatrixFactorizationTrainer.LossFunctionType.SquareLossRegression }, {nameof(MatrixFactorizationTrainer.Options.Alpha), 1f }, {nameof(MatrixFactorizationTrainer.Options.C), 0.00001f }, }; PipelineNode node = new PipelineNode("MatrixFactorization", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "MatrixFactorization(new MatrixFactorizationTrainer.Options(){MatrixColumnIndexColumnName=\"userId\",MatrixRowIndexColumnName=\"movieId\",LabelColumnName=\"rating\",NumberOfIterations=10,LearningRate=0.01f,ApproximationRank=8,Lambda=0.01f,LossFunction=MatrixFactorizationTrainer.LossFunctionType.SquareLossRegression,Alpha=1f,C=1E-05f})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(new string[] { "using Microsoft.ML.Trainers;\r\n" }, actual.Item2); } [Fact] public void LbfgsPoissonRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("LbfgsPoissonRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "LbfgsPoissonRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void LbfgsPoissonRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"MaximumNumberOfIterations", 1 }, }; PipelineNode node = new PipelineNode("LbfgsPoissonRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "LbfgsPoissonRegression(new LbfgsPoissonRegressionTrainer.Options(){MaximumNumberOfIterations=1,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void OlsRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("OlsRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "Ols(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void OlsRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"L2Regularization", 0.1f }, }; PipelineNode node = new PipelineNode("OlsRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "Ols(new OlsTrainer.Options(){L2Regularization=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void OnlineGradientDescentRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("OnlineGradientDescentRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "OnlineGradientDescent(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void OnlineGradientDescentRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"RecencyGainMulti", true }, }; PipelineNode node = new PipelineNode("OnlineGradientDescentRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "OnlineGradientDescent(new OnlineGradientDescentTrainer.Options(){RecencyGainMulti=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void LbfgsLogisticRegressionBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("LbfgsLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "LbfgsLogisticRegression(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void LbfgsLogisticRegressionBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"DenseOptimizer", true }, }; PipelineNode node = new PipelineNode("LbfgsLogisticRegressionBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "LbfgsLogisticRegression(new LbfgsLogisticRegressionBinaryTrainer.Options(){DenseOptimizer=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void LbfgsMaximumEntropyMultiMultiBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("LbfgsMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "LbfgsMaximumEntropy(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void LbfgsMaximumEntropyMultiAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"DenseOptimizer", true }, }; PipelineNode node = new PipelineNode("LbfgsMaximumEntropyMulti", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "LbfgsMaximumEntropy(new LbfgsMaximumEntropyMulticlassTrainer.Options(){DenseOptimizer=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void LinearSvmBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("LinearSvmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "LinearSvm(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void LinearSvmBinaryParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"NoBias", true }, }; PipelineNode node = new PipelineNode("LinearSvmBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n "; string expectedTrainerString = "LinearSvm(new LinearSvmTrainer.Options(){NoBias=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void FastTreeTweedieRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("FastTreeTweedieRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "FastTreeTweedie(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void FastTreeTweedieRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shrinkage", 0.1f }, }; PipelineNode node = new PipelineNode("OnlineGradientDescentRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n"; string expectedTrainerString = "OnlineGradientDescent(new OnlineGradientDescentTrainer.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void FastTreeRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("FastTreeRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "FastTree(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void FastTreeRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shrinkage", 0.1f }, }; PipelineNode node = new PipelineNode("FastTreeRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n"; string expectedTrainerString = "FastTree(new FastTreeRegressionTrainer.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void FastTreeBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("FastTreeBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "FastTree(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void FastTreeBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shrinkage", 0.1f }, }; PipelineNode node = new PipelineNode("FastTreeBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n"; string expectedTrainerString = "FastTree(new FastTreeBinaryTrainer.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void FastForestRegressionBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("FastForestRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "FastForest(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void FastForestRegressionAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shrinkage", 0.1f }, }; PipelineNode node = new PipelineNode("FastForestRegression", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n"; string expectedTrainerString = "FastForest(new FastForestRegression.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void FastForestBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("FastForestBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "FastForest(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void FastForestBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shrinkage", 0.1f }, }; PipelineNode node = new PipelineNode("FastForestBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers.FastTree;\r\n"; string expectedTrainerString = "FastForest(new FastForestClassification.Options(){Shrinkage=0.1f,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void AveragedPerceptronBinaryBasicTest() { var context = new MLContext(); var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("AveragedPerceptronBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "AveragedPerceptron(labelColumnName:\"Label\",featureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } [Fact] public void AveragedPerceptronBinaryAdvancedParameterTest() { var context = new MLContext(); var elementProperties = new Dictionary() { {"Shuffle", true }, }; PipelineNode node = new PipelineNode("AveragedPerceptronBinary", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); var expectedUsings = "using Microsoft.ML.Trainers;\r\n "; string expectedTrainerString = "AveragedPerceptron(new AveragedPerceptronTrainer.Options(){Shuffle=true,LabelColumnName=\"Label\",FeatureColumnName=\"Features\"})"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Equal(expectedUsings, actual.Item2[0]); } [Fact] public void ImageClassificationTrainerBasicTest() { var elementProperties = new Dictionary(); PipelineNode node = new PipelineNode("ImageClassification", PipelineNodeType.Trainer, default(string[]), default(string), elementProperties); Pipeline pipeline = new Pipeline(new PipelineNode[] { node }); CodeGenerator codeGenerator = new CodeGenerator(pipeline, null, null); var actual = codeGenerator.GenerateTrainerAndUsings(); string expectedTrainerString = "ImageClassification(LabelColumnName:\"Label\",FeatureColumnName:\"Features\")"; Assert.Equal(expectedTrainerString, actual.Item1); Assert.Null(actual.Item2); } } }