static void Main(string[] args) { MLContext context = new MLContext(); IDataView dataView = context.Data.LoadFromTextFile <ModelInput>(path: "data.csv", hasHeader: false, separatorChar: ';'); IDataView trainingYearData = context.Data.FilterRowsByColumn(dataView, "Year", upperBound: 2019); IDataView evaluateYearData = context.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 2020); var forecastingPipeline = context.Forecasting.ForecastBySsa( outputColumnName: "ForecastedIncidents", inputColumnName: "TotalIncidents", windowSize: 2, seriesLength: 7, trainSize: 365, horizon: 7, confidenceLevel: 0.5f, confidenceLowerBoundColumn: "LowerBoundIncidents", confidenceUpperBoundColumn: "UpperBoundIncidents"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(trainingYearData); Evaluate(evaluateYearData, forecaster, context); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(context); forecastEngine.CheckPoint(context, "ML.IncidentAmountForecast.zip"); Forecast(evaluateYearData, 7, forecastEngine, context); }
static void Main(string[] args) { Console.WriteLine("Training time series analysis"); //Step 1. Create a ML Context var ctx = new MLContext(); string connectionString = "Data Source=localhost;Initial Catalog=kaggle_wallmart;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;"; connectionString = "Server=localhost;Database=kaggle_wallmart;Integrated Security=True"; string Query = @" SELECT CAST(X.[Value] AS REAL) AS [TotalSales], CAST(Y.date AS DATE) AS [SalesDate], CAST(year(Y.date) AS REAL) As [Year] FROM [dbo].[RAW_Train_Eval] AS X INNER JOIN [dbo].RAW_Calendar AS Y ON Y.d=X.dCode where Id='HOBBIES_1_278_CA_1_evaluation' order by 2 "; Console.WriteLine("Connecting to the database..."); //dbChecks dbchecks = new dbChecks(); //dbchecks.ExecuteQuery(connectionString, Query); System.Data.SqlClient.SqlClientFactory newFactory = SqlClientFactory.Instance; Console.WriteLine("Loading data..."); DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, Query); DatabaseLoader loader = ctx.Data.CreateDatabaseLoader <ModelInput>(); IDataView dataView = loader.Load(dbSource); Console.WriteLine($"Loaded {dataView.GetRowCount()} rows..."); IDataView trainingData = ctx.Data.FilterRowsByColumn(dataView, "Year", upperBound: 2016); IDataView ValidationData = ctx.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 2016); var forecastingPipeline = ctx.Forecasting.ForecastBySsa( outputColumnName: "ForecastedSales", inputColumnName: "TotalSales", windowSize: 7, seriesLength: 60, trainSize: 300, horizon: 30, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundSales", confidenceUpperBoundColumn: "UpperBoundSales"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(trainingData); Evaluate(ValidationData, forecaster, ctx); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(ctx); forecastEngine.CheckPoint(ctx, "c:\\temp\\Model.zip"); forecastEngine.CheckPoint(ctx, "C:\\Temp\\WallMartModels\\evaluation\\Model_HOBBIES_1_278_CA_1_evaluation.zip"); Forecast(ValidationData, 7, forecastEngine, ctx); Console.WriteLine("Training time series analysis completed"); }
static void Main(string[] args) { string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../")); //string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf"); string modelPath = Path.Combine(rootDir, "MLModel.zip"); // var connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;"; // you can use TblSmartAr.sql and able to make this table var connectionString = $"Data Source = (localdb)\\MSSQLLocalDB; Initial Catalog = Ar_Database; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False;"; MLContext mlContext = new MLContext(); DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>(); string query = "SELECT Invoice_Date, CAST(Due_year as REAL) as Due_year, CAST(OverDue_Days as REAL) as OverDue_Days FROM TblSmartAR"; DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, query); DateTime now = DateTime.Today; int thisyear = (now.Year); IDataView dataView = loader.Load(dbSource); IDataView firstYearData = mlContext.Data.FilterRowsByColumn(dataView, "Due_year", upperBound: thisyear); IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Due_year", lowerBound: thisyear); var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedDays", inputColumnName: "OverDue_Days", windowSize: 80, seriesLength: 90, trainSize: 365, horizon: 80, confidenceLevel: .90f, confidenceLowerBoundColumn: "MinimumDays", confidenceUpperBoundColumn: "MaximumDays"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData); Evaluate(secondYearData, forecaster, mlContext); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); forecastEngine.CheckPoint(mlContext, modelPath); //foreach(var j in ) //{ // if() //} Forecast(secondYearData, 40, forecastEngine, mlContext); Console.ReadKey(); }
static void Main(string[] args) { MLContext mlContext = new MLContext(); IDataView data1View = mlContext.Data.LoadFromTextFile <ModelInput>(_data1Path, separatorChar: ',', hasHeader: false); IDataView data2View = mlContext.Data.LoadFromTextFile <ModelInput>(_data2Path, separatorChar: ',', hasHeader: false); var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "forecasted_count", inputColumnName: "count", windowSize: 7, seriesLength: 30, trainSize: 334, horizon: 7, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "lower_count", confidenceUpperBoundColumn: "upper_count"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(data1View); Evaluate(data2View, forecaster, mlContext); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); //forecastEngine.CheckPoint(mlContext, modelPath); ModelOutput forecast = forecastEngine.Predict(); IEnumerable <string> forecastOutput = mlContext.Data.CreateEnumerable <ModelInput>(data2View, reuseRowObject: false) .Take(7) .Select((ModelInput data, int index) => { string action_date = data.action_time.ToString("yyyy-MM-dd"); float actual_count = data.count; float lowerEstimate = Math.Max(0, forecast.lower_count[index]); float estimate = forecast.forecasted_count[index]; float upperEstimate = forecast.upper_count[index]; return($"Date: {action_date}\n" + $"Actual Count: {actual_count}\n" + $"Lower Estimate: {lowerEstimate}\n" + $"Forecast: {estimate}\n" + $"Upper Estimate: {upperEstimate}\n"); }); Console.WriteLine("Forecast"); Console.WriteLine("---------------------"); foreach (var prediction in forecastOutput) { Console.WriteLine(prediction); } Console.ReadKey(); }
internal static void Start() { string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../", "BikeDemandForecasting")); string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf"); string modelPath = Path.Combine(rootDir, "MLModel.zip"); var connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;"; MLContext mlContext = new MLContext(); string query = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals"; DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, query); DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>(); IDataView dataView = loader.Load(dbSource); /* * Набор данных содержит данные за два года. Для обучения используются только данные за первый год, * а данные за второй год откладываются для сравнения фактических значений с прогнозом, созданным * моделью. Отфильтруйте данные с помощью преобразования FilterRowsByColumn. */ IDataView firstYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1); IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1); //Определите конвейер, который использует SsaForecastingEstimator для прогнозирования значений в наборе данных временных рядов var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedRentals", inputColumnName: "TotalRentals", windowSize: 7, seriesLength: 30, trainSize: 365, horizon: 7, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundRentals", confidenceUpperBoundColumn: "UpperBoundRentals"); //обучить модель и подогнать данные по ранее определенным forecastingPipeline. SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData); //Оценка модели Evaluate(secondYearData, forecaster, mlContext); //создайте TimeSeriesPredictionEngine. TimeSeriesPredictionEngine — это удобный метод для создания единичных прогнозов var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); //Сохраните модель в файл с именем MLModel.zip, которое задано ранее определенной переменной //modelPath. Выполните метод Checkpoint, чтобы сохранить модель. forecastEngine.CheckPoint(mlContext, modelPath); Forecast(secondYearData, 7, forecastEngine, mlContext); }
static void Main(string[] args) { #region 定义相关路径 string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../")); string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf"); string modelPath = Path.Combine(rootDir, "MLModel.zip"); var connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;"; #endregion //创建ML环境 MLContext mlContext = new MLContext(); //加载数据加载器 DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>(); //建立具有查询语句的数据源 string query = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals"; DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, query); //使用加载器加载数据源 IDataView dataView = loader.Load(dbSource); //获取第一年数据,用于训练,<1 IDataView firstYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1); //获取第二年数据,用于预测,>=1 IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1); //训练模型 var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedRentals", inputColumnName: "TotalRentals", windowSize: 7, //7条数据为一个时段分析 seriesLength: 30, trainSize: 365, //获取365条数据 horizon: 7, //预测7个值 confidenceLevel: 0.95f, //预测的值得是上下限范围内 confidenceLowerBoundColumn: "LowerBoundRentals", confidenceUpperBoundColumn: "UpperBoundRentals"); //开始训练 SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData); //进行评估 Evaluate(secondYearData, forecaster, mlContext); //保存训练之后的模型,以用于其他项目 var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); forecastEngine.CheckPoint(mlContext, modelPath); //进行预测 Forecast(secondYearData, 7, forecastEngine, mlContext); Console.WriteLine("Hello World!"); }
static void Main(string[] args) { string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../")); string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf"); string modelPath = Path.Combine(rootDir, "MLModel.zip"); var connectionString = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename={dbFilePath};Integrated Security=True;Connect Timeout=30;"; MLContext mlContext = new MLContext(); DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>(); string query = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals"; DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, query); IDataView dataView = loader.Load(dbSource); IDataView firstYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1); IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1); var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedRentals", inputColumnName: "TotalRentals", windowSize: 7, seriesLength: 30, trainSize: 365, horizon: 7, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundRentals", confidenceUpperBoundColumn: "UpperBoundRentals"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); forecastEngine.CheckPoint(mlContext, modelPath); Forecast(secondYearData, 7, forecastEngine, mlContext); Console.ReadKey(); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../")); string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf"); string modelPath = Path.Combine(rootDir, "MLModel.zip"); var connectionString = $"Server=localhost,1433;Database=master;User Id=sa;Password=Toffalini1991*;"; MLContext mlContext = new MLContext(); DatabaseLoader loader = mlContext.Data.CreateDatabaseLoader <ModelInput>(); string query = "SELECT RentalDate, CAST(Year as REAL) as Year, CAST(TotalRentals as REAL) as TotalRentals FROM Rentals"; DatabaseSource dbSource = new DatabaseSource(SqlClientFactory.Instance, connectionString, query); IDataView dataView = loader.Load(dbSource); IDataView firstYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", upperBound: 1); IDataView secondYearData = mlContext.Data.FilterRowsByColumn(dataView, "Year", lowerBound: 1); var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedRentals", inputColumnName: "TotalRentals", windowSize: 7, seriesLength: 30, trainSize: 365, horizon: 7, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundRentals", confidenceUpperBoundColumn: "UpperBoundRentals"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstYearData); Evaluate(secondYearData, forecaster, mlContext); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); forecastEngine.CheckPoint(mlContext, modelPath); Forecast(secondYearData, 7, forecastEngine, mlContext); }
static void Main(string[] args) { MLContext _mlContext = new MLContext(); string ConnectionString = "Data Source=146.59.229.11;Initial Catalog=Workshop;User ID=admin;Password=EPSIworkshop2020*"; string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../")); string modelPath = Path.Combine(rootDir, "Data", "MLModel.zip"); string query = "SELECT f.matricule AS Feu, CAST(e.nbPassant as REAL) AS NbPassants, CAST(e.jour as REAL) AS Jour, CAST(e.numWeek as REAL) as Semaine " + "FROM etat e " + "INNER JOIN feu f ON e.idFeu = f.idFeu " + "WHERE e.idFeu = 17 AND e.numWeek = 47"; DatabaseLoader loader = _mlContext.Data.CreateDatabaseLoader <ModelInput>(); DatabaseSource databaseSource = new DatabaseSource(SqlClientFactory.Instance, ConnectionString, query); IDataView dataView = loader.Load(databaseSource); IDataView firstWeekData = _mlContext.Data.FilterRowsByColumn(dataView, "Jour", upperBound: 1); IDataView nextWeekData = _mlContext.Data.FilterRowsByColumn(dataView, "Jour", lowerBound: 1); var forecastingPipeline = _mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedPassants", inputColumnName: "NbPassants", windowSize: 7, seriesLength: 24, trainSize: 10079, horizon: 7, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundPassants", confidenceUpperBoundColumn: "UpperBoundPassants"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(firstWeekData); Evaluate(nextWeekData, forecaster, _mlContext); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(_mlContext); forecastEngine.CheckPoint(_mlContext, modelPath); Forecast(nextWeekData, 4, forecastEngine, _mlContext); }
/// <summary> /// /// </summary> /// <param name="value">Close,High,Low,Open</param> public static ModelOutput CreateModel(string value) { // Load Data IDataView trainingDataView = mlContext.Data.LoadFromTextFile <ModelInput>( path: TRAIN_DATA_FILEPATH, hasHeader: true, separatorChar: ',', allowQuoting: true, allowSparse: false); var trainList = mlContext.Data.CreateEnumerable <ModelInput>(trainingDataView, true); int trainSize = trainList.Count(); var testList = trainList.TakeLast(60); IDataView testDataView = mlContext.Data.LoadFromEnumerable(testList); var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedValue", inputColumnName: value, windowSize: 5, seriesLength: 60, trainSize: trainSize, horizon: 1, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundValue", confidenceUpperBoundColumn: "UpperBoundValue"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(trainingDataView); Evaluate(testDataView, forecaster, mlContext, value); var forecastEngine = forecaster.CreateTimeSeriesEngine <ModelInput, ModelOutput>(mlContext); forecastEngine.CheckPoint(mlContext, MODEL_FILE); return(Forecast(testList, 1, forecastEngine, mlContext, value)); }
private static void RunModel() { var modelRunner = new ModelRunner(); var dataSource = JsonConvert.DeserializeObject <List <ModelRunner.ModelInput> >(File.ReadAllText(DataFileName)); string modelPath = Path.Combine(ModelFileName); MLContext mlContext = new MLContext(); IDataView dataView = mlContext.Data.LoadFromEnumerable(dataSource); IDataView AllData = mlContext.Data.FilterRowsByColumn(dataView, "YearInSeries", 0, 3); IDataView Year2017Data = mlContext.Data.FilterRowsByColumn(dataView, "YearInSeries", 2, 3); var forecastingPipeline = mlContext.Forecasting.ForecastBySsa( outputColumnName: "ForecastedTotalSold", inputColumnName: "TotalSold", windowSize: 30, seriesLength: 365, trainSize: 1095, horizon: 365, confidenceLevel: 0.95f, confidenceLowerBoundColumn: "LowerBoundTotalSold", confidenceUpperBoundColumn: "UpperBoundTotalSold"); SsaForecastingTransformer forecaster = forecastingPipeline.Fit(AllData); modelRunner.Evaluate(Year2017Data, forecaster, mlContext); var forecastingEngine = forecaster.CreateTimeSeriesEngine <ModelRunner.ModelInput, ModelRunner.ModelOutput>(mlContext); forecastingEngine.CheckPoint(mlContext, modelPath); modelRunner.Forecast(Year2017Data, 365, forecastingEngine, mlContext); }