Hızlı Başlangıç: Çok değişkenli Anomali Algılayıcısı kitaplığını kullanma

Kullanmaya başlayın C# Anomali Algılayıcısı çok değişkenli istemci kitaplığıyla birlikte kullanın. Paketi yüklemek ve hizmet tarafından sağlanan algoritmaları kullanmaya başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılama API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş AI'yi ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak sağlar. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak temel faktörler olarak sayılır. Bu, karmaşık sistemlerinizi proaktif olarak hatalardan korumanıza yardımcı olur.

C# Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak şunları yapmak için:

  • Bir zaman serisi grubundan sistem düzeyinde anomalileri algılama.
  • Tek tek zaman serileri size çok şey söylemez ve bir sorunu algılamak için tüm sinyallere bakmanız gerekir.
  • Sistem durumunun çeşitli yönlerini ölçen onlarca ile yüzlerce farklı algılayıcı türüne sahip pahalı fiziksel varlıkların önkdikasyonlu bakımı.

Kitaplık başvurusu belgeleriKitaplık kaynak koduPaket (NuGet)

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • .NET Core'un geçerli sürümü
  • Azure aboneliğinize sahip olduktan sonra anahtarınızı ve Anomali Algılayıcısı almak için Azure portal kaynak oluşturun. Dağıtımı bekleyin ve Kaynağa git düğmesini seçin.
    • Uygulamanıza api'sini bağlamak için, oluşturmakta olduğu kaynakta yer alan anahtara ve uç Anomali Algılayıcısı gerekir. Anahtarınızı ve uç noktanızı hızlı başlangıçta daha sonra aşağıdaki koda yapıştırın. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

Ayarlama

Yeni bir .NET Core uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi) komutunu kullanarak adıyla dotnet new yeni bir konsol uygulaması anomaly-detector-quickstart-multivariate oluşturun. Bu komut, tek bir C# Merhaba Dünya basit bir "Merhaba Dünya" projesi oluşturur: Program.cs.

dotnet new console -n anomaly-detector-quickstart-multivariate

Dizininizi yeni oluşturulan uygulama klasörüne değiştirme. Uygulamayı şu şekilde derlemek için:

dotnet build

Derleme çıkışı uyarı veya hata içermeyecektir.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

İstemci kitaplığını yükleme

Uygulama dizininde aşağıdaki komutla Anomali Algılayıcısı .NET için istemci kitaplığını yükleyin:

dotnet add package Azure.AI.AnomalyDetector --version 3.0.0-preview.3

proje dizininden program.cs dosyasını açın ve kullanarak aşağıdakini ekleyin:

using System;
using System.Collections.Generic;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Net.NetworkInformation;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Azure.AI.AnomalyDetector.Models;
using Azure.Core.TestFramework;
using Microsoft.Identity.Client;
using NUnit.Framework;

Uygulamanın yönteminde main() kaynağınıza azure uç noktası, API anahtarınız ve özel bir veri kaynağı için değişkenler oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğiniz vardır. Bu, güvenli anahtar döndürmeye olanak sağlamak içindir. Bu hızlı başlangıç için ilk anahtarı kullanın.

string endpoint = "YOUR_API_KEY";
string apiKey =  "YOUR_ENDPOINT";
string datasource = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";

Çok değişkenli ANOMALI ALGıLAYıCıSı api'leri kullanmak için önce kendi modellerinizi eğitin. Eğitim verileri, aşağıdaki gereksinimleri karşılamaya uygun birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (hepsi küçük harfle) olmak için iki (ve yalnızca iki) sütuna sahip bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601 ile uyumlu olmalı; "değer", herhangi bir sayıda ondalık basamak olan tamsayılar veya ondalıklar olabilir. Örneğin:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmıştır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılır. Zip dosyasında istediğiniz adı bulun. Zip dosyasının Azure Blob depolamaya yüklanması gerekir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturmanın ardından eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu Depolama.

Kod örnekleri

Bu kod parçacıkları. .NET için çok değişkenli istemci Anomali Algılayıcısı aşağıdakilerle nasıl gerçekleştirebilirsiniz:

İstemcinin kimliğini doğrulama

Uç noktanız ve Anomali Algılayıcısı bir istemci örneği örneği.

var endpointUri = new Uri(endpoint);
var credential = new AzureKeyCredential(apiKey)

AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);

Modeli eğitme

Modelinizi eğitecek yeni bir özel zaman uyumsuz görev oluşturun. Modeli eğitmek TrainMultivariateModel ve eğitimin ne zaman GetMultivariateModelAysnc tamamlandıktan sonra bunu kontrol etmek için kullanıcaz.

