예제 #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
        /// <summary>
        /// Create a single featurize pipeline according to <paramref name="columnInformation"/>. This function will collect all columns in <paramref name="columnInformation"/>,
        /// featurizing them using <see cref="CatalogFeaturizer(string[], string[])"/>, <see cref="NumericFeaturizer(string[], string[])"/> or <see cref="TextFeaturizer(string, string)"/>. And combine
        /// them into a single feature column as output.
        /// </summary>
        /// <param name="data">input data.</param>
        /// <param name="columnInformation">column information.</param>
        /// <param name="outputColumnName">output feature column.</param>
        /// <returns>A <see cref="MultiModelPipeline"/> for featurization.</returns>
        public MultiModelPipeline Featurizer(IDataView data, ColumnInformation columnInformation, string outputColumnName = "Features")
        {
            Contracts.CheckValue(data, nameof(data));
            Contracts.CheckValue(columnInformation, nameof(columnInformation));

            var columnPurposes            = PurposeInference.InferPurposes(this._context, data, columnInformation);
            var textFeatures              = columnPurposes.Where(c => c.Purpose == ColumnPurpose.TextFeature);
            var numericFeatures           = columnPurposes.Where(c => c.Purpose == ColumnPurpose.NumericFeature);
            var catalogFeatures           = columnPurposes.Where(c => c.Purpose == ColumnPurpose.CategoricalFeature);
            var textFeatureColumnNames    = textFeatures.Select(c => data.Schema[c.ColumnIndex].Name).ToArray();
            var numericFeatureColumnNames = numericFeatures.Select(c => data.Schema[c.ColumnIndex].Name).ToArray();
            var catalogFeatureColumnNames = catalogFeatures.Select(c => data.Schema[c.ColumnIndex].Name).ToArray();

            var pipeline = new MultiModelPipeline();

            if (numericFeatureColumnNames.Length > 0)
            {
                pipeline = pipeline.Append(this.NumericFeaturizer(numericFeatureColumnNames, numericFeatureColumnNames));
            }

            if (catalogFeatureColumnNames.Length > 0)
            {
                pipeline = pipeline.Append(this.CatalogFeaturizer(catalogFeatureColumnNames, catalogFeatureColumnNames));
            }

            foreach (var textColumn in textFeatureColumnNames)
            {
                pipeline = pipeline.Append(this.TextFeaturizer(textColumn, textColumn));
            }

            var option = new ConcatOption
            {
                InputColumnNames = textFeatureColumnNames.Concat(numericFeatureColumnNames).Concat(catalogFeatureColumnNames).ToArray(),
                OutputColumnName = outputColumnName,
            };

            if (option.InputColumnNames.Length > 0)
            {
                pipeline = pipeline.Append(SweepableEstimatorFactory.CreateConcatenate(option));
            }

            return(pipeline);
        }
예제 #3
0
        static void Main(string[] args)
        {
            IWriter writer       = new ConsoleWriter();
            IOption firstOption  = new ConcatOption(writer);
            IOption secondOption = new UpperCaseOption(writer);


            IDictionary <int, IOption> Subdictionary = new Dictionary <int, IOption>();
            IMenu <int>          subMenu             = new Menu <int>(Subdictionary);
            IMenuDisplayer <int> displaySubMenu      = new ConsoleDisplayer <int>(writer);
            IValidator <int>     validator           = new MenuValidator <int>();
            IReader           reader     = new ConsoleReader(writer);
            IDataReader <int> dataReader = new DataReader <int>(validator, reader);

            IUserMenu <int> userSubMenu = new UserMenu <int>(displaySubMenu, dataReader, writer);


            IOption           thirdOption   = new SubDicitonaryOption <int>(userSubMenu, subMenu);
            IOption           lastOption    = new ExitOption();
            IMengedMenu <int> subMengedMenu = new MengedMenu <int>(subMenu);

            subMengedMenu.AddOption(1, firstOption);
            subMengedMenu.AddOption(4, lastOption);
            IDictionary <int, IOption> dictionary = new Dictionary <int, IOption>();
            IMenu <int>       menu       = new Menu <int>(dictionary);
            IMengedMenu <int> mengedMenu = new MengedMenu <int>(menu);

            mengedMenu.AddOption(1, firstOption);
            mengedMenu.AddOption(2, secondOption);
            mengedMenu.AddOption(3, thirdOption);
            mengedMenu.AddOption(4, lastOption);
            IMenuDisplayer <int> displayMenu = new ConsoleDisplayer <int>(writer);
            //IValidator<int> validator = new MenuValidator<int>();
            //IReader reader = new ConsoleReader(writer);
            //IDataReader<int> dataReader = new DataReader<int>(validator, reader);

            IUserMenu <int> mainMenu = new UserMenu <int>(displayMenu, dataReader, writer);

            mainMenu.Run(menu);
        }
예제 #4
0
 public override IEstimator <ITransformer> BuildFromOption(MLContext context, ConcatOption param)
 {
     return(context.Transforms.Concatenate(param.OutputColumnName, param.InputColumnNames));
 }