Пример #1
0
        public void SweepablePipeline_Append_SweepableEstimator_Test()
        {
            var pipeline     = new SweepablePipeline();
            var concatOption = new ConcatOption()
            {
                InputColumnNames = new List <string> {
                    "a", "b", "c"
                }.ToArray(),
                OutputColumnName = "a",
            };
            var lgbmOption = new LgbmOption()
            {
                FeatureColumnName = "Feature",
                LabelColumnName   = "Label",
            };

            // pipeline can append a single sweepable estimator
            pipeline = pipeline.Append(SweepableEstimatorFactory.CreateConcatenate(concatOption));

            // pipeline can append muliple sweepable estimators.
            pipeline = pipeline.Append(SweepableEstimatorFactory.CreateLightGbmBinary(lgbmOption), SweepableEstimatorFactory.CreateConcatenate(concatOption));

            // pipeline can append sweepable pipelines mixed with sweepble estimators
            pipeline = pipeline.Append(SweepableEstimatorFactory.CreateConcatenate(concatOption), pipeline);

            // pipeline can append sweepable pipelines.
            pipeline = pipeline.Append(pipeline, pipeline);

            Approvals.Verify(JsonSerializer.Serialize(pipeline, _jsonSerializerOptions));
        }
Пример #2
0
        public static SweepablePipelineDataContract ToDataContract(this SweepablePipeline pipeline)
        {
            var estimatorContracts = new List <List <SweepableEstimatorDataContract> >();
            var nodes = pipeline.EstimatorGenerators;

            foreach (var node in nodes)
            {
                var estimators = new List <SweepableEstimatorDataContract>();
                for (int i = 0; i != node.Count; ++i)
                {
                    var estimator         = node[i].RawValue as SweepableEstimatorBase;
                    var estimatorContract = new SweepableEstimatorDataContract()
                    {
                        EstimatorName = estimator.EstimatorName,
                        InputColumns  = estimator.InputColumns,
                        OutputColumns = estimator.OutputColumns,
                        Scope         = estimator.Scope,
                    };
                    estimators.Add(estimatorContract);
                }

                estimatorContracts.Add(estimators);
            }

            return(new SweepablePipelineDataContract()
            {
                Estimators = estimatorContracts,
            });
        }
Пример #3
0
        public void SweepablePipeline_summary_should_work()
        {
            var sweepablePipeline = new SweepablePipeline()
                                    .Append(new MockTransformer())
                                    .Append(new MockEstimatorBuilder("mockEstimator"));

            sweepablePipeline.ToString().Should().Be("SweepablePipeline([MockTransformer]=>[mockEstimator])");
        }
Пример #4
0
        public static SweepablePipeline ToPipeline(this SweepablePipelineDataContract pipelineContract, MLContext context)
        {
            var sweepablePipeline = new SweepablePipeline();

            foreach (var node in pipelineContract.Estimators)
            {
                sweepablePipeline.Append(node.Select(n => context.AutoML().Serializable().Factory.CreateSweepableEstimator(n)).ToArray());
            }

            return(sweepablePipeline);
        }
Пример #5
0
        public SweepablePipeline BuildPipeline(MLContext context, IEnumerable <Column> columns)
        {
            var sweepablePipeline = new SweepablePipeline();

            foreach (var column in columns)
            {
                switch (column.ColumnPurpose)
                {
                case ColumnPurpose.NumericFeature:
                    sweepablePipeline.Append(this.GetSuggestedNumericColumnTransformers(context, column).ToArray());
                    break;

                case ColumnPurpose.CategoricalFeature:
                    sweepablePipeline.Append(this.GetSuggestedCatagoricalColumnTransformers(context, column).ToArray());
                    break;

                case ColumnPurpose.TextFeature:
                    sweepablePipeline.Append(this.GetSuggestedTextColumnTransformers(context, column).ToArray());
                    break;

                case ColumnPurpose.Label:
                    sweepablePipeline.Append(this.GetSuggestedLabelColumnTransformers(context, column).ToArray());
                    break;

                default:
                    break;
                }
            }

            var featureColumns = columns.Where(c => c.ColumnPurpose == ColumnPurpose.CategoricalFeature ||
                                               c.ColumnPurpose == ColumnPurpose.NumericFeature ||
                                               c.ColumnPurpose == ColumnPurpose.TextFeature)
                                 .Select(c => c.Name)
                                 .ToArray();

            if (this.PipelineBuilderOption.IsUsingSingleFeatureTrainer)
            {
                sweepablePipeline.Append(context.AutoML().Serializable().Transformer.Concatnate(featureColumns, "_FEATURE"));
                var labelColumn = columns.Where(c => c.ColumnPurpose == ColumnPurpose.Label).First();
                sweepablePipeline.Append(this.GetSuggestedSingleFeatureTrainers(context, labelColumn, "_FEATURE").ToArray());
            }

            return(sweepablePipeline);
        }
Пример #6
0
        public void SweepablePipeline_should_create_SingleEstimatorSweepablePipeline()
        {
            var sweepablePipeline = new SweepablePipeline()
                                    .Append(new MockEstimatorBuilder("estimator1_1"))
                                    .Append(new MockEstimatorBuilder("estimator2_1"), new MockEstimatorBuilder("estimator2_2"))
                                    .Append(new MockEstimatorBuilder("estimator3_1"), new MockEstimatorBuilder("estimator3_2"), new MockEstimatorBuilder("estimator3_3"));

            var res = new StringBuilder();

            res.AppendLine(sweepablePipeline.ToString());

            var sweeper = new GridSearchSweeper();

            foreach (var param in sweeper.ProposeSweeps(sweepablePipeline, 100))
            {
                var singleEstimatorPipeline = sweepablePipeline.BuildFromParameters(param);
                res.AppendLine(singleEstimatorPipeline.ToString());
            }

            Approvals.Verify(res.ToString());
        }