private async Task<Guid?> trainAsync(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time)
{
    try
    {
        Console.WriteLine("Training new model...");

        int model_number = await getModelNumberAsync(client, false).ConfigureAwait(false);
        Console.WriteLine(String.Format("{0} available models before training.", model_number));

        ModelInfo data_feed = new ModelInfo(datasource, start_time, end_time);
        Response response_header = client.TrainMultivariateModel(data_feed);
        response_header.Headers.TryGetValue("Location", out string trained_model_id_path);
        Guid trained_model_id = Guid.Parse(trained_model_id_path.Split('/').LastOrDefault());
        Console.WriteLine(trained_model_id);

        // Wait until the model is ready. It usually takes several minutes
        Response<Model> get_response = await client.GetMultivariateModelAsync(trained_model_id).ConfigureAwait(false);
        while (get_response.Value.ModelInfo.Status != ModelStatus.Ready & get_response.Value.ModelInfo.Status != ModelStatus.Failed)
        {
            System.Threading.Thread.Sleep(10000);
            get_response = await client.GetMultivariateModelAsync(trained_model_id).ConfigureAwait(false);
            Console.WriteLine(String.Format("model_id: {0}, createdTime: {1}, lastUpdateTime: {2}, status: {3}.", get_response.Value.ModelId, get_response.Value.CreatedTime, get_response.Value.LastUpdatedTime, get_response.Value.ModelInfo.Status));
        }

        if (get_response.Value.ModelInfo.Status != ModelStatus.Ready)
        {
            Console.WriteLine(String.Format("Trainig failed."));
            IReadOnlyList<ErrorResponse> errors = get_response.Value.ModelInfo.Errors;
            foreach (ErrorResponse error in errors)
            {
                Console.WriteLine(String.Format("Error code: {0}.", error.Code));
                Console.WriteLine(String.Format("Error message: {0}.", error.Message));
            }
            throw new Exception("Training failed.");
        }

        model_number = await getModelNumberAsync(client).ConfigureAwait(false);
        Console.WriteLine(String.Format("{0} available models after training.", model_number));
        return trained_model_id;
    }
    catch (Exception e)
    {
        Console.WriteLine(String.Format("Train error. {0}", e.Message));
        throw new Exception(e.Message);
    }
}

Anomalileri algılama

Yeni eğitilen modelinizi kullanarak anomalileri algılamak için adlı bir private async TaskdetectAsync oluşturun. Yeni bir oluşturacak ve DetectionRequest bunu parametresi olarak 'ye ileteceksiniz. DetectAnomalyAsync

private async Task<DetectionResult> detectAsync(AnomalyDetectorClient client, string datasource, Guid model_id,DateTimeOffset start_time, DateTimeOffset end_time)
{
    try
    {
        Console.WriteLine("Start detect...");
        Response<Model> get_response = await client.GetMultivariateModelAsync(model_id).ConfigureAwait(false);

        DetectionRequest detectionRequest = new DetectionRequest(datasource, start_time, end_time);
        Response result_response = await client.DetectAnomalyAsync(model_id, detectionRequest).ConfigureAwait(false);
        var ok = result_response.Headers.TryGetValue("Location", out string result_id_path);
        Guid result_id = Guid.Parse(result_id_path.Split('/').LastOrDefault());
        // get detection result
        Response<DetectionResult> result = await client.GetDetectionResultAsync(result_id).ConfigureAwait(false);
        while (result.Value.Summary.Status != DetectionStatus.Ready & result.Value.Summary.Status != DetectionStatus.Failed)
        {
            System.Threading.Thread.Sleep(2000);
            result = await client.GetDetectionResultAsync(result_id).ConfigureAwait(false);
        }

        if (result.Value.Summary.Status != DetectionStatus.Ready)
        {
            Console.WriteLine(String.Format("Inference failed."));
            IReadOnlyList<ErrorResponse> errors = result.Value.Summary.Errors;
            foreach (ErrorResponse error in errors)
            {
                Console.WriteLine(String.Format("Error code: {0}.", error.Code));
                Console.WriteLine(String.Format("Error message: {0}.", error.Message));
            }
            return null;
        }

        return result.Value;
    }
    catch (Exception e)
    {
        Console.WriteLine(String.Format("Detection error. {0}", e.Message));
        throw new Exception(e.Message);
    }
}

Modeli dışarı aktarma

Not

