Quickstart: De Multivariate Anomaly Detector-clientbibliotheek gebruiken
Belangrijk
Vanaf 20 september 2023 kunt u geen nieuwe Anomaly Detector-resources maken. De Anomaly Detector-service wordt op 1 oktober 2026 buiten gebruik gesteld.
Ga aan de slag met de anomaly Detector-clientbibliotheek met meerderevariaties voor C#. Volg deze stappen om het pakket te installeren en de algoritmen van de service te gebruiken. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.
Gebruik de multivariate clientbibliotheek van Anomaly Detector voor C# om het volgende te doen:
- Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
- Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
- Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.
Broncodepakket voor bibliotheekreferentiedocumentatiebibliotheek | | (NuGet)
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De huidige versie van .NET Core
- Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met de Anomaly Detector-API. Plak uw sleutel en eindpunt verderop in de onderstaande code in de quickstart.
U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met de Anomaly Detector-API. Plak uw sleutel en eindpunt verderop in de onderstaande code in de quickstart.
U kunt de gratis prijscategorie (
Instellingen
Een opslagaccount maken
Voor Multivariate Anomaly Detector moet uw voorbeeldbestand worden opgeslagen in Azure Blob Storage.
- Een Azure Storage-account maken.
- Ga naar Toegangsbeheer (IAM) en selecteer TOEVOEGEN om roltoewijzing toe te voegen.
- Zoekrol van Storage Blob-gegevenslezer, markeer dit accounttype en selecteer vervolgens Volgende.
- Selecteer Toegang tot beheerde identiteit toewijzen en Leden selecteren en kies vervolgens de Anomaly Detector-resource die u eerder hebt gemaakt en selecteer Vervolgens Beoordelen en toewijzen.
Deze configuratie kan soms een beetje verwarrend zijn, als u problemen ondervindt, raden we u aan om ons voorbeeld van multivariate Jupyter Notebook te raadplegen. Dit proces wordt uitgebreider beschreven.
Voorbeeldgegevens downloaden
In deze quickstart wordt één bestand gebruikt voor voorbeeldgegevens sample_data_5_3000.csv
. Dit bestand kan worden gedownload uit onze GitHub-voorbeeldgegevens
U kunt de voorbeeldgegevens ook downloaden door het volgende uit te voeren:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Voorbeeldgegevens uploaden naar opslagaccount
- Ga naar uw opslagaccount, selecteer Containers en maak een nieuwe container.
- Selecteer Uploaden en uploaden sample_data_5_3000.csv
- Selecteer de gegevens die u hebt geüpload en kopieer de Blob-URL, omdat u deze in een paar stappen aan het codevoorbeeld moet toevoegen.
Sleutel en eindpunt ophalen
Als u een aanroep wilt maken op basis van de Anomaly Detector-service, hebt u de volgende waarden nodig:
Naam van de variabele | Waarde |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. Voorbeeldeindpunt: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
De WAARDE van de API-sleutel vindt u in de sectie Sleutels en eindpunten bij het onderzoeken van uw resource vanuit De Azure-portal. U kunt KEY1 of KEY2 gebruiken. |
Ga naar uw resource in Azure Portal. Het eindpunt en de sleutels vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel naar behoefte voor verificatie van uw API-aanroepen. U kunt KEY1
of KEY2
gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.
Omgevingsvariabelen maken
Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.
Belangrijk
Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.
Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Een nieuwe .NET Core-app maken
Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de opdracht dotnet new
om een nieuwe console-app te maken met de naam anomaly-detector-quickstart-multivariate
. Met deze opdracht maakt u een eenvoudig 'Hallo wereld'-project met één C#-bronbestand: Program.cs.
dotnet new console -n anomaly-detector-quickstart-multivariate
Wijzig uw map in de zojuist gemaakte app-map. U kunt de toepassing maken met:
dotnet build
De build-uitvoer mag geen waarschuwingen of fouten bevatten.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
De clientbibliotheek installeren
Installeer in de toepassingsmap de Anomaly Detector-clientbibliotheek voor .NET met de volgende opdracht:
dotnet add package Azure.AI.AnomalyDetector --prerelease
Open in de projectmap het program.cs-bestand en vervang het door de volgende code:
using Azure.AI.AnomalyDetector;
using Azure;
using static System.Environment;
internal class Program
{
private static void Main(string[] args)
{
string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT");
string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");
string datasource = "Path-to-sample-file-in-your-storage-account"; // example path:https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
Console.WriteLine(endpoint);
var endpointUri = new Uri(endpoint);
var credential = new AzureKeyCredential(apiKey);
//create client
AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);
// train
TimeSpan offset = new TimeSpan(0);
DateTimeOffset start_time = new DateTimeOffset(2021, 1, 2, 0, 0, 0, offset);
DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 5, 0, 0, offset);
string model_id = null;
try
{
model_id = TrainModel(client, datasource, start_time, end_time);
// detect
end_time = new DateTimeOffset(2021, 1, 2, 1, 0, 0, offset);
MultivariateDetectionResult result = BatchDetect(client, datasource, model_id, start_time, end_time);
if (result != null)
{
Console.WriteLine(string.Format("Result ID: {0}", result.ResultId.ToString()));
Console.WriteLine(string.Format("Result summary: {0}", result.Summary.ToString()));
Console.WriteLine(string.Format("Result length: {0}", result.Results.Count));
Console.WriteLine(string.Format("Anomalies found: {0}", result.Results.Where(r => r.Value.IsAnomaly).Count()));
}
// delete
DeleteModel(client, model_id);
}
catch (Exception e)
{
string msg = string.Format("Multivariate error. {0}", e.Message);
Console.WriteLine(msg);
throw;
}
int GetModelNumber(AnomalyDetectorClient client)
{
int model_number = 0;
foreach (var multivariateModel in client.GetMultivariateModels())
{
model_number++;
}
return model_number;
}
string TrainModel(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Training new model...");
Console.WriteLine(string.Format("{0} available models before training.", GetModelNumber(client)));
ModelInfo request = new ModelInfo(datasource, start_time, end_time);
request.SlidingWindow = 200;
Console.WriteLine("Training new model...(it may take a few minutes)");
AnomalyDetectionModel response = client.TrainMultivariateModel(request);
string trained_model_id = response.ModelId;
Console.WriteLine(string.Format("Training model id is {0}", trained_model_id));
// Wait until the model is ready. It usually takes several minutes
ModelStatus? model_status = null;
int tryout_count = 1;
response = client.GetMultivariateModel(trained_model_id);
while (tryout_count < max_tryout & model_status != ModelStatus.Ready & model_status != ModelStatus.Failed)
{
Thread.Sleep(1000);
response = client.GetMultivariateModel(trained_model_id);
model_status = response.ModelInfo.Status;
Console.WriteLine(string.Format("try {0}, model_id: {1}, status: {2}.", tryout_count, trained_model_id, model_status));
tryout_count += 1;
};
if (model_status == ModelStatus.Ready)
{
Console.WriteLine("Creating model succeeds.");
Console.WriteLine(string.Format("{0} available models after training.", GetModelNumber(client)));
return trained_model_id;
}
if (model_status == ModelStatus.Failed)
{
Console.WriteLine("Creating model failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {0}, Message: {1}", response.ModelInfo.Errors[0].Code.ToString(), response.ModelInfo.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
}
return null;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Train error. {0}", e.Message));
throw;
}
}
MultivariateDetectionResult BatchDetect(AnomalyDetectorClient client, string datasource, string model_id, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Start batch detect...");
MultivariateBatchDetectionOptions request = new MultivariateBatchDetectionOptions(datasource, 10, start_time, end_time);
Console.WriteLine("Start batch detection, this might take a few minutes...");
MultivariateDetectionResult response = client.DetectMultivariateBatchAnomaly(model_id, request);
string result_id = response.ResultId;
Console.WriteLine(string.Format("result id is: {0}", result_id));
// get detection result
MultivariateDetectionResult resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
MultivariateBatchDetectionStatus result_status = resultResponse.Summary.Status;
int tryout_count = 0;
while (tryout_count < max_tryout & result_status != MultivariateBatchDetectionStatus.Ready & result_status != MultivariateBatchDetectionStatus.Failed)
{
Thread.Sleep(1000);
resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
result_status = resultResponse.Summary.Status;
Console.WriteLine(string.Format("try: {0}, result id: {1} Detection status is {2}", tryout_count, result_id, result_status.ToString()));
Console.Out.Flush();
}
if (result_status == MultivariateBatchDetectionStatus.Failed)
{
Console.WriteLine("Detection failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {}. Message: {}", resultResponse.Summary.Errors[0].Code.ToString(), resultResponse.Summary.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
return null;
}
return resultResponse;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Detection error. {0}", e.Message));
throw;
}
}
void DeleteModel(AnomalyDetectorClient client, string model_id)
{
client.DeleteMultivariateModel(model_id);
int model_number = GetModelNumber(client);
Console.WriteLine(string.Format("{0} available models after deletion.", model_number));
}
}
}
De toepassing uitvoeren
Voer de toepassing uit vanuit uw toepassingsmap met de opdracht dotnet run
.
dotnet run
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook andere resources verwijderd die aan de resourcegroep zijn gekoppeld.
Volgende stappen
Ga aan de slag met de multivariate clientbibliotheek van Anomaly Detector voor JavaScript. Volg deze stappen om het pakket te installeren en de algoritmen van de service te gebruiken. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.
Gebruik de multivariate Clientbibliotheek van Anomaly Detector voor JavaScript om het volgende te doen:
- Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
- Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
- Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.
Broncodepakket voor bibliotheekreferentiedocumentatiebibliotheek | | (npm) | -voorbeeldcode
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De huidige versie van Node.js
- Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Anomaly Detector-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Anomaly Detector-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
U kunt de gratis prijscategorie (
Instellen
Een nieuwe Node.js-toepassing maken
Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.
mkdir myapp && cd myapp
Voer de opdracht npm init
uit om een knooppunttoepassing te maken met een package.json
-bestand.
npm init
Maak een bestand met de naam index.js
en importeer de volgende bibliotheken: '
'use strict'
const fs = require('fs');
const parse = require("csv-parse/lib/sync");
const { AnomalyDetectorClient } = require('@azure/ai-anomaly-detector');
const { AzureKeyCredential } = require('@azure/core-auth');
Maak variabelen voor het Azure-eindpunt en de Azure-sleutel voor uw resource. Maak een andere variabele voor het voorbeeldgegevensbestand.
Notitie
U hebt altijd de mogelijkheid om een van de twee sleutels te gebruiken. Dit is om veilige sleutelrotatie toe te staan. Gebruik voor deze quickstart de eerste sleutel.
const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
Belangrijk
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.
Als u de Multivariate API's van Anomaly Detector wilt gebruiken, moet u eerst uw eigen modellen trainen. Trainingsgegevens zijn een set met meerdere tijdreeksen die voldoen aan de volgende vereisten:
Elke tijdreeks moet een CSV-bestand zijn met twee (en slechts twee) kolommen, 'timestamp' en 'value' (allemaal in kleine letters) als de veldnamenrij. De 'timestamp'-waarden moeten voldoen aan ISO 8601; de 'waarde' kan gehele getallen of decimalen met een willekeurig aantal decimalen zijn. Voorbeeld:
timestamp | waarde |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3,6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Elk CSV-bestand moet worden benoemd naar een andere variabele die wordt gebruikt voor modeltraining. Bijvoorbeeld 'temperature.csv' en 'humidity.csv'. Alle CSV-bestanden moeten worden gezipt in één zip-bestand zonder submappen. Het zip-bestand kan elke gewenste naam hebben. Het zip-bestand moet worden geüpload naar Azure Blob Storage. Zodra u de URL voor blob-SAS (Shared Access Signatures) voor het zip-bestand hebt gegenereerd, kan deze worden gebruikt voor training. Raadpleeg dit document voor het genereren van SAS-URL's van Azure Blob Storage.
De clientbibliotheek installeren
Installeer de NPM-pakketten ms-rest-azure
en azure-ai-anomalydetector
. De CSV-parseerbibliotheek wordt ook gebruikt in deze snelstart:
npm install @azure/ai-anomaly-detector csv-parse
Het package.json
-bestand van uw app wordt bijgewerkt met de afhankelijkheden.
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Anomaly Detector-clientbibliotheek voor Node.js:
De client verifiëren
Instantieer een AnomalyDetectorClient
object met uw eindpunt en referenties.
const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));
Een model trainen
Een modelresultaat maken
Eerst moeten we een modelaanvraag maken. Zorg ervoor dat de begin- en eindtijd overeenkomen met uw gegevensbron.
const Modelrequest = {
source: data_source,
startTime: new Date(2021,0,1,0,0,0),
endTime: new Date(2021,0,2,12,0,0),
slidingWindow:200
};
Een nieuw model trainen
U geeft uw modelaanvraag door aan de Anomaly Detector-clientmethode trainMultivariateModel
.
console.log("Training a new model...")
const train_response = await client.trainMultivariateModel(Modelrequest)
const model_id = train_response.location?.split("/").pop() ?? ""
console.log("New model ID: " + model_id)
Als u wilt controleren of de training van uw model is voltooid, kunt u de status van het model bijhouden:
let model_response = await client.getMultivariateModel(model_id);
let model_status = model_response.modelInfo.status;
while (model_status != 'READY' && model_status != 'FAILED'){
await sleep(10000).then(() => {});
model_response = await client.getMultivariateModel(model_id);
model_status = model_response.modelInfo.status;
}
if (model_status == 'FAILED') {
console.log("Training failed.\nErrors:");
for (let error of model_response.modelInfo?.errors ?? []) {
console.log("Error code: " + error.code + ". Message: " + error.message);
}
}
console.log("TRAINING FINISHED.");
Afwijkingen detecteren
Gebruik de detectAnomaly
en getDectectionResult
functies om te bepalen of er afwijkingen in uw gegevensbron zijn.
console.log("Start detecting...");
const detect_request = {
source: data_source,
startTime: new Date(2021,0,2,12,0,0),
endTime: new Date(2021,0,3,0,0,0)
};
const result_header = await client.detectAnomaly(model_id, detect_request);
const result_id = result_header.location?.split("/").pop() ?? "";
let result = await client.getDetectionResult(result_id);
let result_status = result.summary.status;
while (result_status != 'READY' && result_status != 'FAILED'){
await sleep(2000).then(() => {});
result = await client.getDetectionResult(result_id);
result_status = result.summary.status;
}
if (result_status == 'FAILED') {
console.log("Detection failed.\nErrors:");
for (let error of result.summary.errors ?? []) {
console.log("Error code: " + error.code + ". Message: " + error.message)
}
}
console.log("Result status: " + result_status);
console.log("Result Id: " + result.resultId);
Model exporteren
Notitie
De exportopdracht is bedoeld om het uitvoeren van multivariate Anomaly Detector-modellen in een containeromgeving toe te staan. Dit wordt momenteel niet ondersteund voor multivariate, maar er wordt in de toekomst ondersteuning toegevoegd.
Gebruik de exportModel
functie om uw getrainde model te exporteren.
const export_result = await client.exportModel(model_id)
const model_path = "model.zip"
const destination = fs.createWriteStream(model_path)
export_result.readableStreamBody?.pipe(destination)
console.log("New model has been exported to "+model_path+".")
Model verwijderen
Als u een bestaand model wilt verwijderen dat beschikbaar is voor de huidige resource, gebruikt u de deleteMultivariateModel
functie.
client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")
De toepassing uitvoeren
Voordat u de toepassing uitvoert, kan het handig zijn om uw code te controleren op basis van de volledige voorbeeldcode
Voer de toepassing uit met de opdracht node
in uw quickstart-bestand.
node index.js
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook andere resources verwijderd die aan de resourcegroep zijn gekoppeld.
Volgende stappen
Referentiedocumentatie voor bibliotheek |Bibliotheekbroncode | Pakket (PyPi) |De voorbeeldcode zoeken op GitHub
Aan de slag met de anomaly Detector-clientbibliotheek met meerderevariaties voor Python. Volg deze stappen om het pakket te installeren en gebruik te maken van de algoritmen die door de service worden geleverd. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.
Gebruik de multivariate clientbibliotheek van Anomaly Detector voor Python om:
- Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
- Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
- Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.
Vereisten
- Een Azure-abonnement - Een gratis abonnement maken
- Python 3.x
- Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource. U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellingen
Installeer de clientbibliotheek. U kunt de clientbibliotheek installeren met:
pip install --upgrade azure.ai.anomalydetector
Een opslagaccount maken
Voor Multivariate Anomaly Detector moet uw voorbeeldbestand worden opgeslagen in Azure Blob Storage.
- Een Azure Storage-account maken.
- Ga naar Toegangsbeheer (IAM) en selecteer TOEVOEGEN om roltoewijzing toe te voegen.
- Zoekrol van Storage Blob-gegevenslezer, markeer dit accounttype en selecteer vervolgens Volgende.
- Selecteer Toegang tot beheerde identiteit toewijzen en Leden selecteren en kies vervolgens de Anomaly Detector-resource die u eerder hebt gemaakt en selecteer Vervolgens Beoordelen en toewijzen.
Deze configuratie kan soms een beetje verwarrend zijn, als u problemen ondervindt, raden we u aan om ons voorbeeld van multivariate Jupyter Notebook te raadplegen. Dit proces wordt uitgebreider beschreven.
Voorbeeldgegevens downloaden
In deze quickstart wordt één bestand gebruikt voor voorbeeldgegevens sample_data_5_3000.csv
. Dit bestand kan worden gedownload uit onze GitHub-voorbeeldgegevens
U kunt de voorbeeldgegevens ook downloaden door het volgende uit te voeren:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Voorbeeldgegevens uploaden naar opslagaccount
- Ga naar uw opslagaccount, selecteer Containers en maak een nieuwe container.
- Selecteer Uploaden en uploaden sample_data_5_3000.csv
- Selecteer de gegevens die u hebt geüpload en kopieer de Blob-URL, omdat u deze in een paar stappen aan het codevoorbeeld moet toevoegen.
Sleutel en eindpunt ophalen
Als u een aanroep wilt maken op basis van de Anomaly Detector-service, hebt u de volgende waarden nodig:
Naam van de variabele | Waarde |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. Voorbeeldeindpunt: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
De WAARDE van de API-sleutel vindt u in de sectie Sleutels en eindpunten bij het onderzoeken van uw resource vanuit De Azure-portal. U kunt KEY1 of KEY2 gebruiken. |
Ga naar uw resource in Azure Portal. Het eindpunt en de sleutels vindt u in de sectie Resourcebeheer . Kopieer uw eindpunt en toegangssleutel naar behoefte voor verificatie van uw API-aanroepen. U kunt KEY1
of KEY2
gebruiken. Als u altijd twee sleutels hebt, kunt u sleutels veilig roteren en opnieuw genereren zonder een serviceonderbreking te veroorzaken.
Omgevingsvariabelen maken
Maak en wijs permanente omgevingsvariabelen toe voor uw sleutel en eindpunt.
Belangrijk
Als u een API-sleutel gebruikt, slaat u deze veilig op ergens anders op, zoals in Azure Key Vault. Neem de API-sleutel niet rechtstreeks in uw code op en plaats deze nooit openbaar.
Zie Aanvragen verifiëren bij Azure AI-services voor meer informatie over beveiliging van AI-services.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Een nieuwe Python-toepassing maken
Maak een nieuw Python-bestand met de naam sample_multivariate_detect.py. Open deze vervolgens in uw favoriete editor of IDE.
Vervang de inhoud van sample_multivariate_detect.py door de volgende code. U moet de paden voor de variabelen
blob_url
wijzigen.
import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *
import os
SUBSCRIPTION_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))
time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account" # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
train_body = ModelInfo(
data_source=blob_url,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
data_schema="OneTable",
display_name="sample",
sliding_window=200,
align_policy=AlignPolicy(
align_mode=AlignMode.OUTER,
fill_n_a_method=FillNAMethod.LINEAR,
padding_value=0,
),
)
batch_inference_body = MultivariateBatchDetectionOptions(
data_source=blob_url,
top_contributor_count=10,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
)
print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))
## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None
while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
model = ad_client.get_multivariate_model(model_id)
print(model)
model_status = model.model_info.status
print("Model is {}".format(model_status))
time.sleep(30)
if model_status == ModelStatus.READY:
print("Done.\n--------------------")
# Return the latest model id
# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id
# Get results (may need a few seconds)
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")
while anomaly_results.summary.status != MultivariateBatchDetectionStatus.READY and anomaly_results.summary.status != MultivariateBatchDetectionStatus.FAILED:
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Detection is {}".format(anomaly_results.summary.status))
time.sleep(5)
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))
# See detailed inference result
for r in anomaly_results.results:
print(
"timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
r.timestamp,
r.value.is_anomaly,
r.value.score,
r.value.severity,
len(r.value.interpretation) if r.value.is_anomaly else 0,
)
)
if r.value.interpretation:
for contributor in r.value.interpretation:
print(
"\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
contributor.variable, contributor.contribution_score
)
)
De toepassing uitvoeren
Voer de toepassing uit met de opdracht python
in uw quickstart-bestand.
python sample_multivariate_detect.py
Uitvoer
10 available models before training.
Training new model...(it may take a few minutes)
Training model id is 3a695878-a88f-11ed-a16c-b290e72010e0
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:23Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'CREATED', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [], 'trainLosses': [], 'validationLosses': [], 'latenciesInSeconds': []}, 'variableStates': []}}}
Model is CREATED
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:55Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'READY', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'trainLosses': [1.0493712276220322, 0.5454281121492386, 0.42524269968271255, 0.38019897043704987, 0.3472398854792118, 0.34301353991031647, 0.3219067454338074, 0.3108387663960457, 0.30357857793569565, 0.29986055195331573], 'validationLosses': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'latenciesInSeconds': [0.3412797451019287, 0.25798678398132324, 0.2556419372558594, 0.3165152072906494, 0.2748451232910156, 0.26111531257629395, 0.2571413516998291, 0.257282018661499, 0.2549862861633301, 0.25806593894958496]}, 'variableStates': [{'variable': 'series_0', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_1', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_2', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_3', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_4', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}]}}}
Model is READY
Done.
--------------------
10 available models after training.
Get detection result...(it may take a few seconds)
Detection is CREATED
Detection is READY
Result ID: 70a6cdf8-a88f-11ed-a461-928899e62c38
Result status: READY
Result length: 301
timestamp: 2021-01-02 00:00:00+00:00, is_anomaly: 0 , anomaly score: 0.1770, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:01:00+00:00, is_anomaly: 0 , anomaly score: 0.3446, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:02:00+00:00, is_anomaly: 0 , anomaly score: 0.2397, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:03:00+00:00, is_anomaly: 0 , anomaly score: 0.1270, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:04:00+00:00, is_anomaly: 0 , anomaly score: 0.3321, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:05:00+00:00, is_anomaly: 0 , anomaly score: 0.4053, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:06:00+00:00, is_anomaly: 0 , anomaly score: 0.4371, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:07:00+00:00, is_anomaly: 1 , anomaly score: 0.6615, severity: 0.3850, contributor count: 5
contributor variable: series_3 , contributor score: 0.2939
contributor variable: series_1 , contributor score: 0.2834
contributor variable: series_4 , contributor score: 0.2329
contributor variable: series_0 , contributor score: 0.1543
contributor variable: series_2 , contributor score: 0.0354
De uitvoerresultaten zijn afgekapt voor kortheid.
Resources opschonen
Als u een Anomaly Detector-resource wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd. U kunt ook overwegen om de omgevingsvariabelen die u hebt gemaakt te verwijderen als u deze niet meer wilt gebruiken.
Ga aan de slag met de multivariate clientbibliotheek van Anomaly Detector voor Java. Voer de volgende stappen uit om het pakket te installeren en de algoritmen te gaan gebruiken die door de service worden geleverd. Met de nieuwe multivariate anomaly detector-API's kunnen ontwikkelaars eenvoudig geavanceerde AI integreren voor het detecteren van afwijkingen uit groepen met metrische gegevens, zonder dat machine learning-kennis of gelabelde gegevens nodig zijn. Afhankelijkheden en intercorrelatie tussen verschillende signalen worden automatisch meegeteld als belangrijke factoren. Dit helpt u om uw complexe systemen proactief te beschermen tegen storingen.
Gebruik de multivariate Clientbibliotheek van Anomaly Detector voor Java om:
- Detecteer afwijkingen op systeemniveau van een groep tijdreeksen.
- Wanneer een afzonderlijke tijdreeks u niet veel vertelt en u alle signalen moet bekijken om een probleem te detecteren.
- Predicatief onderhoud van dure fysieke activa met tientallen tot honderden verschillende typen sensoren die verschillende aspecten van de systeemstatus meten.
Bibliotheekreferentiedocumentatiebibliotheek | broncodepakket | (Maven) | -voorbeeldcode
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De huidige versie van de Java Development Kit (JDK)
- Het hulpprogramma Gradle of een andere afhankelijkheidsbeheerder.
- Zodra u uw Azure-abonnement hebt, maakt u een Anomaly Detector-resource in Azure Portal om uw sleutel en eindpunt op te halen. Wacht tot deze is geïmplementeerd en selecteer de knop Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Anomaly Detector-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
U kunt de gratis prijscategorie (
F0
) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt om uw toepassing te verbinden met de Anomaly Detector-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
U kunt de gratis prijscategorie (
Instellen
Een nieuw Gradle-project maken
Deze quickstart maakt gebruik van de Gradle-afhankelijkheidsmanager. U vindt meer informatie over clientbibliotheken in de centrale opslagplaats van Maven.
Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.
mkdir myapp && cd myapp
Voer de opdracht gradle init
uit vanuit uw werkmap. Met deze opdracht maakt u essentiële buildbestanden voor Gradle, waaronder build.gradle.kts die tijdens runtime worden gebruikt om uw toepassing te maken en te configureren.
gradle init --type basic
Wanneer u wordt gevraagd om een DSL te kiezen, selecteert u Kotlin.
De clientbibliotheek installeren
Zoek build.gradle.kts en open het met uw favoriete IDE of teksteditor. Kopieer het vervolgens in deze buildconfiguratie. Zorg ervoor dat u de projectafhankelijkheden mee kopieert.
dependencies {
compile("com.azure:azure-ai-anomalydetector")
}
Een Java-bestand maken
Maak een map voor de voorbeeld-app. Voer de volgende opdracht uit vanuit uw werkmap:
mkdir -p src/main/java
Ga naar de nieuwe map en maak een bestand met de naam MetricsAdvisorQuickstarts.java. Open het bestand in uw voorkeurseditor of IDE en voeg de volgende import
-instructies toe:
package com.azure.ai.anomalydetector;
import com.azure.ai.anomalydetector.models.*;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.http.*;
import com.azure.core.http.policy.*;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.http.rest.PagedResponse;
import com.azure.core.http.rest.Response;
import com.azure.core.http.rest.StreamResponse;
import com.azure.core.util.Context;
import reactor.core.publisher.Flux;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
Maak variabelen voor het Azure-eindpunt en de Azure-sleutel voor uw resource. Maak een andere variabele voor het voorbeeldgegevensbestand.
Notitie
U hebt altijd de mogelijkheid om een van de twee sleutels te gebruiken. Dit is om veilige sleutelrotatie toe te staan. Gebruik voor deze quickstart de eerste sleutel.
String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";
Belangrijk
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.
Als u de Multivariate API's van Anomaly Detector wilt gebruiken, moet u eerst uw eigen modellen trainen. Trainingsgegevens zijn een set met meerdere tijdreeksen die voldoen aan de volgende vereisten:
Elke tijdreeks moet een CSV-bestand zijn met twee (en slechts twee) kolommen, 'timestamp' en 'value' (allemaal in kleine letters) als de veldnamenrij. De 'timestamp'-waarden moeten voldoen aan ISO 8601; de 'waarde' kan gehele getallen of decimalen met een willekeurig aantal decimalen zijn. Voorbeeld:
timestamp | waarde |
---|---|
2019-04-01T00:00:00Z | 5 |
2019-04-01T00:01:00Z | 3,6 |
2019-04-01T00:02:00Z | 4 |
... |
... |
Elk CSV-bestand moet worden benoemd naar een andere variabele die wordt gebruikt voor modeltraining. Bijvoorbeeld 'temperature.csv' en 'humidity.csv'. Alle CSV-bestanden moeten worden gezipt in één zip-bestand zonder submappen. Het zip-bestand kan elke gewenste naam hebben. Het zip-bestand moet worden geüpload naar Azure Blob Storage. Zodra u de URL voor blob-SAS (Shared Access Signatures) voor het zip-bestand hebt gegenereerd, kan deze worden gebruikt voor training. Raadpleeg dit document voor het genereren van SAS-URL's van Azure Blob Storage.
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Anomaly Detector-clientbibliotheek voor Node.js:
De client verifiëren
Instantieer een anomalyDetectorClient
object met uw eindpunt en referenties.
HttpHeaders headers = new HttpHeaders()
.put("Accept", ContentType.APPLICATION_JSON);
HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy("Ocp-Apim-Subscription-Key",
new AzureKeyCredential(key));
AddHeadersPolicy addHeadersPolicy = new AddHeadersPolicy(headers);
HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(HttpClient.createDefault())
.policies(authPolicy, addHeadersPolicy).build();
// Instantiate a client that will be used to call the service.
HttpLogOptions httpLogOptions = new HttpLogOptions();
httpLogOptions.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS);
AnomalyDetectorClient anomalyDetectorClient = new AnomalyDetectorClientBuilder()
.pipeline(httpPipeline)
.endpoint(endpoint)
.httpLogOptions(httpLogOptions)
.buildClient();
Een model trainen
Een modelresultaat maken en model trainen
Eerst moeten we een modelaanvraag maken. Zorg ervoor dat de begin- en eindtijd overeenkomen met uw gegevensbron.
Als u de Multivariate API's van Anomaly Detector wilt gebruiken, moet u ons eigen model trainen voordat u detectie gebruikt. Gegevens die worden gebruikt voor de training zijn een reeks tijdreeksen. Elke tijdreeks moet zich in een CSV-bestand bevinden met slechts twee kolommen, 'tijdstempel' en 'waarde'(de kolomnamen moeten precies hetzelfde zijn). Elk CSV-bestand moet worden benoemd na elke variabele voor de tijdreeks. Alle tijdreeksen moeten worden gezipt in één zip-bestand en worden geüpload naar Azure Blob Storage, en er is geen vereiste voor de naam van het zip-bestand. U kunt ook een extra meta.json bestand opnemen in het zip-bestand als u wilt dat de naam van de variabele verschilt van de .zip bestandsnaam. Zodra we de URL voor blob-SAS (Shared Access Signatures) genereren, kunnen we de URL naar het zip-bestand gebruiken voor training.
Path path = Paths.get("test-data.csv");
List<String> requestData = Files.readAllLines(path);
List<TimeSeriesPoint> series = requestData.stream()
.map(line -> line.trim())
.filter(line -> line.length() > 0)
.map(line -> line.split(",", 2))
.filter(splits -> splits.length == 2)
.map(splits -> {
TimeSeriesPoint timeSeriesPoint = new TimeSeriesPoint();
timeSeriesPoint.setTimestamp(OffsetDateTime.parse(splits[0]));
timeSeriesPoint.setValue(Float.parseFloat(splits[1]));
return timeSeriesPoint;
})
.collect(Collectors.toList());
Integer window = 28;
AlignMode alignMode = AlignMode.OUTER;
FillNAMethod fillNAMethod = FillNAMethod.LINEAR;
Integer paddingValue = 0;
AlignPolicy alignPolicy = new AlignPolicy()
.setAlignMode(alignMode)
.setFillNAMethod(fillNAMethod)
.setPaddingValue(paddingValue);
String source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
OffsetDateTime startTime = OffsetDateTime.of(2021, 1, 2, 0, 0, 0, 0, ZoneOffset.UTC);
OffsetDateTime endTime = OffsetDateTime.of(2021, 1, 3, 0, 0, 0, 0, ZoneOffset.UTC);
String displayName = "Devops-MultiAD";
ModelInfo request = new ModelInfo()
.setSlidingWindow(window)
.setAlignPolicy(alignPolicy)
.setSource(source)
.setStartTime(startTime)
.setEndTime(endTime)
.setDisplayName(displayName);
TrainMultivariateModelResponse trainMultivariateModelResponse = anomalyDetectorClient.trainMultivariateModelWithResponse(request, Context.NONE);
String header = trainMultivariateModelResponse.getDeserializedHeaders().getLocation();
String[] substring = header.split("/");
UUID modelId = UUID.fromString(substring[substring.length - 1]);
System.out.println(modelId);
//Check model status until the model is ready
Response<Model> trainResponse;
while (true) {
trainResponse = anomalyDetectorClient.getMultivariateModelWithResponse(modelId, Context.NONE);
ModelStatus modelStatus = trainResponse.getValue().getModelInfo().getStatus();
if (modelStatus == ModelStatus.READY || modelStatus == ModelStatus.FAILED) {
break;
}
TimeUnit.SECONDS.sleep(10);
}
if (trainResponse.getValue().getModelInfo().getStatus() != ModelStatus.READY){
System.out.println("Training failed.");
List<ErrorResponse> errorMessages = trainResponse.getValue().getModelInfo().getErrors();
for (ErrorResponse errorMessage : errorMessages) {
System.out.println("Error code: " + errorMessage.getCode());
System.out.println("Error message: " + errorMessage.getMessage());
}
}
Afwijkingen detecteren
DetectionRequest detectionRequest = new DetectionRequest().setSource(source).setStartTime(startTime).setEndTime(endTime);
DetectAnomalyResponse detectAnomalyResponse = anomalyDetectorClient.detectAnomalyWithResponse(modelId, detectionRequest, Context.NONE);
String location = detectAnomalyResponse.getDeserializedHeaders().getLocation();
String[] substring = location.split("/");
UUID resultId = UUID.fromString(substring[substring.length - 1]);
DetectionResult detectionResult;
while (true) {
detectionResult = anomalyDetectorClient.getDetectionResult(resultId);
DetectionStatus detectionStatus = detectionResult.getSummary().getStatus();;
if (detectionStatus == DetectionStatus.READY || detectionStatus == DetectionStatus.FAILED) {
break;
}
TimeUnit.SECONDS.sleep(10);
}
if (detectionResult.getSummary().getStatus() != DetectionStatus.READY){
System.out.println("Inference failed");
List<ErrorResponse> detectErrorMessages = detectionResult.getSummary().getErrors();
for (ErrorResponse errorMessage : detectErrorMessages) {
System.out.println("Error code: " + errorMessage.getCode());
System.out.println("Error message: " + errorMessage.getMessage());
}
}
Model exporteren
Notitie
De exportopdracht is bedoeld om het uitvoeren van multivariate Anomaly Detector-modellen in een containeromgeving toe te staan. Dit wordt momenteel niet ondersteund voor multivariate, maar er wordt in de toekomst ondersteuning toegevoegd.
Als u uw getrainde model wilt exporteren, gebruikt u de exportModelWithResponse
.
StreamResponse response_export = anomalyDetectorClient.exportModelWithResponse(model_id, Context.NONE);
Flux<ByteBuffer> value = response_export.getValue();
FileOutputStream bw = new FileOutputStream("result.zip");
value.subscribe(s -> write(bw, s), (e) -> close(bw), () -> close(bw));
Model verwijderen
Als u een bestaand model wilt verwijderen dat beschikbaar is voor de huidige resource, gebruikt u de deleteMultivariateModelWithResponse
functie.
Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);
De toepassing uitvoeren
U kunt de app maken met:
gradle build
De toepassing uitvoeren
Voordat u deze uitvoert, kan het handig zijn om uw code te controleren op basis van de volledige voorbeeldcode.
Voer de toepassing uit met het doel run
:
gradle run
Resources opschonen
Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook andere resources verwijderd die aan de resourcegroep zijn gekoppeld.