Compartilhar via


TimeSeriesCatalog.DetectAnomalyBySrCnn Método

Definição

Criar SrCnnAnomalyEstimator, que detecta anomalias de timeseries usando o algoritmo SRCNN.

public static Microsoft.ML.Transforms.TimeSeries.SrCnnAnomalyEstimator DetectAnomalyBySrCnn (this Microsoft.ML.TransformsCatalog catalog, string outputColumnName, string inputColumnName, int windowSize = 64, int backAddWindowSize = 5, int lookaheadWindowSize = 5, int averagingWindowSize = 3, int judgementWindowSize = 21, double threshold = 0.3);
public static Microsoft.ML.Transforms.TimeSeries.SrCnnAnomalyEstimator DetectAnomalyBySrCnn (this Microsoft.ML.TransformsCatalog catalog, string outputColumnName, string inputColumnName, int windowSize = 64, int backAddWindowSize = 5, int lookaheadWindowSize = 5, int averageingWindowSize = 3, int judgementWindowSize = 21, double threshold = 0.3);
static member DetectAnomalyBySrCnn : Microsoft.ML.TransformsCatalog * string * string * int * int * int * int * int * double -> Microsoft.ML.Transforms.TimeSeries.SrCnnAnomalyEstimator
static member DetectAnomalyBySrCnn : Microsoft.ML.TransformsCatalog * string * string * int * int * int * int * int * double -> Microsoft.ML.Transforms.TimeSeries.SrCnnAnomalyEstimator
<Extension()>
Public Function DetectAnomalyBySrCnn (catalog As TransformsCatalog, outputColumnName As String, inputColumnName As String, Optional windowSize As Integer = 64, Optional backAddWindowSize As Integer = 5, Optional lookaheadWindowSize As Integer = 5, Optional averagingWindowSize As Integer = 3, Optional judgementWindowSize As Integer = 21, Optional threshold As Double = 0.3) As SrCnnAnomalyEstimator
<Extension()>
Public Function DetectAnomalyBySrCnn (catalog As TransformsCatalog, outputColumnName As String, inputColumnName As String, Optional windowSize As Integer = 64, Optional backAddWindowSize As Integer = 5, Optional lookaheadWindowSize As Integer = 5, Optional averageingWindowSize As Integer = 3, Optional judgementWindowSize As Integer = 21, Optional threshold As Double = 0.3) As SrCnnAnomalyEstimator

Parâmetros

catalog
TransformsCatalog

O catálogo da transformação.

outputColumnName
String

Nome da coluna resultante da transformação de inputColumnName. Os dados da coluna são um vetor de Double. O vetor contém três elementos: alerta (1 significa anomalia enquanto 0 significa normal), pontuação bruta e magnitude do residual espectual.

inputColumnName
String

Nome da coluna a ser transformada. Os dados da coluna devem ser Single.

windowSize
Int32

O tamanho da janela deslizante para computação espectral residual.

backAddWindowSize
Int32

O número de pontos a serem adicionados à janela de treinamento. Não mais do que windowSize, geralmente, mantenha o valor padrão.

lookaheadWindowSize
Int32

O número de pontos tortuosos usados na previsão. Não mais do que windowSize, geralmente, mantenha o valor padrão.

averagingWindowSizeaverageingWindowSize
Int32

O tamanho da janela deslizante para gerar um mapa de saliency para a série. Não mais do que windowSize, geralmente, mantenha o valor padrão.

judgementWindowSize
Int32

O tamanho da janela deslizante para calcular a pontuação de anomalias para cada ponto de dados. Não mais do que windowSize.

threshold
Double

O limite para determinar anomalias, pontuação maior que o limite é considerado como anomalia. Deve estar em (0,1)

Retornos

Exemplos

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

namespace Samples.Dynamic
{
    public static class DetectAnomalyBySrCnn
    {
        // This example creates a time series (list of Data with the i-th element
        // corresponding to the i-th time slot). The estimator is applied then to
        // identify spiking points in the series.
        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 an anomaly
            var data = new List<TimeSeriesData>();
            for (int index = 0; index < 20; index++)
            {
                data.Add(new TimeSeriesData(5));
            }
            data.Add(new TimeSeriesData(10));
            for (int index = 0; index < 5; index++)
            {
                data.Add(new TimeSeriesData(5));
            }

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

            // Setup the estimator arguments
            string outputColumnName = nameof(SrCnnAnomalyDetection.Prediction);
            string inputColumnName = nameof(TimeSeriesData.Value);

            // The transformed model.
            ITransformer model = ml.Transforms.DetectAnomalyBySrCnn(
                outputColumnName, inputColumnName, 16, 5, 5, 3, 8, 0.35).Fit(
                dataView);

            // Create a time series prediction engine from the model.
            var engine = model.CreateTimeSeriesEngine<TimeSeriesData,
                SrCnnAnomalyDetection>(ml);

            Console.WriteLine($"{outputColumnName} column obtained post-" +
                $"transformation.");

            Console.WriteLine("Data\tAlert\tScore\tMag");

            // Prediction column obtained post-transformation.
            // Data	Alert	Score	Mag

            // Create non-anomalous data and check for anomaly.
            for (int index = 0; index < 20; index++)
            {
                // Anomaly detection.
                PrintPrediction(5, engine.Predict(new TimeSeriesData(5)));
            }

            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.00    0.00
            //5   0   0.03    0.18
            //5   0   0.03    0.18
            //5   0   0.03    0.18
            //5   0   0.03    0.18
            //5   0   0.03    0.18

            // Anomaly.
            PrintPrediction(10, engine.Predict(new TimeSeriesData(10)));

            //10	1	0.47	0.93    <-- alert is on, predicted anomaly

            // Checkpoint the model.
            var modelPath = "temp.zip";
            engine.CheckPoint(ml, modelPath);

            // Load the model.
            using (var file = File.OpenRead(modelPath))
                model = ml.Model.Load(file, out DataViewSchema schema);

            for (int index = 0; index < 5; index++)
            {
                // Anomaly detection.
                PrintPrediction(5, engine.Predict(new TimeSeriesData(5)));
            }

            //5   0   0.31    0.50
            //5   0   0.05    0.30
            //5   0   0.01    0.23
            //5   0   0.00    0.21
            //5   0   0.01    0.25
        }

        private static void PrintPrediction(float value, SrCnnAnomalyDetection
            prediction) =>
            Console.WriteLine("{0}\t{1}\t{2:0.00}\t{3:0.00}", value, prediction
            .Prediction[0], prediction.Prediction[1], prediction.Prediction[2]);

        private class TimeSeriesData
        {
            public float Value;

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

        private class SrCnnAnomalyDetection
        {
            [VectorType(3)]
            public double[] Prediction { get; set; }
        }
    }
}

Aplica-se a