Hızlı başlangıç: anomali algılayıcı çok değişkenli istemci kitaplığını kullanma

C# için anomali algılayıcısının çok sayıda istemci kitaplığını kullanmaya başlayın. Paketi yüklemek ve hizmet tarafından sunulan algoritmaları kullanmaya başlamak 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.

C# 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 belgeleri | Kitaplık kaynak kodu | Paket (NuGet)

Önkoşullar

  • Azure aboneliği- ücretsiz olarak bir tane oluşturun
  • Geçerli .NET Core sürümü
  • Azure aboneliğiniz olduktan sonra anahtar ve uç noktanıza ulaşmak için Azure Portal bir anomali algılayıcı kaynağı oluşturun. Dağıtım için bekleyin ve Kaynağa Git düğmesini seçin.
    • 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ı sonraki hızlı başlangıçta aşağıdaki koda yapıştırın. 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 .NET Core uygulaması oluşturma

Konsol penceresinde (cmd, PowerShell veya Bash gibi), dotnet new adıyla yeni bir konsol uygulaması oluşturmak için komutunu kullanın anomaly-detector-quickstart-multivariate . Bu komut, tek bir C# kaynak dosyası olan 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üyle değiştirin. Uygulamayı ile oluşturabilirsiniz:

dotnet build

Derleme çıktısı hiçbir uyarı veya hata içermemelidir.

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

İstemci kitaplığını yükler

Uygulama dizini içinde, aşağıdaki komutla .NET için anomali algılayıcı istemci Kitaplığı ' nı bir daha yükleyeceksiniz:

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

Proje dizininden program. cs dosyasını açın ve aşağıdakileri kullanarak aşağıdakileri ekleyin directives :

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 main() yönteminde, kaynağınızın 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 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.

string endpoint = "YOUR_API_KEY";
string apiKey =  "YOUR_ENDPOINT";
string datasource = "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. Örnek:

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.

Kod örnekleri

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

İstemcinin kimliğini doğrulama

Uç nokta ve anahtarınızla bir anomali algılayıcı istemcisi oluşturun.

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

AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);

Modeli eğitme

Modelinize yönelik eğitimi işlemek için aşağıdaki gibi yeni bir özel zaman uyumsuz görev oluşturun. TrainMultivariateModelModeli eğitme ve GetMultivariateModelAysnc eğitimin ne zaman tamamlandığını kontrol etmek için kullanacaksınız.

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

Anormallikleri Algıla

Yeni eğitilen modeli kullanarak anormallikleri algılamak için private async Task adlı bir ad oluşturun detectAsync . Yeni bir oluşturacak ve bunu DetectionRequest parametresi olarak geçitirsiniz 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ı 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.

Daha önce eğitilen modeli dışarı aktarmak için adlandırılmış bir private async Task ad oluşturun exportAysnc . ExportModelAsyncDışarı aktarmak istediğiniz modelin model kimliğini kullanacaksınız ve geçitirsiniz.

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 Sil

Daha önce oluşturduğunuz bir modeli silmek DeleteMultivariateModelAsync ve silmek istediğiniz modelin model kimliğini iletmek için. Bir model KIMLIĞI almak için bize şunları yapabilirsiniz 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şturulan görevlerinizi çağırmak için ana yönteminizin 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

Uygulamayı dotnet run uygulama dizininizdeki komutla çalıştırın.

dotnet run

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

JavaScript için anomali algılayıcısının çok sayıda istemci kitaplığını kullanmaya başlayın. Paketi yüklemek ve hizmet tarafından sunulan algoritmaları kullanmaya başlamak 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.

