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)); }
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, }); }
public void SweepablePipeline_summary_should_work() { var sweepablePipeline = new SweepablePipeline() .Append(new MockTransformer()) .Append(new MockEstimatorBuilder("mockEstimator")); sweepablePipeline.ToString().Should().Be("SweepablePipeline([MockTransformer]=>[mockEstimator])"); }
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); }
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); }
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()); }