Hızlı Başlangıç: Çok Değişkenli Anomali Algılayıcısı istemci kitaplığını kullanma
Önemli
20 Eylül 2023 tarihinden itibaren yeni Anomali Algılayıcısı kaynakları oluşturamayacaksınız. Anomali Algılayıcısı hizmeti 1 Ekim 2026'da kullanımdan kaldırılıyor.
C# için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayı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ılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.
C# için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:
- Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
- Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
- Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.
Kitaplık başvurusu belgeleri | Kitaplık kaynak kodu | Paketi (NuGet)
Önkoşullar
- Azure aboneliği - Ücretsiz olarak oluşturun
- .NET Core'un geçerli sürümü
- Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin.
- Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
F0
) kullanabilirsiniz.
- Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştırın.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
Ayarlama
Depolama hesabı oluşturma
Çok değişkenli Anomali Algılayıcısı, örnek dosyanızın Azure Blob Depolama depolanmasını gerektirir.
- Bir Azure Depolama hesabı oluşturun.
- Erişim Denetimi(IAM) bölümüne gidin ve Rol ataması ekle'ye EKLE'yi seçin.
- Depolama Blobu Veri Okuyucusu'nun rolünü arayın, bu hesap türünü vurgulayın ve İleri'yi seçin.
- Yönetilen kimliğe erişim ata'yı ve Üyeleri Seç'i seçin, ardından daha önce oluşturduğunuz Anomali Algılayıcısı kaynağını ve ardından Gözden Geçir ve ata'yı seçin.
Bu yapılandırma bazen biraz kafa karıştırıcı olabilir. Sorun yaşıyorsanız çok değişkenli Jupyter Notebook örneğimize danışmanızı öneririz. Bu örnekte bu işlem daha ayrıntılı bir şekilde izlenir.
Örnek verileri indirme data
Bu hızlı başlangıçta örnek veriler sample_data_5_3000.csv
için bir dosya kullanılır. Bu dosya GitHub örnek verilerimizden indirilebilir
Aşağıdakini çalıştırarak örnek verileri de indirebilirsiniz:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Örnek verileri Depolama Hesabına yükleme
- Depolama Hesabınıza gidin, Kapsayıcılar'ı seçin ve yeni bir kapsayıcı oluşturun.
- Karşıya yükle ve karşıya yükle sample_data_5_3000.csv'ı seçin
- Karşıya yüklediğiniz verileri seçin ve birkaç adımda kod örneğine eklemeniz gerektiğinden Blob URL'sini kopyalayın.
Anahtarı ve uç noktayı alma
Anomali Algılayıcısı hizmetine karşı başarılı bir şekilde çağrı yapmak için aşağıdaki değerlere ihtiyacınız vardır:
Değişken adı | Değer |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
API anahtarı değeri, Azure portalından kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. KEY1 veya KEY2 kullanabilirsiniz. |
Azure portalında kaynağınıza gidin. Uç Nokta ve Anahtarlar Kaynak Yönetimi bölümünde bulunabilir. Api çağrılarınızın kimliğini doğrulamak için hem uç noktanızı hem de erişim anahtarınızı kopyalayın. KEY1
veya KEY2
kullanabilirsiniz. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.
Ortam değişkenlerini oluşturma
Anahtarınız ve uç noktanız için kalıcı ortam değişkenleri oluşturun ve atayın.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Yeni .NET Core uygulaması oluşturma
Bir konsol penceresinde (cmd, PowerShell veya Bash gibi), adlı anomaly-detector-quickstart-multivariate
yeni bir konsol uygulaması oluşturmak için komutunu kullanındotnet new
. Bu komut, tek bir C# kaynak dosyasıyla 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ı şu şekilde oluşturabilirsiniz:
dotnet build
Derleme çıkışı hiçbir uyarı veya hata içermemelidir.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
İstemci kitaplığını yükleme
Uygulama dizininde aşağıdaki komutla .NET için Anomali Algılayıcısı istemci kitaplığını yükleyin:
dotnet add package Azure.AI.AnomalyDetector --prerelease
Proje dizininden program.cs dosyasını açın ve öğesini aşağıdaki kodla değiştirin:
using Azure.AI.AnomalyDetector;
using Azure;
using static System.Environment;
internal class Program
{
private static void Main(string[] args)
{
string endpoint = GetEnvironmentVariable("ANOMALY_DETECTOR_ENDPOINT");
string apiKey = GetEnvironmentVariable("ANOMALY_DETECTOR_API_KEY");
string datasource = "Path-to-sample-file-in-your-storage-account"; // example path:https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
Console.WriteLine(endpoint);
var endpointUri = new Uri(endpoint);
var credential = new AzureKeyCredential(apiKey);
//create client
AnomalyDetectorClient client = new AnomalyDetectorClient(endpointUri, credential);
// train
TimeSpan offset = new TimeSpan(0);
DateTimeOffset start_time = new DateTimeOffset(2021, 1, 2, 0, 0, 0, offset);
DateTimeOffset end_time = new DateTimeOffset(2021, 1, 2, 5, 0, 0, offset);
string model_id = null;
try
{
model_id = TrainModel(client, datasource, start_time, end_time);
// detect
end_time = new DateTimeOffset(2021, 1, 2, 1, 0, 0, offset);
MultivariateDetectionResult result = BatchDetect(client, datasource, model_id, start_time, end_time);
if (result != null)
{
Console.WriteLine(string.Format("Result ID: {0}", result.ResultId.ToString()));
Console.WriteLine(string.Format("Result summary: {0}", result.Summary.ToString()));
Console.WriteLine(string.Format("Result length: {0}", result.Results.Count));
Console.WriteLine(string.Format("Anomalies found: {0}", result.Results.Where(r => r.Value.IsAnomaly).Count()));
}
// delete
DeleteModel(client, model_id);
}
catch (Exception e)
{
string msg = string.Format("Multivariate error. {0}", e.Message);
Console.WriteLine(msg);
throw;
}
int GetModelNumber(AnomalyDetectorClient client)
{
int model_number = 0;
foreach (var multivariateModel in client.GetMultivariateModels())
{
model_number++;
}
return model_number;
}
string TrainModel(AnomalyDetectorClient client, string datasource, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Training new model...");
Console.WriteLine(string.Format("{0} available models before training.", GetModelNumber(client)));
ModelInfo request = new ModelInfo(datasource, start_time, end_time);
request.SlidingWindow = 200;
Console.WriteLine("Training new model...(it may take a few minutes)");
AnomalyDetectionModel response = client.TrainMultivariateModel(request);
string trained_model_id = response.ModelId;
Console.WriteLine(string.Format("Training model id is {0}", trained_model_id));
// Wait until the model is ready. It usually takes several minutes
ModelStatus? model_status = null;
int tryout_count = 1;
response = client.GetMultivariateModel(trained_model_id);
while (tryout_count < max_tryout & model_status != ModelStatus.Ready & model_status != ModelStatus.Failed)
{
Thread.Sleep(1000);
response = client.GetMultivariateModel(trained_model_id);
model_status = response.ModelInfo.Status;
Console.WriteLine(string.Format("try {0}, model_id: {1}, status: {2}.", tryout_count, trained_model_id, model_status));
tryout_count += 1;
};
if (model_status == ModelStatus.Ready)
{
Console.WriteLine("Creating model succeeds.");
Console.WriteLine(string.Format("{0} available models after training.", GetModelNumber(client)));
return trained_model_id;
}
if (model_status == ModelStatus.Failed)
{
Console.WriteLine("Creating model failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {0}, Message: {1}", response.ModelInfo.Errors[0].Code.ToString(), response.ModelInfo.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
}
return null;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Train error. {0}", e.Message));
throw;
}
}
MultivariateDetectionResult BatchDetect(AnomalyDetectorClient client, string datasource, string model_id, DateTimeOffset start_time, DateTimeOffset end_time, int max_tryout = 500)
{
try
{
Console.WriteLine("Start batch detect...");
MultivariateBatchDetectionOptions request = new MultivariateBatchDetectionOptions(datasource, 10, start_time, end_time);
Console.WriteLine("Start batch detection, this might take a few minutes...");
MultivariateDetectionResult response = client.DetectMultivariateBatchAnomaly(model_id, request);
string result_id = response.ResultId;
Console.WriteLine(string.Format("result id is: {0}", result_id));
// get detection result
MultivariateDetectionResult resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
MultivariateBatchDetectionStatus result_status = resultResponse.Summary.Status;
int tryout_count = 0;
while (tryout_count < max_tryout & result_status != MultivariateBatchDetectionStatus.Ready & result_status != MultivariateBatchDetectionStatus.Failed)
{
Thread.Sleep(1000);
resultResponse = client.GetMultivariateBatchDetectionResult(result_id);
result_status = resultResponse.Summary.Status;
Console.WriteLine(string.Format("try: {0}, result id: {1} Detection status is {2}", tryout_count, result_id, result_status.ToString()));
Console.Out.Flush();
}
if (result_status == MultivariateBatchDetectionStatus.Failed)
{
Console.WriteLine("Detection failed.");
Console.WriteLine("Errors:");
try
{
Console.WriteLine(string.Format("Error code: {}. Message: {}", resultResponse.Summary.Errors[0].Code.ToString(), resultResponse.Summary.Errors[0].Message.ToString()));
}
catch (Exception e)
{
Console.WriteLine(string.Format("Get error message fail: {0}", e.Message));
}
return null;
}
return resultResponse;
}
catch (Exception e)
{
Console.WriteLine(string.Format("Detection error. {0}", e.Message));
throw;
}
}
void DeleteModel(AnomalyDetectorClient client, string model_id)
{
client.DeleteMultivariateModel(model_id);
int model_number = GetModelNumber(client);
Console.WriteLine(string.Format("{0} available models after deletion.", model_number));
}
}
}
Uygulamayı çalıştırma
Uygulamayı uygulama dizininizdeki komutuyla dotnet run
çalıştırın.
dotnet run
Kaynakları temizleme
Azure AI hizmetleri 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 çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayı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ılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.
JavaScript için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:
- Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
- Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
- Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.
Kitaplık başvuru belgeleri | Kitaplık kaynak kodu | Paketi (npm) | Örnek kod
Önkoşullar
- Azure aboneliği - Ücretsiz olarak oluşturun
- Node.js'in geçerli sürümü
- Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin.
- Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
F0
) kullanabilirsiniz.
- Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
Ayarlama
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 dizine gidin.
mkdir myapp && cd myapp
Bir package.json
dosyası ile bir düğüm uygulaması oluşturmak için npm init
komutunu çalıştırın.
npm init
adlı index.js
bir dosya oluşturun ve aşağıdaki 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ş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ğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda 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";
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.
Anomali Algılayıcısı ç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 serisi kümesidir:
Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunlu bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren 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ılmalıdı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ılmalıdır. Zip dosyası istediğiniz ada sahip olabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra, eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.
İstemci kitaplığını yükleme
ms-rest-azure
ve azure-ai-anomalydetector
NPM paketlerini yükleyin. Csv-ayrıştırma kitaplığı da bu hızlı başlangıçta 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ısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:
- İ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 kimlik bilgilerinizle bir AnomalyDetectorClient
nesne örneği oluşturma.
const client = new AnomalyDetectorClient(endpoint, new AzureKeyCredential(apiKey));
Modeli eğitme
Model sonucu oluşturma
İlk olarak bir model isteği oluşturmamız gerekir. Başlangıç ve bitiş saatlerinin veri kaynağınızla uyumlu olduğundan emin olun.
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 model eğitin
Model isteğinizi Anomali Algılayıcısı istemci trainMultivariateModel
yöntemine geçirirsiniz.
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 tamam olup olmadığı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.");
Anomalileri algılama
detectAnomaly
Veri kaynağınızda anomali olup olmadığını belirlemek için ve getDectectionResult
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ı aktarma
Not
Dışarı aktarma komutunun kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu, şu anda çok değişkenli için desteklenmemektedir, ancak gelecekte destek eklenecektir.
Eğitilen modelinizi dışarı aktarmak için işlevini kullanın exportModel
.
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 silme
Geçerli kaynak tarafından kullanılabilen mevcut bir modeli silmek için işlevini kullanın deleteMultivariateModel
.
client.deleteMultivariateModel(model_id)
console.log("New model has been deleted.")
Uygulamayı çalıştırma
Uygulamayı çalıştırmadan önce kodunuzu tam örnek koda karşı denetlemek yararlı olabilir
Uygulamayı hızlı başlangıç dosyanızdaki node
komutuyla çalıştırın.
node index.js
Kaynakları temizleme
Azure AI hizmetleri 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
Kitaplık başvuru belgeleri |Kitaplık kaynak kodu | Paketi (PyPi) |GitHub'da örnek kodu bulma
Python için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve hizmet tarafından sağlanan algoritmaları kullanmaya başlayın. Yeni çok değişkenli anomali algılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.
Python için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:
- Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
- Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
- Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.
Önkoşullar
- Azure aboneliği - Ücretsiz bir abonelik oluşturun
- Python 3.x
- Azure aboneliğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin. Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
F0
) kullanabilirsiniz.
Ayarlama
İstemci kitaplığını yükleyin. İstemci kitaplığını şu şekilde yükleyebilirsiniz:
pip install --upgrade azure.ai.anomalydetector
Depolama hesabı oluşturma
Çok değişkenli Anomali Algılayıcısı, örnek dosyanızın Azure Blob Depolama depolanmasını gerektirir.
- Bir Azure Depolama hesabı oluşturun.
- Erişim Denetimi(IAM) bölümüne gidin ve Rol ataması ekle'ye EKLE'yi seçin.
- Depolama Blobu Veri Okuyucusu'nun rolünü arayın, bu hesap türünü vurgulayın ve İleri'yi seçin.
- Yönetilen kimliğe erişim ata'yı ve Üyeleri Seç'i seçin, ardından daha önce oluşturduğunuz Anomali Algılayıcısı kaynağını ve ardından Gözden Geçir ve ata'yı seçin.
Bu yapılandırma bazen biraz kafa karıştırıcı olabilir. Sorun yaşıyorsanız çok değişkenli Jupyter Notebook örneğimize danışmanızı öneririz. Bu örnekte bu işlem daha ayrıntılı bir şekilde izlenir.
Örnek verileri indirme data
Bu hızlı başlangıçta örnek veriler sample_data_5_3000.csv
için bir dosya kullanılır. Bu dosya GitHub örnek verilerimizden indirilebilir
Aşağıdakini çalıştırarak örnek verileri de indirebilirsiniz:
curl "https://github.com/Azure-Samples/AnomalyDetector/blob/master/sampledata/multivariate/sample_data_5_3000.csv" --output sample_data_5_3000_.csv
Örnek verileri Depolama Hesabına yükleme
- Depolama Hesabınıza gidin, Kapsayıcılar'ı seçin ve yeni bir kapsayıcı oluşturun.
- Karşıya yükle ve karşıya yükle sample_data_5_3000.csv'ı seçin
- Karşıya yüklediğiniz verileri seçin ve birkaç adımda kod örneğine eklemeniz gerektiğinden Blob URL'sini kopyalayın.
Anahtarı ve uç noktayı alma
Anomali Algılayıcısı hizmetine karşı başarılı bir şekilde çağrı yapmak için aşağıdaki değerlere ihtiyacınız vardır:
Değişken adı | Değer |
---|---|
ANOMALY_DETECTOR_ENDPOINT |
Bu değer, Azure portal kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. Örnek uç nokta: https://YOUR_RESOURCE_NAME.cognitiveservices.azure.com/ |
ANOMALY_DETECTOR_API_KEY |
API anahtarı değeri, Azure portalından kaynağınızı incelerken Anahtarlar ve Uç Nokta bölümünde bulunabilir. KEY1 veya KEY2 kullanabilirsiniz. |
Azure portalında kaynağınıza gidin. Uç Nokta ve Anahtarlar Kaynak Yönetimi bölümünde bulunabilir. Api çağrılarınızın kimliğini doğrulamak için hem uç noktanızı hem de erişim anahtarınızı kopyalayın. KEY1
veya KEY2
kullanabilirsiniz. Her zaman iki anahtara sahip olmak, hizmet kesintisine neden olmadan anahtarları güvenli bir şekilde döndürmenize ve yeniden oluşturmanıza olanak tanır.
Ortam değişkenlerini oluşturma
Anahtarınız ve uç noktanız için kalıcı ortam değişkenleri oluşturun ve atayın.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
setx ANOMALY_DETECTOR_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE"
setx ANOMALY_DETECTOR_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE"
Yeni Python uygulaması oluşturma
sample_multivariate_detect.py adlı yeni bir Python dosyası oluşturun. Ardından tercih ettiğiniz düzenleyicide veya IDE'de açın.
sample_multivariate_detect.py içeriğini aşağıdaki kodla değiştirin. değişkenleri
blob_url
için yolları değiştirmeniz gerekir.
import time
from datetime import datetime, timezone
from azure.ai.anomalydetector import AnomalyDetectorClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.anomalydetector.models import *
import os
SUBSCRIPTION_KEY = os.environ['ANOMALY_DETECTOR_API_KEY']
ANOMALY_DETECTOR_ENDPOINT = os.environ['ANOMALY_DETECTOR_ENDPOINT']
ad_client = AnomalyDetectorClient(ANOMALY_DETECTOR_ENDPOINT, AzureKeyCredential(SUBSCRIPTION_KEY))
time_format = "%Y-%m-%dT%H:%M:%SZ"
blob_url = "Path-to-sample-file-in-your-storage-account" # example path: https://docstest001.blob.core.windows.net/test/sample_data_5_3000.csv
train_body = ModelInfo(
data_source=blob_url,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
data_schema="OneTable",
display_name="sample",
sliding_window=200,
align_policy=AlignPolicy(
align_mode=AlignMode.OUTER,
fill_n_a_method=FillNAMethod.LINEAR,
padding_value=0,
),
)
batch_inference_body = MultivariateBatchDetectionOptions(
data_source=blob_url,
top_contributor_count=10,
start_time=datetime.strptime("2021-01-02T00:00:00Z", time_format),
end_time=datetime.strptime("2021-01-02T05:00:00Z", time_format),
)
print("Training new model...(it may take a few minutes)")
model = ad_client.train_multivariate_model(train_body)
model_id = model.model_id
print("Training model id is {}".format(model_id))
## Wait until the model is ready. It usually takes several minutes
model_status = None
model = None
while model_status != ModelStatus.READY and model_status != ModelStatus.FAILED:
model = ad_client.get_multivariate_model(model_id)
print(model)
model_status = model.model_info.status
print("Model is {}".format(model_status))
time.sleep(30)
if model_status == ModelStatus.READY:
print("Done.\n--------------------")
# Return the latest model id
# Detect anomaly in the same data source (but a different interval)
result = ad_client.detect_multivariate_batch_anomaly(model_id, batch_inference_body)
result_id = result.result_id
# Get results (may need a few seconds)
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Get detection result...(it may take a few seconds)")
while anomaly_results.summary.status != MultivariateBatchDetectionStatus.READY and anomaly_results.summary.status != MultivariateBatchDetectionStatus.FAILED:
anomaly_results = ad_client.get_multivariate_batch_detection_result(result_id)
print("Detection is {}".format(anomaly_results.summary.status))
time.sleep(5)
print("Result ID:\t", anomaly_results.result_id)
print("Result status:\t", anomaly_results.summary.status)
print("Result length:\t", len(anomaly_results.results))
# See detailed inference result
for r in anomaly_results.results:
print(
"timestamp: {}, is_anomaly: {:<5}, anomaly score: {:.4f}, severity: {:.4f}, contributor count: {:<4d}".format(
r.timestamp,
r.value.is_anomaly,
r.value.score,
r.value.severity,
len(r.value.interpretation) if r.value.is_anomaly else 0,
)
)
if r.value.interpretation:
for contributor in r.value.interpretation:
print(
"\tcontributor variable: {:<10}, contributor score: {:.4f}".format(
contributor.variable, contributor.contribution_score
)
)
Uygulamayı çalıştırma
Uygulamayı hızlı başlangıç dosyanızdaki python
komutuyla çalıştırın.
python sample_multivariate_detect.py
Çıktı
10 available models before training.
Training new model...(it may take a few minutes)
Training model id is 3a695878-a88f-11ed-a16c-b290e72010e0
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:23Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'CREATED', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [], 'trainLosses': [], 'validationLosses': [], 'latenciesInSeconds': []}, 'variableStates': []}}}
Model is CREATED
{'modelId': '3a695878-a88f-11ed-a16c-b290e72010e0', 'createdTime': '2023-02-09T15:34:23Z', 'lastUpdatedTime': '2023-02-09T15:34:55Z', 'modelInfo': {'dataSource': 'https://docstest001.blob.core.windows.net/test/sample_data_5_3000 (1).csv', 'dataSchema': 'OneTable', 'startTime': '2021-01-02T00:00:00Z', 'endTime': '2021-01-02T05:00:00Z', 'displayName': 'sample', 'slidingWindow': 200, 'alignPolicy': {'alignMode': 'Outer', 'fillNAMethod': 'Linear', 'paddingValue': 0.0}, 'status': 'READY', 'errors': [], 'diagnosticsInfo': {'modelState': {'epochIds': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100], 'trainLosses': [1.0493712276220322, 0.5454281121492386, 0.42524269968271255, 0.38019897043704987, 0.3472398854792118, 0.34301353991031647, 0.3219067454338074, 0.3108387663960457, 0.30357857793569565, 0.29986055195331573], 'validationLosses': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], 'latenciesInSeconds': [0.3412797451019287, 0.25798678398132324, 0.2556419372558594, 0.3165152072906494, 0.2748451232910156, 0.26111531257629395, 0.2571413516998291, 0.257282018661499, 0.2549862861633301, 0.25806593894958496]}, 'variableStates': [{'variable': 'series_0', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_1', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_2', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_3', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}, {'variable': 'series_4', 'filledNARatio': 0.0, 'effectiveCount': 301, 'firstTimestamp': '2021-01-02T00:00:00Z', 'lastTimestamp': '2021-01-02T05:00:00Z'}]}}}
Model is READY
Done.
--------------------
10 available models after training.
Get detection result...(it may take a few seconds)
Detection is CREATED
Detection is READY
Result ID: 70a6cdf8-a88f-11ed-a461-928899e62c38
Result status: READY
Result length: 301
timestamp: 2021-01-02 00:00:00+00:00, is_anomaly: 0 , anomaly score: 0.1770, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:01:00+00:00, is_anomaly: 0 , anomaly score: 0.3446, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:02:00+00:00, is_anomaly: 0 , anomaly score: 0.2397, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:03:00+00:00, is_anomaly: 0 , anomaly score: 0.1270, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:04:00+00:00, is_anomaly: 0 , anomaly score: 0.3321, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:05:00+00:00, is_anomaly: 0 , anomaly score: 0.4053, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:06:00+00:00, is_anomaly: 0 , anomaly score: 0.4371, severity: 0.0000, contributor count: 0
timestamp: 2021-01-02 00:07:00+00:00, is_anomaly: 1 , anomaly score: 0.6615, severity: 0.3850, contributor count: 5
contributor variable: series_3 , contributor score: 0.2939
contributor variable: series_1 , contributor score: 0.2834
contributor variable: series_4 , contributor score: 0.2329
contributor variable: series_0 , contributor score: 0.1543
contributor variable: series_2 , contributor score: 0.0354
Çıktı sonuçları kısa olması için kesildi.
Kaynakları temizleme
bir Anomali Algılayıcısı kaynağını 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. Artık kullanmayı düşünmüyorsanız, oluşturduğunuz ortam değişkenlerini silmeyi de düşünebilirsiniz.
Java için çok değişkenli Anomali Algılayıcısı istemci kitaplığını kullanmaya başlayın. Hizmet tarafından sağlanan algoritmaları kullanarak paketi yüklemeye başlamak için bu adımları izleyin. Yeni çok değişkenli anomali algılayıcı API'leri, makine öğrenmesi bilgisine veya etiketlenmiş verilere gerek kalmadan gelişmiş yapay zekayı ölçüm gruplarından anomalileri algılamak için kolayca tümleştirerek geliştiricilere olanak tanır. Farklı sinyaller arasındaki bağımlılıklar ve bağıntılar otomatik olarak önemli faktörler olarak sayılır. Bu, karmaşık sistemlerinizi hatalara karşı proaktif olarak korumanıza yardımcı olur.
Java için Anomali Algılayıcısı çok değişkenli istemci kitaplığını kullanarak:
- Bir zaman serisi grubundaki sistem düzeyinde anomalileri algılama.
- Herhangi bir zaman serisi size fazla bir şey anlatmadığında ve bir sorunu algılamak için tüm sinyallere bakmanız gerektiğinde.
- Sistem sağlığının çeşitli yönlerini ölçen onlarca ile yüzlerce farklı sensör türü arasında pahalı fiziksel varlıkların önceden bakımları.
Kitaplık başvurusu belgeleri | Kitaplık kaynak kodu | Paketi (Maven) | Örnek kod
Önkoşullar
- Azure aboneliği - Ücretsiz olarak 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ğinizi aldıktan sonra anahtarınızı ve uç noktanızı almak için Azure portalında bir Anomali Algılayıcısı kaynağı oluşturun. Dağıtmasını bekleyin ve Kaynağa git düğmesini seçin.
- Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
F0
) kullanabilirsiniz.
- Uygulamanızı Anomali Algılayıcısı API'sine bağlamak için oluşturduğunuz kaynaktan anahtara ve uç noktaya ihtiyacınız olacaktır. Anahtarınızı ve uç noktanızı hızlı başlangıcın ilerleyen bölümlerinde aşağıdaki koda yapıştıracaksınız.
Hizmeti denemek ve daha sonra üretim için ücretli bir katmana yükseltmek için ücretsiz fiyatlandırma katmanını (
Ayarlama
Yeni Gradle projesi oluşturma
Bu hızlı başlangıçta Gradle bağımlılık yöneticisi kullanılır. Maven Central Deposu'nda daha fazla istemci kitaplığı bilgisi bulabilirsiniz.
Konsol penceresinde (cmd, PowerShell veya Bash gibi), uygulamanız için yeni bir dizin oluşturun ve bu dizine gidin.
mkdir myapp && cd myapp
gradle init
Komutunu çalışma dizininizden ç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 temel derleme dosyaları oluşturur.
gradle init --type basic
DSL seçmeniz istendiğinde Kotlin'i seçin.
İstemci kitaplığını yükleme
build.gradle.kts dosyasını bulun ve tercih ettiğiniz IDE veya metin düzenleyici ile açın. Ardından 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 MetricsAdvisorQuickstarts.java adlı bir dosya oluşturun. Tercih ettiğiniz düzenleyicide veya IDE'de açın ve aşağıdaki import
deyimleri 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ızı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ğine sahip olursunuz. Bu, güvenli anahtar döndürmeye izin vermektir. Bu hızlı başlangıcın amaçları doğrultusunda ilk anahtarı kullanın.
String key = "YOUR_API_KEY";
String endpoint = "YOUR_ENDPOINT";
Önemli
İşiniz bittiğinde anahtarı kodunuzdan kaldırmayı unutmayın ve asla herkese açık olarak göndermeyin. Üretim için Azure Key Vault gibi kimlik bilgilerinizi depolamanın ve bunlara erişmenin güvenli bir yolunu kullanın. Daha fazla bilgi için Azure AI hizmetleri güvenlik makalesine bakın.
Anomali Algılayıcısı ç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 serisi kümesidir:
Her zaman serisi, üst bilgi satırı olarak "zaman damgası" ve "değer" (tümü küçük harfle) olmak üzere iki (ve yalnızca iki) sütunlu bir CSV dosyası olmalıdır. "Zaman damgası" değerleri ISO 8601'e uygun olmalıdır; "değer", herhangi bir sayıda ondalık basamak içeren 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ılmalıdı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ılmalıdır. Zip dosyası istediğiniz ada sahip olabilir. Zip dosyası Azure Blob depolamaya yüklenmelidir. Zip dosyası için blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra, eğitim için kullanılabilir. Azure Blob Depolama'dan SAS URL'leri oluşturma hakkında bilgi için bu belgeye bakın.
Kod örnekleri
Bu kod parçacıkları, Node.js için Anomali Algılayıcısı istemci kitaplığıyla aşağıdakileri nasıl yapacağınızı gösterir:
- İ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 kimlik bilgilerinizle bir anomalyDetectorClient
nesne örneği oluşturma.
HttpHeaders headers = new HttpHeaders()
.put("Accept", ContentType.APPLICATION_JSON);
HttpPipelinePolicy authPolicy = new AzureKeyCredentialPolicy("Ocp-Apim-Subscription-Key",
new AzureKeyCredential(key));
AddHeadersPolicy addHeadersPolicy = new AddHeadersPolicy(headers);
HttpPipeline httpPipeline = new HttpPipelineBuilder().httpClient(HttpClient.createDefault())
.policies(authPolicy, addHeadersPolicy).build();
// Instantiate a client that will be used to call the service.
HttpLogOptions httpLogOptions = new HttpLogOptions();
httpLogOptions.setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS);
AnomalyDetectorClient anomalyDetectorClient = new AnomalyDetectorClientBuilder()
.pipeline(httpPipeline)
.endpoint(endpoint)
.httpLogOptions(httpLogOptions)
.buildClient();
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ş saatlerinin veri kaynağınızla uyumlu olduğundan emin olun.
Anomali Algılayıcısı çok değişkenli API'leri kullanmak için algılamayı kullanmadan önce kendi modelimizi eğitmeliyiz. Eğitim için kullanılan veriler bir dizi zaman serisidir; her zaman serisi yalnızca "zaman damgası" ve "değer" olmak üzere iki sütun içeren bir CSV dosyasında olmalıdır (sütun adları tam olarak aynı olmalıdır). Her CSV dosyası, zaman serisi için her değişkenden sonra adlandırılmalıdır. Zaman serisinin tamamı tek bir zip dosyasına sıkıştırılmalı ve Azure Blob depolamaya yüklenmelidir ve zip dosyası adı için bir gereksinim yoktur. Alternatif olarak, değişkenin adının .zip dosya adından farklı olmasını istiyorsanız zip dosyasına ek bir meta.json dosyası da eklenebilir. Blob SAS (Paylaşılan erişim imzaları) URL'sini oluşturduktan sonra 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 komutunun kapsayıcılı bir ortamda çok değişkenli Anomali Algılayıcısı model çalıştırmaya izin vermek için kullanılması amaçlanmıştır. Bu, şu anda çok değişkenli için desteklenmemektedir, ancak gelecekte destek eklenecektir.
Eğitilen modelinizi dışarı aktarmak için kullanın exportModelWithResponse
.
StreamResponse response_export = anomalyDetectorClient.exportModelWithResponse(model_id, Context.NONE);
Flux<ByteBuffer> value = response_export.getValue();
FileOutputStream bw = new FileOutputStream("result.zip");
value.subscribe(s -> write(bw, s), (e) -> close(bw), () -> close(bw));
Modeli silme
Geçerli kaynak tarafından kullanılabilen mevcut bir modeli silmek için işlevini kullanın deleteMultivariateModelWithResponse
.
Response<Void> deleteMultivariateModelWithResponse = anomalyDetectorClient.deleteMultivariateModelWithResponse(model_id, Context.NONE);
Uygulamayı çalıştırma
Uygulamayı şu şekilde oluşturabilirsiniz:
gradle build
Uygulamayı çalıştırma
Çalıştırmadan önce kodunuzun tam örnek kodla karşılaştırılması yararlı olabilir.
Uygulamayı şu hedefle run
çalıştırın:
gradle run
Kaynakları temizleme
Azure AI hizmetleri 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.