JavaScript 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 belgeleri | Kitaplık kaynak kodu | Paket (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 ve uç noktanıza ulaşmak için Azure Portal bir anomali algılayıcı 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. Örnek:

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

detectAnomaly getDectectionResult 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

Kullanmaya başlayın Python için Anomali Algılayıcısı değişkenli istemci kitaplığını kullanın. Paketi, 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.

Python'Anomali Algılayıcısı için ç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 belgeleri | Kitaplık kaynak kodu | Paket (PyPi) | Örnek kod

Önkoşullar

  • Python 3.x
  • Pandas veri analizi kitaplığı
  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Azure aboneliğinize sahip olduktan sonra, Anomali Algılayıcısı uç noktanızı almak için Anomali Algılayıcısı kaynak Azure portal kaynak oluşturun. Dağıtmayı bekleyin ve Kaynağa git düğmesine tıklayın.
    • Uygulamanıza api'sini bağlamak için, kaynakta yer alan anahtara ve uç Anomali Algılayıcısı gerekir. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

Ayarlama

İstemci kitaplığını yükleme

Python'u yükledikten sonra istemci kitaplıklarını şu şekilde yükleyebilirsiniz:

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

Yeni 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 ortam değişkeni, zaman serisi veri dosyasının yolu ve aboneliğinizin Azure konumu olarak 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.

subscription_key = "ANOMALY_DETECTOR_KEY"
anomaly_detector_endpoint = "ANOMALY_DETECTOR_ENDPOINT"

Kod örnekleri

Bu kod parçacıkları Python için istemci kitaplığını kullanarak Anomali Algılayıcısı nasıl gerçekleştirebilirsiniz:

İstemcinin kimliğini doğrulama

Yeni bir Anomali Algılayıcısı örneği Anomali Algılayıcısı abonelik anahtarını ve ilişkili uç noktayı geçmeniz gerekir. Ayrıca bir veri kaynağı da kuracak.

Ç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. Örnek:

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şkene göre adlandırılmıştır. Örneğin, "temperature.csv" ve "humidity.csv". Tüm CSV dosyaları, 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 Depolama.

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

Önce modeli eğitecek, eğitim sırasında modelin durumunu kontrol edecek ve eğitimin ne zaman tamamlansa da algılama aşamasına geçirken ihtiyacımız olacak en son model kimliğini alacaz.

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

Anomalileri algılama

Veri detect_anomaly get_dectection_result kaynağınız içinde anomali olup olmadığını belirlemek için ve kullanın. Yeni eğitmiş olduğunuz modelin model kimliğini geçmeniz gerekir.

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ı 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.

Modeli dışarı aktarmak için kullanın export_model ve dışarı aktarmayı istediğiniz modelin model kimliğini girin:

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 silme

Modeli silmek için delete_multivariate_model kullanın ve silmek istediğiniz modelin model kimliğini girin:

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şlevleri çağıracak bazı kodlar eklememiz gerekir.

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)

Çalıştırmadan önce, projenizi bu hızlı başlangıçtan türetilen tam örnek koda karşı denetlemeniz yararlı olabilir.

Ayrıca, başlamanıza yardımcı olacak Jupyter Notebook ayrıntılı bir çalışmamız da vardır.

komutunu ve dosya python adınızla uygulamayı çalıştırın.

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 Java için Anomali Algılayıcısı değişkenli istemci kitaplığıyla birlikte kullanın. Paketi, 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.

Java için 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 belgeleri | Kitaplık kaynak kodu | Paket (Maven) | Örnek kod

Önkoşullar

  • Azure aboneliği - Ücretsiz bir abonelik oluşturun
  • Java Development Kit'in (JDK) geçerli sürümü
  • Gradle derleme aracıveya başka bir bağımlılık yöneticisi.
  • Azure aboneliğinize sahip olduktan sonra, Anomali Algılayıcısı ve uç Anomali Algılayıcısı almak için Azure portal kaynak oluşturun. Dağıtmayı bekleyin ve Kaynağa git düğmesine tıklayın.
    • Uygulamanıza api'sini bağlamak için, kaynakta yer alan anahtara ve uç Anomali Algılayıcısı gerekir. Hızlı başlangıçta anahtarınızı ve uç noktanızı aşağıdaki koda yapıştırabilirsiniz. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek üzere ücretsiz fiyatlandırma katmanını ( F0 ) kullanabilirsiniz.

Ayarlama

Yeni bir Gradle projesi oluşturma

Bu hızlı başlangıçta Gradle bağımlılık yöneticisi 2. Maven Merkezi Deposu hakkında daha fazla istemci kitaplığı bilgisi bulabilirsiniz.

Konsol penceresinde (cmd, PowerShell veya Bash gibi) uygulama için yeni bir dizin oluşturun ve bu dizine gidin.

mkdir myapp && cd myapp

Komutunu gradle init çalışma dizinden çalıştırın. Bu komut, çalışma zamanında uygulama oluşturmak ve yapılandırmak için kullanılan build.gradle.kts dahil olmak üzere Gradle için temel derleme dosyaları oluşturacak.

gradle init --type basic

DSL seçmeniz istendiğinde Kotlin'i seçin.

İstemci kitaplığını yükleme

build.gradle.kts'yi bulun ve tercih ettiğiniz IDE veya metin düzenleyicisiyle açın. Ardından bu derleme yapılandırmasına kopyalayın. Proje bağımlılıklarını dahil etmek için 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 dizininize 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. Örnek:

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 Depolama.

Kod örnekleri

Bu kod parçacıkları, aşağıdakiler için Anomali Algılayıcısı istemci kitaplığı ile 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 meta.jsdosya adıyla farklı olmasını isterseniz, zip dosyasına ek bir .zip dahil olabilir. 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