使用时间序列模型和PredictionEnginePool时在PredictionEngineBase中出现异常(ML.NET)

我根据这里描述的方法创建了一个时间序列模型,生成的代码如下:

var data = items.ToArray();var trainData = mlContext.Data.LoadFromEnumerable(data);var estimator = mlContext.Forecasting.ForecastBySsa(    nameof(FooPrediction.BarPrediction),    nameof(FooInput.Bar),    12,    data.Length,    data.Length,    2,    confidenceLowerBoundColumn: nameof(FooPrediction.ConfidenceLowerBound),    confidenceUpperBoundColumn: nameof(FooPrediction.ConfidenceUpperBound));var transformer = estimator.Fit(trainData);using var engine = transformer.CreateTimeSeriesEngine<FooInput, FooPrediction>(mlContext);engine.CheckPoint(mlContext, "model.zip");

其中itemsIEnumerable<FooInput>。这些是我的模型类:

public class FooPrediction{    public float[] BarPrediction { get; set; }    public float[] ConfidenceLowerBound { get; set; }    public float[] ConfidenceUpperBound { get; set; }}public class FooInput{    public float Bar { get; set; }    public float Baz { get; set; }}

在我的Startup中,我这样添加PredictionEnginePool

services.AddPredictionEnginePool<FooInput, FooPrediction>().FromFile(String.Empty, "model.zip", true);

在我的中间件服务中,我注入了PredictionEnginePool,然后调用:

var prediction = items.Select(i => predictionEnginePool.Predict(i));

其中itemsIEnumerable<FooInput>

这导致在PredictionEngineBase.TransformerChecker中抛出了ArgumentOutOfRangeException

必须是行到行的映射器(参数 ‘transformer’)

调试代码时,我可以看到对ITransformer对象的IsRowToRowMapper属性的检查为真。然而,当模型创建时,创建了一个SsaForecastingTransformer,其此属性被设置为false。

我做错了什么,还是PredictionEnginePool不支持时间序列模型?

我还尝试了AddPredictionEnginePool<IEnumerable<FooInput>, FooPrediction>,然后调用predictionEnginePool.Predict(items),但这也导致了相同的异常。


回答:

这段代码是在我之后添加的,所以我没有第一手的知识。

但是,据我所知ML.NET,答案是肯定的:很可能PredictionEnginePool不支持时间序列预测。

原因是,时间序列预测引擎实际上是一个“状态机”。你需要将所有数据,按照正确的顺序,喂给一个预测引擎,这样它才能正确地响应这个“时间序列”。

预测引擎池解决的是完全不同的场景:如果你有真正无状态的模型,你可以实例化几个可互换的预测引擎实例(一个池),预测将由当前空闲的引擎处理。

这些“无状态”模型在代码库中由“行到行映射器”概念表示。基本上,这个模型的预测完全且仅基于一行数据决定。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注