Dışarı aktarma komutu, kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı çalıştırmaya izin vermek için kullanılmak üzere tasarlanmıştır. Bu, şu anda çok değişkenli için destek değildir, ancak gelecekte destek eklenecektir.

Daha önce eğitmiş olduğunuz modeli dışarı aktararak adlı bir private async TaskexportAysnc oluşturun. Dışarı ExportModelAsync aktarmayı istediğiniz modelin model kimliğini kullanır ve iletirsiniz.

private async Task exportAsync(AnomalyDetectorClient client, Guid model_id, string model_path = "model.zip")
{
    try
    {
        Stream model = await client.ExportModelAsync(model_id).ConfigureAwait(false);
        if (model != null)
        {
            var fileStream = File.Create(model_path);
            model.Seek(0, SeekOrigin.Begin);
            model.CopyTo(fileStream);
            fileStream.Close();
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(String.Format("Export error. {0}", e.Message));
        throw new Exception(e.Message);
    }
}

Modeli silme

Daha önce oluşturduğunuz bir modeli silmek için kullanın DeleteMultivariateModelAsync ve silmek istediğiniz modelin model kimliğini iletir. Model kimliğini almak için bize : getModelNumberAsync

private async Task deleteAsync(AnomalyDetectorClient client, Guid model_id)
{
    await client.DeleteMultivariateModelAsync(model_id).ConfigureAwait(false);
    int model_number = await getModelNumberAsync(client).ConfigureAwait(false);
    Console.WriteLine(String.Format("{0} available models after deletion.", model_number));
}
private async Task<int> getModelNumberAsync(AnomalyDetectorClient client, bool delete = false)
{
    int count = 0;
    AsyncPageable<ModelSnapshot> model_list = client.ListMultivariateModelAsync(0, 10000);
    await foreach (ModelSnapshot x in model_list)
    {
        count += 1;
        Console.WriteLine(String.Format("model_id: {0}, createdTime: {1}, lastUpdateTime: {2}.", x.ModelId, x.CreatedTime, x.LastUpdatedTime));
        if (delete & count < 4)
        {
            await client.DeleteMultivariateModelAsync(x.ModelId).ConfigureAwait(false);
        }
    }
    return count;
}

Main yöntemi

Tüm bileşen parçalarına sahip olduğunuza göre, yeni oluşturduğunuz görevleri çağıracak ana yönteminize ek kod eklemeniz gerekir.


{
    //read endpoint and apiKey
     string endpoint = "YOUR_API_KEY";
    string apiKey =  "YOUR_ENDPOINT";
    string datasource = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";
    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, 1, 0, 0, 0, offset);
    DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 12, 0, 0, offset);
    Guid? model_id_raw = null;
    try
    {
        model_id_raw = await trainAsync(client, datasource, start_time, end_time).ConfigureAwait(false);
        Console.WriteLine(model_id_raw);
        Guid model_id = model_id_raw.GetValueOrDefault();

        // detect
        start_time = end_time;
        end_time = new DateTimeOffset(2021, 1, 3, 0, 0, 0, offset);
        DetectionResult result = await detectAsync(client, datasource, model_id, start_time, end_time).ConfigureAwait(false);
        if (result != null)
        {
            Console.WriteLine(String.Format("Result ID: {0}", result.ResultId));
            Console.WriteLine(String.Format("Result summary: {0}", result.Summary));
            Console.WriteLine(String.Format("Result length: {0}", result.Results.Count));
        }

        // export model
        await exportAsync(client, model_id).ConfigureAwait(false);

        // delete
        await deleteAsync(client, model_id).ConfigureAwait(false);
    }
    catch (Exception e)
    {
        String msg = String.Format("Multivariate error. {0}", e.Message);
        if (model_id_raw != null)
        {
            await deleteAsync(client, model_id_raw.GetValueOrDefault()).ConfigureAwait(false);
        }
        Console.WriteLine(msg);
        throw new Exception(msg);
    }
}

Uygulamayı çalıştırma

Uygulama dizininizin dotnet run komutuyla uygulamayı çalıştırın.

dotnet run

Kaynakları temizleme

Bilişsel Hizmetler aboneliğini temizlemek ve kaldırmak için kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

Kullanmaya başlayın JavaScript Anomali Algılayıcısı çok değişkenli istemci kitaplığıyla birlikte kullanın. Paketi yüklemek ve hizmet tarafından sağlanan algoritmaları kullanmaya başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılama API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş AI'yi ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak sağlar. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak temel faktörler olarak sayılır. Bu, karmaşık sistemlerinizi proaktif olarak hatalardan korumanıza yardımcı olur.

