TimeSeriesCatalog.DetectAnomalyBySrCnn Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создание SrCnnAnomalyEstimator, которое обнаруживает аномалии времени с помощью алгоритма 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
Параметры
- catalog
- TransformsCatalog
Каталог преобразования.
- outputColumnName
- String
Имя столбца, полученного из преобразования inputColumnName
.
Данные столбца являются вектором Double. Вектор содержит три элемента: оповещение (1 означает аномалию, а 0 означает нормальную), необработанную оценку и величину оповещений.
- windowSize
- Int32
Размер скользящего окна для вычислений остаточного остатка.
- backAddWindowSize
- Int32
Количество точек, добавляемых в окно обучения. Значение по умолчанию не превышает windowSize
значения по умолчанию.
- lookaheadWindowSize
- Int32
Количество извечивых точек, используемых в прогнозе. Значение по умолчанию не превышает windowSize
значения по умолчанию.
- averagingWindowSizeaverageingWindowSize
- Int32
Размер скользящего окна для создания карты сальности для ряда. Значение по умолчанию не превышает windowSize
значения по умолчанию.
- judgementWindowSize
- Int32
Размер скользящего окна для вычисления оценки аномалий для каждой точки данных. Не больше windowSize
.
- threshold
- Double
Пороговое значение, определяющее аномалию, оценка больше порога считается аномалией. Должен находиться в (0,1)
Возвращаемое значение
Примеры
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; }
}
}
}