Udostępnij za pośrednictwem


TimeSeriesCatalog.ForecastBySsa Metoda

Definicja

Model analizy pojedynczego spektrum (SSA) na potrzeby jednowariowego prognozowania szeregów czasowych. Aby uzyskać szczegółowe informacje o modelu, zapoznaj się z tematem http://arxiv.org/pdf/1206.6910.pdf.

public static Microsoft.ML.Transforms.TimeSeries.SsaForecastingEstimator ForecastBySsa (this Microsoft.ML.ForecastingCatalog catalog, string outputColumnName, string inputColumnName, int windowSize, int seriesLength, int trainSize, int horizon, bool isAdaptive = false, float discountFactor = 1, Microsoft.ML.Transforms.TimeSeries.RankSelectionMethod rankSelectionMethod = Microsoft.ML.Transforms.TimeSeries.RankSelectionMethod.Exact, int? rank = default, int? maxRank = default, bool shouldStabilize = true, bool shouldMaintainInfo = false, Microsoft.ML.Transforms.TimeSeries.GrowthRatio? maxGrowth = default, string confidenceLowerBoundColumn = default, string confidenceUpperBoundColumn = default, float confidenceLevel = 0.95, bool variableHorizon = false);
static member ForecastBySsa : Microsoft.ML.ForecastingCatalog * string * string * int * int * int * int * bool * single * Microsoft.ML.Transforms.TimeSeries.RankSelectionMethod * Nullable<int> * Nullable<int> * bool * bool * Nullable<Microsoft.ML.Transforms.TimeSeries.GrowthRatio> * string * string * single * bool -> Microsoft.ML.Transforms.TimeSeries.SsaForecastingEstimator
<Extension()>
Public Function ForecastBySsa (catalog As ForecastingCatalog, outputColumnName As String, inputColumnName As String, windowSize As Integer, seriesLength As Integer, trainSize As Integer, horizon As Integer, Optional isAdaptive As Boolean = false, Optional discountFactor As Single = 1, Optional rankSelectionMethod As RankSelectionMethod = Microsoft.ML.Transforms.TimeSeries.RankSelectionMethod.Exact, Optional rank As Nullable(Of Integer) = Nothing, Optional maxRank As Nullable(Of Integer) = Nothing, Optional shouldStabilize As Boolean = true, Optional shouldMaintainInfo As Boolean = false, Optional maxGrowth As Nullable(Of GrowthRatio) = Nothing, Optional confidenceLowerBoundColumn As String = Nothing, Optional confidenceUpperBoundColumn As String = Nothing, Optional confidenceLevel As Single = 0.95, Optional variableHorizon As Boolean = false) As SsaForecastingEstimator

Parametry

catalog
ForecastingCatalog

Katalog.

outputColumnName
String

Nazwa kolumny wynikającej z przekształcenia elementu inputColumnName.

inputColumnName
String

Nazwa kolumny do przekształcenia. W przypadku ustawienia wartości nullwartość parametru outputColumnName będzie używana jako źródło. Wektor zawiera alert, nieprzetworzone wyniki, wartość P jako pierwsze trzy wartości.

windowSize
Int32

Długość okna serii do tworzenia macierzy trajektorii (parametr L).

seriesLength
Int32

Długość serii, która jest przechowywana w buforze do modelowania (parametr N).

trainSize
Int32

Długość serii od początku używana do trenowania.

horizon
Int32

Liczba wartości do prognozowania.

isAdaptive
Boolean

Flaga określająca, czy model jest adaptacyjny.

discountFactor
Single

Współczynnik rabatu w [0,1] używany do aktualizacji online.

rankSelectionMethod
RankSelectionMethod

Metoda wyboru rangi.

rank
Nullable<Int32>

Żądana ranga podprzestrzeni używanej do projekcji SSA (parametr r). Ten parametr powinien znajdować się w zakresie [1, windowSize]. W przypadku ustawienia wartości null ranga jest automatycznie określana na podstawie minimalizacji błędu przewidywania.

maxRank
Nullable<Int32>

Maksymalna ranga brana pod uwagę podczas procesu wyboru rangi. Jeśli wartość nie zostanie podana (tj. ustawiona na wartość null), zostanie ustawiona wartość windowSize — 1.

shouldStabilize
Boolean

Flaga określająca, czy model powinien być ustabilizowany.

shouldMaintainInfo
Boolean

Flaga określająca, czy należy zachować metadane dla modelu.

maxGrowth
Nullable<GrowthRatio>

Maksymalny wzrost trendu wykładniczego.

confidenceLowerBoundColumn
String