JavaScript için Anomali Algılayıcısı değişkenli istemci kitaplığını kullanarak şunları yapmak için:

  • Bir zaman serisi grubundan sistem düzeyinde anomalileri algılama.
  • Herhangi bir bireysel zaman serisi size çok bilgi vermez ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerekir.
  • Sistem durumunun çeşitli yönlerini ölçen, yüzlerce fiziksel varlık için onlarca yüzlerce farklı algılayıcı türü ile tahmine dayalı bakım.

Kitaplık başvuru belgeleriKitaplık kaynak koduPaket (NPM)Örnek kod

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Node.js geçerli sürümü
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure portal bir anomali algılayıcısı kaynağı oluşturun . Dağıtım için bekleyin ve Kaynağa Git düğmesine tıklayın.
    • Uygulamanızı anomali algılayıcı API 'sine bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz. F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.

Ayarlanıyor

Yeni bir Node.js uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu uygulamaya gidin.

mkdir myapp && cd myapp

npm initBir dosya ile bir düğüm uygulaması oluşturmak için komutunu çalıştırın package.json .

npm init

Adlı bir dosya oluşturun index.js ve şu kitaplıkları içeri aktarın: '

'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');

Kaynağınızın Azure uç noktası ve anahtarı için değişken oluşturun. Örnek veri dosyası için başka bir değişken oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğiniz olacaktır. Bu, güvenli anahtar dönüşe izin vermek için kullanılır. Bu hızlı başlangıç amacıyla ilk anahtarı kullanın.

const apiKey = "YOUR_API_KEY";
const endpoint = "YOUR_ENDPOINT";
const data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS";

Anomali algılayıcı çok değişkenli API 'Leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisinin bir kümesidir:

Her zaman, üst bilgi satırı olarak iki (ve yalnızca iki) sütunu, "timestamp" ve "Value" (tümü küçük harf) içeren bir CSV dosyası olmalıdır. "Timestamp" değerleri ISO 8601 ile uyumlu olmalıdır; "Value", herhangi bir sayıda ondalık basamakla tamsayı veya ondalık olabilir. Örneğin:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları, alt klasörler olmadan tek bir ZIP dosyasında sıkıştırılmalıdır. ZIP dosyasında istediğiniz ad olabilir. ZIP dosyası Azure Blob depolama alanına yüklenmelidir. Zip dosyası için blob SAS (paylaşılan erişim imzaları) URL 'SI oluşturduktan sonra eğitim için kullanılabilir. Azure Blob Depolama SAS url 'leri oluşturmak için bu belgeye başvurun.

İstemci kitaplığını yükler

ms-rest-azureVe azure-ai-anomalydetector NPM paketlerini yükler. Bu hızlı başlangıçta CSV ayrıştırma kitaplığı da kullanılır:

npm install @azure/ai-anomaly-detector csv-parse

Uygulamanızın package.json dosyası bağımlılıklarla güncelleştirilir.

Kod örnekleri

Bu kod parçacıkları, Node.js için anomali algılayıcı istemci kitaplığı ile aşağıdakilerin nasıl yapılacağını göstermektedir:

İstemcinin kimliğini doğrulama

Uç noktanız AnomalyDetectorClient ve kimlik bilgilerinizle bir nesne oluşturun.

const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));

Modeli eğitme

Model sonucu oluşturma

İlk olarak bir model isteği oluşturuyoruz. Başlangıç ve bitiş zamanının veri kaynağınıza göre hizalanmasına dikkat edin.

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
};

Yeni bir modeli eğitme

Model isteğinizi anomali algılayıcı istemci metoduna geçirmeniz gerekir 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)

Modelinizin eğitiminin tamamlanıp tamamlanmamasını denetlemek için modelin durumunu izleyebilirsiniz:

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.");

Anormallikleri Algıla

detectAnomalygetDectectionResult Veri kaynağınız dahilinde herhangi bir sorun olup olmadığını öğrenmek için ve işlevlerini kullanın.

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);

Modeli dışarı aktar

Not

Dışa aktarma komutunun, kapsayıcılı bir ortamda anomali algılayıcısının çok sayıda boyutlu model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu, şu anda çok sayıda değişken için desteklenmiyor, ancak gelecekte destek eklenecektir.

Eğitilen modelinize dışarı aktarmak için exportModel işlevini kullanın.

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+".")

Modeli Sil

Geçerli kaynak için kullanılabilir olan mevcut bir modeli silmek için deleteMultivariateModel işlevini kullanın.

client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")

