in sdk/dotnet/AzureML-Samples-CSharp/Jobs/AutomlJob/AutoMLJobOperations.cs [130:258]
public static async Task<MachineLearningJobResource> SubmitAutoMLForecastAsync(
ResourceGroupResource resourceGroup,
string workspaceName,
string id,
string experimentName,
string environmentId,
string computeId)
{
Console.WriteLine("Creating an AutoML Forecast job...");
MachineLearningWorkspaceResource ws = await resourceGroup.GetMachineLearningWorkspaces().GetAsync(workspaceName);
var trainData = new MLTableJobInput(new Uri("https://raw.githubusercontent.com/Azure/azureml-examples/main/cli/jobs/automl-standalone-jobs/cli-automl-forecasting-task-energy-demand/training-mltable-folder"))
{
Mode = InputDeliveryMode.ReadOnlyMount,
Description = "Train data",
};
var validationData = new MLTableJobInput(new Uri("https://raw.githubusercontent.com/Azure/azureml-examples/main/cli/jobs/automl-standalone-jobs/cli-automl-forecasting-task-energy-demand/validation-mltable-folder"))
{
Mode = InputDeliveryMode.ReadOnlyMount,
Description = "Validation data",
};
var trainingDataSettings = new TrainingDataSettings(trainData);
AutoMLVertical taskDetails = new Forecasting
{
LogVerbosity = LogVerbosity.Debug,
PrimaryMetric = ForecastingPrimaryMetrics.NormalizedRootMeanSquaredError,
AllowedModels = new List<ForecastingModels>() { ForecastingModels.ExponentialSmoothing, ForecastingModels.GradientBoosting },
BlockedModels = new List<ForecastingModels>() { ForecastingModels.Average },
FeaturizationSettings = new TableVerticalFeaturizationSettings
{
EnableDnnFeaturization = false,
Mode = FeaturizationMode.Auto,
},
ForecastingSettings = new ForecastingSettings
{
CountryOrRegionForHolidays = "US",
TimeColumnName = "timeStamp",
ShortSeriesHandlingConfig = ShortSeriesHandlingConfiguration.Auto,
// Frequency = "1",
FeatureLags = FeatureLags.Auto,
TargetAggregateFunction = TargetAggregationFunction.Mean,
//// Time column name is present in the grain columns. Please remove it from grain list.
//TimeSeriesIdColumnNames = new List<string>() { "temp" },
UseStl = UseStl.Season,
// Number of periods between the origin time of one CV fold and the next fold.
CvStepSize = 1,
Seasonality = new AutoSeasonality(),
ForecastHorizon = new CustomForecastHorizon(2),
TargetLags = new CustomTargetLags(new List<int> { 1 }),
TargetRollingWindowSize = new AutoTargetRollingWindowSize(),
},
DataSettings = new TableVerticalDataSettings("precip", trainingDataSettings)
{
ValidationData = new TableVerticalValidationDataSettings()
{
Data = validationData,
// ValidationDataSize = .05,
NCrossValidations = new CustomNCrossValidations(2),
},
//// Test split is not supported for task type: forecasting.
//TestData = new TestDataSettings()
//{
// Data = testData,
// TestDataSize = .20,
//},
},
TrainingSettings = new TrainingSettings
{
EnableDnnTraining = false,
EnableStackEnsemble = false,
EnableVoteEnsemble = true,
EnsembleModelDownloadTimeout = TimeSpan.FromSeconds(250),
StackEnsembleSettings = new StackEnsembleSettings()
{
StackMetaLearnerTrainPercentage = 0.12,
StackMetaLearnerType = StackMetaLearnerType.LightGBMRegressor
},
EnableModelExplainability = false,
EnableOnnxCompatibleModels = false,
},
LimitSettings = new TableVerticalLimitSettings
{
MaxTrials = 5,
Timeout = TimeSpan.FromMinutes(1800),
MaxConcurrentTrials = 2,
EnableEarlyTermination = true,
ExitScore = 0.90,
MaxCoresPerTrial = -1,
TrialTimeout = TimeSpan.FromMinutes(1200),
},
};
// AutoMLVertical
var autoMLJob = new AutoMLJob(taskDetails)
{
ExperimentName = experimentName,
DisplayName = "AutoMLJob forecasting-" + Guid.NewGuid().ToString("n").Substring(0, 6),
EnvironmentId = environmentId,
IsArchived = false,
ComputeId = computeId,
Resources = new ResourceConfiguration
{
InstanceCount = 2,
},
Properties = new Dictionary<string, string>
{
{ "property-name", "property-value" },
},
Tags = new Dictionary<string, string>
{
{ "tag-name", "tag-value" },
},
// Environment variables included in the job.
EnvironmentVariables = new Dictionary<string, string>()
{
{ "env-var", "env-var-value" }
},
Description = "This is a description of test AutoMLJob for forecast",
};
MachineLearningJobData MachineLearningJobData = new MachineLearningJobData(autoMLJob);
ArmOperation<MachineLearningJobResource> jobOperation = await ws.GetMachineLearningJobs().CreateOrUpdateAsync(WaitUntil.Completed, id, MachineLearningJobData);
MachineLearningJobResource jobResource = jobOperation.Value;
Console.WriteLine($"JobCreateOrUpdateOperation {jobResource.Data.Id} created.");
return jobResource;
}