Nazwa kolumny niższej granicy interwału ufności. Jeśli nie zostanie określony, interwały ufności nie zostaną obliczone.

confidenceUpperBoundColumn
String

Nazwa kolumny górnej granicy interwału ufności. Jeśli nie zostanie określony, interwały ufności nie zostaną obliczone.

confidenceLevel
Single

Poziom ufności do prognozowania.

variableHorizon
Boolean

Ustaw tę wartość na wartość true, jeśli horyzont zmieni się po trenowaniu (w czasie przewidywania).

Zwraca

Przykłady

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.ML;
using Microsoft.ML.Transforms.TimeSeries;

namespace Samples.Dynamic
{
    public static class Forecasting
    {
        // This example creates a time series (list of Data with the i-th element
        // corresponding to the i-th time slot) and then does forecasting.
        public static void Example()
        {
            // Create a new ML context, for ML.NET operations. It can be used for
            // exception tracking and logging, as well as the source of randomness.
            var ml = new MLContext();

            // Generate sample series data with a recurring pattern.
            var data = new List<TimeSeriesData>()
            {
                new TimeSeriesData(0),
                new TimeSeriesData(1),
                new TimeSeriesData(2),
                new TimeSeriesData(3),
                new TimeSeriesData(4),

                new TimeSeriesData(0),
                new TimeSeriesData(1),
                new TimeSeriesData(2),
                new TimeSeriesData(3),
                new TimeSeriesData(4),

                new TimeSeriesData(0),
                new TimeSeriesData(1),
                new TimeSeriesData(2),
                new TimeSeriesData(3),
                new TimeSeriesData(4),
            };

            // Convert data to IDataView.
            var dataView = ml.Data.LoadFromEnumerable(data);

            // Setup arguments.
            var inputColumnName = nameof(TimeSeriesData.Value);
            var outputColumnName = nameof(ForecastResult.Forecast);

            // Instantiate the forecasting model.
            var model = ml.Forecasting.ForecastBySsa(outputColumnName,
                inputColumnName, 5, 11, data.Count, 5);

            // Train.
            var transformer = model.Fit(dataView);

            // Forecast next five values.
            var forecastEngine = transformer.CreateTimeSeriesEngine<TimeSeriesData,
                ForecastResult>(ml);

            var forecast = forecastEngine.Predict();

            Console.WriteLine($"Forecasted values:");
            Console.WriteLine("[{0}]", string.Join(", ", forecast.Forecast));
            // Forecasted values:
            // [1.977226, 1.020494, 1.760543, 3.437509, 4.266461]

            // Update with new observations.
            forecastEngine.Predict(new TimeSeriesData(0));
            forecastEngine.Predict(new TimeSeriesData(0));
            forecastEngine.Predict(new TimeSeriesData(0));
            forecastEngine.Predict(new TimeSeriesData(0));

            // Checkpoint.
            forecastEngine.CheckPoint(ml, "model.zip");

            // Load the checkpointed model from disk.
            // Load the model.
            ITransformer modelCopy;
            using (var file = File.OpenRead("model.zip"))
                modelCopy = ml.Model.Load(file, out DataViewSchema schema);

            // We must create a new prediction engine from the persisted model.
            var forecastEngineCopy = modelCopy.CreateTimeSeriesEngine<
                TimeSeriesData, ForecastResult>(ml);

            // Forecast with the checkpointed model loaded from disk.
            forecast = forecastEngineCopy.Predict();
            Console.WriteLine("[{0}]", string.Join(", ", forecast.Forecast));
            // [1.791331, 1.255525, 0.3060154, -0.200446, 0.5657795]

            // Forecast with the original model(that was checkpointed to disk).
            forecast = forecastEngine.Predict();
            Console.WriteLine("[{0}]", string.Join(", ", forecast.Forecast));
            // [1.791331, 1.255525, 0.3060154, -0.200446, 0.5657795]

        }

        class ForecastResult
        {
            public float[] Forecast { get; set; }
        }

        class TimeSeriesData
        {
            public float Value;