Uygulamayı çalıştırma

Uygulamayı çalıştırmadan önce, kodunuzun tam örnek koda karşı denetlenmesi yararlı olabilir

Uygulamayı node hızlı başlangıç dosyanızdaki komutla çalıştırın.

node index.js

Kaynakları temizleme

Bilişsel hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

Python için anomali algılayıcısının çok sayıda istemci kitaplığını kullanmaya başlayın. Hizmet tarafından sunulan algoritmaları kullanarak paketi başlatmak için bu adımları izleyin. Yeni multivarianomali algılama API 'Leri, Machine Learning bilgisine veya etiketli verilere gerek kalmadan, gelişmiş AI 'nin ölçüm gruplarından aykırları tespit etmek üzere kolayca tümleştirilmesine olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve eş düzeyli ilişkiler otomatik olarak anahtar faktörleri olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı korumanıza yardımcı olur.

Python için anomali algılayıcı çok değişkenli istemci kitaplığını kullanarak şunları yapın:

  • Bir zaman serisi grubundan sistem düzeyi bozuklulıkları algılayın.
  • Herhangi bir bireysel zaman serisi size çok bilgi vermez ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerekir.
  • Sistem durumunun çeşitli yönlerini ölçen, yüzlerce fiziksel varlık için onlarca yüzlerce farklı algılayıcı türü ile tahmine dayalı bakım.

Kitaplık başvuru belgeleriKitaplık kaynak koduPaket (Pypı)Örnek kod

Önkoşullar

  • Python 3.x
  • Pandas veri analizi kitaplığı
  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure portal bir anomali algılayıcısı kaynağı oluşturun . Dağıtım için bekleyin ve Kaynağa Git düğmesine tıklayın.
    • Uygulamanızı anomali algılayıcı API 'sine bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz. F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.

Ayarlanıyor

İstemci kitaplığını yükler

Python yükledikten sonra, ile istemci kitaplıklarını yükleyebilirsiniz:

pip install pandas
pip install --upgrade azure-ai-anomalydetector

Yeni bir Python uygulaması oluşturma

Yeni bir Python dosyası oluşturun ve aşağıdaki kitaplıkları içeri aktarın.

import os
import time
from datetime import datetime

from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.ai.anomalydetector.models import DetectionRequest, ModelInfo
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError

Anahtarınız için bir ortam değişkeni, zaman serisi veri dosyası yolu ve aboneliğinizin Azure konumu olarak değişkenler oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğiniz olacaktır. Bu, güvenli anahtar dönüşe izin vermek için kullanılır. Bu hızlı başlangıç amacıyla ilk anahtarı kullanın.

subscription_key = "ANOMALY_DETECTOR_KEY"
anomaly_detector_endpoint = "ANOMALY_DETECTOR_ENDPOINT"

Kod örnekleri

Bu kod parçacıkları, Python için anomali algılayıcı istemci kitaplığı ile aşağıdakilerin nasıl yapılacağını göstermektedir:

İstemcinin kimliğini doğrulama

Yeni bir anomali algılayıcı istemcisi oluşturmak için anomali algılayıcısı abonelik anahtarını ve ilişkili uç noktayı geçirmeniz gerekir. Ayrıca bir veri kaynağı da oluşturacağız.

Anomali algılayıcı çok değişkenli API 'Leri kullanmak için önce kendi modellerinizi eğitmeniz gerekir. Eğitim verileri, aşağıdaki gereksinimleri karşılayan birden çok zaman serisinin bir kümesidir:

Her zaman, üst bilgi satırı olarak iki (ve yalnızca iki) sütunu, "timestamp" ve "Value" (tümü küçük harf) içeren bir CSV dosyası olmalıdır. "Timestamp" değerleri ISO 8601 ile uyumlu olmalıdır; "Value", herhangi bir sayıda ondalık basamakla tamsayı veya ondalık olabilir. Örneğin:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmalıdır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları, alt klasörler olmadan tek bir ZIP dosyasında sıkıştırılmalıdır. ZIP dosyasında istediğiniz ad olabilir. ZIP dosyası Azure Blob depolama alanına yüklenmelidir. Zip dosyası için blob SAS (paylaşılan erişim imzaları) URL 'SI oluşturduktan sonra eğitim için kullanılabilir. Azure Blob Depolama SAS url 'leri oluşturmak için bu belgeye başvurun.

class MultivariateSample():

