Ошибка при использовании метода вменения (TransformerChain) на модели временных рядов (ML. NET) - PullRequest
0 голосов
/ 10 февраля 2020

Я использую 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 код).

Мой вопрос заключается в том, как мне добиться вменения с моделью временных рядов так же, как с регрессионной моделью? Или я должен использовать совершенно другой метод?

...