Machine learning 使用多变量作为输入的Forecast.ForecastBySA

Machine learning 使用多变量作为输入的Forecast.ForecastBySA,machine-learning,ml.net,Machine Learning,Ml.net,我有这个代码来预测时间序列。我想要一个基于价格时间序列和相关指标的预测 因此,连同要预测的值,我想传递一个边值,但我无法理解这是否被考虑在内,因为预测在有或没有它的情况下都不会改变。在哪种方式我需要告诉算法如何考虑这些参数? 公共静态时间体验预测PerformTimeSeriesProductForecasting(列表预测) { var mlContext=new mlContext(seed:1);//seed设置为任意数字,这样您就有了一个确定性环境 var productModelPat

我有这个代码来预测时间序列。我想要一个基于价格时间序列和相关指标的预测

因此,连同要预测的值,我想传递一个边值,但我无法理解这是否被考虑在内,因为预测在有或没有它的情况下都不会改变。在哪种方式我需要告诉算法如何考虑这些参数?

公共静态时间体验预测PerformTimeSeriesProductForecasting(列表预测)
{
var mlContext=new mlContext(seed:1);//seed设置为任意数字,这样您就有了一个确定性环境
var productModelPath=$“product\u month\u timeSeriesSSA.zip”;
if(File.Exists(productModelPath))
{
Delete(productModelPath);
}
IDataView productDataView=mlContext.Data.LoadFromEnumerable(listToForecast);
var singleProductDataSeries=mlContext.Data.CreateEnumerable(productDataView,false).OrderBy(p=>p.Date);
TimeSeriesData lastMonthProductData=singleProductDataSeries.Last();
const int numSeriesDataPoints=2500;//对于每个产品,基础数据总共有34个月的数据
//创建预测估计器并将其添加到管道中。
IEstimator forecaststimator=mlContext.Forecasting.ForecastBySsa(
outputColumnName:nameof(TimeSeriesForecast.NextClose),
inputColumnName:nameof(TimeSeriesData.Close),//这是要预测的列。
WindowsSize:22,//窗口大小设置为产品数据周期中表示的时间段;我们的产品周期基于12个月,因此将其设置为系数12,例如3。
seriesLength:numSeriesDataPoints,//此参数指定执行预测时使用的数据点的数量。
trainSize:numSeriesDataPoints,//此参数指定输入时间序列中从开始到结束的数据点总数。
地平线:5,//表示要预测的值的数量;2表示将预测未来2个月的产品单元。
置信度:0.98f,//表示实际观测值落在指定区间界限内的可能性。
confidenceLowerBoundColumn:nameof(TimeSeriesForecast.ConfidenceLowerBound),//这是用于存储每个预测值的区间下限的列的名称。
confidenceUpperBoundColumn:nameof(TimeSeriesForecast.ConfidenceUpperBound));//这是用于存储每个预测值的区间上限的列的名称。
//将预测模型拟合到指定产品的数据系列。
ITransformer forecastTransformer=ForecastStimator.Fit(productDataView);
//创建用于创建预测的预测引擎。
TimeSeriesPredictionEngine forecastEngine=forecastTransformer.CreateTimeSeriesEngine(mlContext);
//保存预测模型,以便可以将其加载到最终用户应用程序中。
forecastEngine.CheckPoint(mlContext,productModelPath);
天气预报员;
使用(var file=file.OpenRead(productModelPath))
{
forecaster=mlContext.Model.Load(文件,out DataViewSchema);
}
//我们必须从持久化模型创建一个新的预测引擎。
TimeSeriesPredictionEngine forecastEngine2=forecaster.CreateTimeSeriesEngine(mlContext);
//获取预测值;这将包括预测估计器最初创建时“地平线”参数中指定的时间段之后2个月的预测产品销售单位。
预测=预测引擎。预测();
收益预测;
}
TimeSeriesData
具有多个属性,而不仅仅是我想要预测的序列的值。只是想知道预测时是否考虑了这些因素。
有没有更好的方法来预测类似LMST的此类序列?这种方法在ML.NET中可用吗?

有一种新的增强方法:基于多变量时间序列的ML.NET预测


参见票证:github.com/dotnet/machinelearning/issues/5638

有一个新的增强票证:基于多变量时间序列的ML.Net预测


参见ticket:github.com/dotnet/machinelearning/issues/5638

您可能是说
TimeSeriesData
具有多个
属性。但是如果我理解了你问题的精神,估计迭代器是根据你的
mlContext
。因此,这取决于您的上下文是否是使用您在此处未提供的
TimeSeriesData
对象构建的。感谢您的评论,我更新了所有源代码。基于
IDataView productDataView=mlContext.Data.LoadFromEnumerable(listToForecast)
var singleProductDataSeries=mlContext.Data.CreateEnumerable(productDataView,false).OrderBy(p=>p.Date)
,我认为id确实考虑了
列表预测
数据(顺便说一句,不是1
TimeSeriesData
,但看起来是一个
列表
)我发现SSA预测单变量序列,但我找不到ml的多变量时间序列预测值。你找到解决方案了吗?您可以使用多个列作为ForecastBySA的输入吗?您可能的意思是
TimeSeriesData
具有多个
属性。但是如果我理解了你问题的精神,估计迭代器是根据你的
mlContext
。因此,这取决于您的上下文是否是使用您在此处未提供的
TimeSeriesData
对象构建的。感谢您的评论,我更新了所有源代码。基于
IDataView productDataView=mlContext.Data.LoadFromEnumerable(listToForecast)
var singleProductDataSeries=mlContext.Data.CreateEnumerable(productDataView,false).OrderBy(p=>p.Date),我认为id确实考虑了
列表预测