def __init__(self, subscription_key, anomaly_detector_endpoint, data_source=None):
    self.sub_key = subscription_key
    self.end_point = anomaly_detector_endpoint

    # Create an Anomaly Detector client

    # <client>
    self.ad_client = AnomalyDetectorClient(AzureKeyCredential(self.sub_key), self.end_point)
    # </client>

    self.data_source = "YOUR_SAMPLE_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS"

Modeli eğitme

İlk olarak modeli eğtireceğiz, eğitimin ne zaman tamamlandığını saptamak için eğitim sırasında modelin durumunu kontrol edeceğiz ve sonra algılama aşamasına geçtiğimiz zaman ihtiyaç duyduğumuz en son model KIMLIĞINI alın.

def train(self, start_time, end_time):
    # Number of models available now
    model_list = list(self.ad_client.list_multivariate_model(skip=0, top=10000))
    print("{:d} available models before training.".format(len(model_list)))
    
    # Use sample data to train the model
    print("Training new model...(it may take a few minutes)")
    data_feed = ModelInfo(start_time=start_time, end_time=end_time, source=self.data_source)
    response_header = \
    self.ad_client.train_multivariate_model(data_feed, cls=lambda *args: [args[i] for i in range(len(args))])[-1]
    trained_model_id = response_header['Location'].split("/")[-1]
    
    # Model list after training
    new_model_list = list(self.ad_client.list_multivariate_model(skip=0, top=10000))
    
    # Wait until the model is ready. It usually takes several minutes
    model_status = None
    while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
        model_info = self.ad_client.get_multivariate_model(trained_model_id).model_info
        model_status = model_info.status
        time.sleep(10)

    if model_status == ModelStatus.FAILED:
        print("Creating model failed.")
        print("Errors:")
        if model_info.errors:
            for error in model_info.errors:
                print("Error code: {}. Message: {}".format(error.code, error.message))
        else:
            print("None")
        return None

    if model_status == ModelStatus.READY:
        # Model list after training
        new_model_list = list(self.ad_client.list_multivariate_model(skip=0, top=10000))
        print("Done.\n--------------------")
        print("{:d} available models after training.".format(len(new_model_list)))

    # Return the latest model id
    return trained_model_id

Anormallikleri Algıla

detect_anomalyget_dectection_result Veri kaynağınız içinde herhangi bir sorun olup olmadığını öğrenmek için ve kullanın. Az önce eğitilen modelin model KIMLIĞINI geçirmeniz gerekecektir.

def detect(self, model_id, start_time, end_time):
    # Detect anomaly in the same data source (but a different interval)
    try:
        detection_req = DetectionRequest(source=self.data_source, start_time=start_time, end_time=end_time)
        response_header = self.ad_client.detect_anomaly(model_id, detection_req,
                                                        cls=lambda *args: [args[i] for i in range(len(args))])[-1]
        result_id = response_header['Location'].split("/")[-1]
    
        # Get results (may need a few seconds)
        r = self.ad_client.get_detection_result(result_id)
        while r.summary.status != DetectionStatus.READY and r.summary.status != DetectionStatus.FAILED:
            r = self.ad_client.get_detection_result(result_id)
            time.sleep(2)

        if r.summary.status == DetectionStatus.FAILED:
            print("Detection failed.")
            print("Errors:")
            if r.summary.errors:
                for error in r.summary.errors:
                    print("Error code: {}. Message: {}".format(error.code, error.message))
            else:
                print("None")
            return None
    except HttpResponseError as e:
        print('Error code: {}'.format(e.error.code), 'Error message: {}'.format(e.error.message))
    except Exception as e:
        raise e
    return r

Modeli dışarı aktar

Not

Dışa aktarma komutunun, kapsayıcılı bir ortamda anomali algılayıcısının çok sayıda boyutlu model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu, şu anda çok sayıda değişken için desteklenmiyor, ancak gelecekte destek eklenecektir.

Bir model kullanımını dışa aktarmak export_model ve dışarı aktarmak istediğiniz modelin model kimliğini geçirmek istiyorsanız:

def export_model(self, model_id, model_path="model.zip"):

    # Export the model
    model_stream_generator = self.ad_client.export_model(model_id)
    with open(model_path, "wb") as f_obj:
        while True:
            try:
                f_obj.write(next(model_stream_generator))
            except StopIteration:
                break
            except Exception as e:
                raise e

Modeli Sil

Bir model kullanımını silmek delete_multivariate_model ve silmek istediğiniz modelin model kimliğini geçirmek için:

def delete_model(self, model_id):

    # Delete the mdoel
    self.ad_client.delete_multivariate_model(model_id)
    model_list_after_delete = list(self.ad_client.list_multivariate_model(skip=0, top=10000))
    print("{:d} available models after deletion.".format(len(model_list_after_delete)))

