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.
- 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.
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.
- 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.
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.
- 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ı (
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
- Modeli eğitme
- Anomalileri algılama
- Modeli dışarı aktarma
- Modeli silme
İ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.
- 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ı (
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
- Modeli eğitme
- Anomalileri algılama
- Modeli dışarı aktarma
- Modeli silme
İ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.