            public TimeSeriesData(float value)
            {
                Value = value;
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.ML;
using Microsoft.ML.Transforms.TimeSeries;

namespace Samples.Dynamic
{
    public static class ForecastingWithConfidenceInternal
    {
        // This example creates a time series (list of Data with the i-th element
        // corresponding to the i-th time slot) and then does forecasting.
        public static void Example()
        {
            // Create a new ML context, for ML.NET operations. It can be used for
            // exception tracking and logging, as well as the source of randomness.
            var ml = new MLContext();

            // Generate sample series data with a recurring pattern.
            var data = new List<TimeSeriesData>()
            {
                new TimeSeriesData(0),
                new TimeSeriesData(1),
                new TimeSeriesData(2),
                new TimeSeriesData(3),
                new TimeSeriesData(4),

                new TimeSeriesData(0),
                new TimeSeriesData(1),
                new TimeSeriesData(2),
                new TimeSeriesData(3),
                new TimeSeriesData(4),

                new TimeSeriesData(0),
                new TimeSeriesData(1),
                new TimeSeriesData(2),
                new TimeSeriesData(3),
                new TimeSeriesData(4),
            };

            // Convert data to IDataView.
            var dataView = ml.Data.LoadFromEnumerable(data);

            // Setup arguments.
            var inputColumnName = nameof(TimeSeriesData.Value);
            var outputColumnName = nameof(ForecastResult.Forecast);

            // Instantiate the forecasting model.
            var model = ml.Forecasting.ForecastBySsa(outputColumnName,
                inputColumnName, 5, 11, data.Count, 5,
                confidenceLevel: 0.95f,
                confidenceLowerBoundColumn: "ConfidenceLowerBound",
                confidenceUpperBoundColumn: "ConfidenceUpperBound");

            // Train.
            var transformer = model.Fit(dataView);

            // Forecast next five values.
            var forecastEngine = transformer.CreateTimeSeriesEngine<TimeSeriesData,
                ForecastResult>(ml);

            var forecast = forecastEngine.Predict();

            PrintForecastValuesAndIntervals(forecast.Forecast, forecast
                .ConfidenceLowerBound, forecast.ConfidenceUpperBound);
            // Forecasted values:
            // [1.977226, 1.020494, 1.760543, 3.437509, 4.266461]
            // Confidence intervals:
            // [0.3451088 - 3.609343] [-0.7967533 - 2.83774] [-0.058467 - 3.579552] [1.61505 - 5.259968] [2.349299 - 6.183623]

            // Update with new observations.
            forecastEngine.Predict(new TimeSeriesData(0));
            forecastEngine.Predict(new TimeSeriesData(0));
            forecastEngine.Predict(new TimeSeriesData(0));
            forecastEngine.Predict(new TimeSeriesData(0));

            // Checkpoint.
            forecastEngine.CheckPoint(ml, "model.zip");

            // Load the checkpointed model from disk.
            // Load the model.
            ITransformer modelCopy;
            using (var file = File.OpenRead("model.zip"))
                modelCopy = ml.Model.Load(file, out DataViewSchema schema);

            // We must create a new prediction engine from the persisted model.
            var forecastEngineCopy = modelCopy.CreateTimeSeriesEngine<
                TimeSeriesData, ForecastResult>(ml);

            // Forecast with the checkpointed model loaded from disk.
            forecast = forecastEngineCopy.Predict();
            PrintForecastValuesAndIntervals(forecast.Forecast, forecast
                .ConfidenceLowerBound, forecast.ConfidenceUpperBound);

            // [1.791331, 1.255525, 0.3060154, -0.200446, 0.5657795]
            // Confidence intervals:
            // [0.1592142 - 3.423448] [-0.5617217 - 3.072772] [-1.512994 - 2.125025] [-2.022905 - 1.622013] [-1.351382 - 2.482941]

            // Forecast with the original model(that was checkpointed to disk).
            forecast = forecastEngine.Predict();
            PrintForecastValuesAndIntervals(forecast.Forecast,
                forecast.ConfidenceLowerBound, forecast.ConfidenceUpperBound);

            // [1.791331, 1.255525, 0.3060154, -0.200446, 0.5657795]
            // Confidence intervals:
            // [0.1592142 - 3.423448] [-0.5617217 - 3.072772] [-1.512994 - 2.125025] [-2.022905 - 1.622013] [-1.351382 - 2.482941]
        }

        static void PrintForecastValuesAndIntervals(float[] forecast, float[]
            confidenceIntervalLowerBounds, float[] confidenceIntervalUpperBounds)
        {
            Console.WriteLine($"Forecasted values:");
            Console.WriteLine("[{0}]", string.Join(", ", forecast));
            Console.WriteLine($"Confidence intervals:");
            for (int index = 0; index < forecast.Length; index++)
                Console.Write($"[{confidenceIntervalLowerBounds[index]} -" +
                    $" {confidenceIntervalUpperBounds[index]}] ");
            Console.WriteLine();
        }

        class ForecastResult
        {
            public float[] Forecast { get; set; }
            public float[] ConfidenceLowerBound { get; set; }
            public float[] ConfidenceUpperBound { get; set; }
        }

        class TimeSeriesData
        {
            public float Value;

            public TimeSeriesData(float value)
            {
                Value = value;
            }
        }
    }
}

Dotyczy