Я использую ML. NET для прогнозирования нескольких столбцов, используя модель временных рядов в том же ключе, что и я в этом вопросе , касающемся использования модели регрессии. Как предполагает принятый ответ , вменение является подходящим методом, и код, который я вставил в свой вопрос, фактически таков.
Однако, когда я применяю ту же технику для модели временных рядов, что и ниже я получаю исключение ExceptParam
с сообщением Must be a row to row mapper or IStatefulTransformer
.
public class FooInput
{
public float Bar {get; set; }
public float Baz {get; set; }
}
public class FooPrediction
{
public float BarPrediction { get; set; }
public float BazPrediction { get; set; }
}
public ITransformer Train(IEnumerable<FooInput> items)
{
var mlContext = new MLContext(0);
var count = items.Count();
var pipelineBar = mlContext.Forecasting.ForecastBySsa("BarPrediction", "Bar", 12, count, count, 2);
var pipelineBaz = mlContext.Forecasting.ForecastBySsa("BazPrediction", "Baz", 12, count, count, 2);
var transformer = pipelineBar.Append(pipelineBaz).Fit(mlContext.Data.LoadFromEnumerable(items));
using var engine = transformer.CreateTimeSeriesEngine<FooInput, FooPrediction>(mlContext);
}
Я могу видеть из ML. NET кода , что это происходит, если IsRowToRowMapper
возвращает false на трансформаторе, и это случай на TransformerChain
, который мой трансформатор. Если я изменю код для удаления .Append(pipelineBaz)
, чтобы transformer
представлял собой один преобразователь (SsaForecastingTransformer
), а не TransformerChain
, тогда ошибка не произойдет (IsRowToRowMapper
вернет true в PredictionEngine
код).
Мой вопрос заключается в том, как мне добиться вменения с моделью временных рядов так же, как с регрессионной моделью? Или я должен использовать совершенно другой метод?