Uygulamayı çalıştırma

Uygulamayı çalıştırmadan önce, yeni oluşturulan işlevlerimizi çağırmak için bazı kodlar eklememiz gerekiyor.

if __name__ == '__main__':
    subscription_key = "ANOMALY_DETECTOR_KEY"
    anomaly_detector_endpoint = "ANOMALY_DETECTOR_ENDPOINT"

    # Create a new sample and client
    sample = MultivariateSample(subscription_key, anomaly_detector_endpoint, data_source=None)

    # Train a new model
    model_id = sample.train(datetime(2021, 1, 1, 0, 0, 0), datetime(2021, 1, 2, 12, 0, 0))

    # Reference
    result = sample.detect(model_id, datetime(2021, 1, 2, 12, 0, 0), datetime(2021, 1, 3, 0, 0, 0))
    print("Result ID:\t", result.result_id)
    print("Result summary:\t", result.summary)
    print("Result length:\t", len(result.results))

    # Export model
    sample.export_model(model_id, "model.zip")

    # Delete model
    sample.delete_model(model_id)

Bu uygulamayı çalıştırmadan önce, bu hızlı başlangıç 'nin türetildiği tam örnek koda göre projenizi denetlemek yararlı olabilir.

Başlamanıza yardımcı olmak için ayrıntılı bir Jupyter Notebook de sunuyoruz.

Uygulamayı python komutuyla ve dosya adınızla çalıştırın.

Kaynakları temizleme

Bilişsel hizmetler aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar

Java için anomali algılayıcısının çok sayıda istemci kitaplığını kullanmaya başlayın. Hizmet tarafından sunulan algoritmaları kullanarak paketi başlatmak için bu adımları izleyin. Yeni multivarianomali algılama API 'Leri, Machine Learning bilgisine veya etiketli verilere gerek kalmadan, gelişmiş AI 'nin ölçüm gruplarından aykırları tespit etmek üzere kolayca tümleştirilmesine olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve eş düzeyli ilişkiler otomatik olarak anahtar faktörleri olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı korumanıza yardımcı olur.

Java için anomali algılayıcısının çok değişkenli istemci kitaplığını kullanarak şunları yapın:

  • Bir zaman serisi grubundan sistem düzeyi bozuklulıkları algılayın.
  • Herhangi bir bireysel zaman serisi size çok bilgi vermez ve bir sorunu tespit etmek için tüm sinyallere bakmanız gerekir.
  • Sistem durumunun çeşitli yönlerini ölçen, yüzlerce fiziksel varlık için onlarca yüzlerce farklı algılayıcı türü ile tahmine dayalı bakım.

Kitaplık başvuru belgeleriKitaplık kaynak koduPaket (Maven)Örnek kod

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Java Development Kit 'in (JDK) geçerli sürümü
  • Gradle yapı aracıveya başka bir bağımlılık Yöneticisi.
  • Azure aboneliğiniz olduktan sonra, anahtarınızı ve uç noktanızı almak için Azure portal bir anomali algılayıcısı kaynağı oluşturun . Dağıtım için bekleyin ve Kaynağa Git düğmesine tıklayın.
    • Uygulamanızı anomali algılayıcı API 'sine bağlamak için oluşturduğunuz kaynaktaki anahtar ve uç nokta gerekir. Anahtarınızı ve uç noktanızı daha sonra hızlı başlangıçta aşağıdaki koda yapıştırabilirsiniz. F0Hizmeti denemek ve daha sonra üretime yönelik ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını () kullanabilirsiniz.

Ayarlanıyor

Yeni bir Gradle projesi oluşturma

Bu hızlı başlangıç, Gradle bağımlılık yöneticisini kullanır. Maven merkezi deposundadaha fazla istemci kitaplığı bilgisi bulabilirsiniz.

Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu uygulamaya gidin.

mkdir myapp && cd myapp

gradle initÇalışma dizininizden komutunu çalıştırın. Bu komut, uygulamanızı oluşturmak ve yapılandırmak için çalışma zamanında kullanılan Build. Gradle. kts de dahil olmak üzere Gradle için gerekli derleme dosyaları oluşturur.

gradle init --type basic

Bir DSLseçmeniz Istendiğinde, Kotlin' ı seçin.

İstemci kitaplığını yükler

Build. Gradle. kts ' i bulun ve tercıh ettiğiniz IDE veya metin düzenleyicinizle açın. Sonra bu derleme yapılandırmasında kopyalayın. Proje bağımlılıklarını eklediğinizden emin olun.

