LightGbm(this SweepableMultiClassificationTrainers trainer, string labelColumnName = "Label", string featureColumnName = "Features", SweepableOption <LightGbmMulticlassTrainer.Options> optionBuilder = null, LightGbmMulticlassTrainer.Options defaultOption = null)
        {
            var context = trainer.Context;

            if (optionBuilder == null)
            {
                optionBuilder = LightGbmMulticlassTrainerSweepableOptions.Default;
            }

            optionBuilder.SetDefaultOption(defaultOption);

            return(context.AutoML().CreateSweepableEstimator(
                       (context, option) =>
            {
                if (defaultOption != null)
                {
                    Util.CopyFieldsTo(defaultOption, option);
                }

                option.LabelColumnName = labelColumnName;
                option.FeatureColumnName = featureColumnName;
                return context.MulticlassClassification.Trainers.LightGbm(option);
            },
                       optionBuilder,
                       trainerName: nameof(LightGbmMulticlassTrainer),
                       inputs: new string[] { featureColumnName },
                       outputs: new string[] { PredictedLabel }));
        }
        NaiveBayes(this SweepableMultiClassificationTrainers trainer, string labelColumnName = "Label", string featureColumnName = "Features")
        {
            var context  = trainer.Context;
            var instance = context.MulticlassClassification.Trainers.NaiveBayes(labelColumnName, featureColumnName);

            return(context.AutoML().CreateUnsweepableEstimator(
                       instance,
                       estimatorName: nameof(NaiveBayesMulticlassTrainer),
                       inputs: new string[] { featureColumnName },
                       outputs: new string[] { PredictedLabel }));
        }
        OneVersusAll <TModel, TOption>(this SweepableMultiClassificationTrainers trainer, ISweepableEstimator <ITrainerEstimator <BinaryPredictionTransformer <TModel>, TModel>, TOption> node, string labelColumnName = "Label", bool imputeMissingLabelsAsNegative = false, Microsoft.ML.IEstimator <Microsoft.ML.ISingleFeaturePredictionTransformer <Microsoft.ML.Calibrators.ICalibrator> > calibrator = default, int maximumCalibrationExampleCount = 1000000000, bool useProbabilities = true)
            where TModel : class
            where TOption : class
        {
            var context = trainer.Context;

            return(context.AutoML().CreateSweepableEstimator(
                       (context, option) =>
            {
                var estimator = node.EstimatorFactory(option);
                return context.MulticlassClassification.Trainers.OneVersusAll(estimator, labelColumnName, imputeMissingLabelsAsNegative, calibrator, maximumCalibrationExampleCount, useProbabilities);
            },
                       node.OptionBuilder,
                       inputs: node.InputColumns,
                       outputs: node.OutputColumns,
                       trainerName: node.EstimatorName + "Ova"));
        }
        SdcaNonCalibreated(this SweepableMultiClassificationTrainers trainer, string labelColumnName = "Label", string featureColumnName = "Features", SweepableOption <SdcaNonCalibratedMulticlassTrainer.Options> optionBuilder = null, SdcaNonCalibratedMulticlassTrainer.Options defaultOption = null)
        {
            var context = trainer.Context;

            if (optionBuilder == null)
            {
                optionBuilder = SdcaNonCalibratedMulticlassTrainerSweepableOptions.Default;
            }

            optionBuilder.SetDefaultOption(defaultOption);

            return(context.AutoML().CreateSweepableEstimator(
                       (context, option) =>
            {
                option.LabelColumnName = labelColumnName;
                option.FeatureColumnName = featureColumnName;
                return context.MulticlassClassification.Trainers.SdcaNonCalibrated(option);
            },
                       optionBuilder,
                       trainerName: nameof(SdcaNonCalibratedMulticlassTrainer),
                       inputs: new string[] { featureColumnName },
                       outputs: new string[] { PredictedLabel }));
        }