dependencies {
    compile("com.azure:azure-ai-anomalydetector")
}

Java dosyası oluşturma

Örnek uygulamanız için bir klasör oluşturun. Çalışma dizininizden aşağıdaki komutu çalıştırın:

mkdir -p src/main/java

Yeni klasöre gidin ve MetricsQuickstarts.java adlı bir dosya oluşturun. Tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki import deyimlerini ekleyin:

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;

Kaynağın Azure uç noktası ve anahtarı için değişkenler oluşturun. Örnek veri dosyası için başka bir değişken oluşturun.

Not

Her zaman iki anahtardan birini kullanma seçeneğiniz vardır. Bu, güvenli anahtar döndürmeye olanak sağlamak içindir. Bu hızlı başlangıç için ilk anahtarı kullanın.

String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";

Çok değişkenli ANOMALI ALGıLAYıCıSı api'leri kullanmak için önce kendi modellerinizi eğitin. Eğitim verileri, aşağıdaki gereksinimleri karşılamaya uygun birden çok zaman serisi kümesidir:

Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (hepsi küçük harfle) olmak için iki (ve yalnızca iki) sütuna sahip bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601 ile uyumlu olmalı; "değer", herhangi bir sayıda ondalık basamak olan tamsayılar veya ondalıklar olabilir. Örneğin:

timestamp değer
2019-04-01T00:00:00Z 5
2019-04-01T00:01:00Z 3.6
2019-04-01T00:02:00Z 4
... ...

Her CSV dosyası, model eğitimi için kullanılacak farklı bir değişkenden sonra adlandırılmıştır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları herhangi bir alt klasör olmadan tek bir zip dosyasına sıkıştırılır. Zip dosyasında istediğiniz adı bulun. Zip dosyasının Azure Blob depolamaya yüklanması gerekir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturmanın ardından eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu Depolama.

Kod örnekleri

Bu kod parçacıkları, aşağıdakiler için Anomali Algılayıcısı istemci kitaplığıyla nasıl Node.js:

İstemcinin kimliğini doğrulama

Uç noktanız ve anomalyDetectorClient kimlik bilgilerinizle bir nesne örneği oluşturma.

HttpHeaders headers = new HttpHeaders()
    .put("Accept", ContentType.APPLICATION_JSON);

HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy(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();

Modeli eğitme

Model sonucu oluşturma ve modeli eğitma

İlk olarak bir model isteği oluşturmamız gerekir. Başlangıç ve bitiş zamanların veri kaynağınıza uygun olduğundan emin olun.

Çok değişkenli API'Anomali Algılayıcısı kullanmak için algılamayı kullanmadan önce kendi modelimizi eğitin. Eğitim için kullanılan veriler bir toplu zaman serisidir. Her zaman serisinin yalnızca iki sütunu (zaman damgası" ve "değer" olan bir CSV dosyasında olması gerekir(sütun adları tam olarak aynı olması gerekir). Her CSV dosyası, zaman serisi için her değişkene göre adlandırılmış olur. Zaman serisinin hepsi tek bir zip dosyasına sıkıştırılmış ve Azure Blobdepolama alanına yük olmalı ve zip dosya adı gerekli değildir. Alternatif olarak, değişkenin adının dosya adı ile dosya adı arasında farklı olmasını isterseniz zip dosyasına .zip. Blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturmanınardından eğitim için zip dosyasının URL'sini kullanabiliriz.

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());
    }
}

Anomalileri algılama

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());
    }
}

Modeli dışarı aktarma

Not

Dışarı aktarma komutu, kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı çalıştırmaya izin vermek için kullanılmak üzere tasarlanmıştır. Bu, şu anda çok değişkenli için destek değildir, ancak gelecekte destek eklenecektir.

Eğitilen modelinizi dışarı aktarma için exportModelWithResponse kullanın.

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));

Modeli silme

Geçerli kaynağın kullanabileceği mevcut bir modeli silmek için işlevini deleteMultivariateModelWithResponse kullanın.

Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);

Uygulamayı çalıştırma

Uygulamayı şu şekilde derlemek için:

gradle build

Uygulamayı çalıştırma

Çalıştırmadan önce kodunuzu tam örnek koda göre denetlemeniz yararlı olabilir.

Uygulamayı şu hedefle run çalıştırın:

gradle run

Kaynakları temizleme

Bilişsel Hizmetler aboneliğini temizlemek ve kaldırmak için kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler.

Sonraki adımlar