首页 > 解决方案 > Azure 异常检测器与 C# 第 2 部分

问题描述

我正在使用https://docs.microsoft.com/en-us/azure/cognitive-services/anomaly-detector/quickstarts/client-libraries-multivariate?pivots=programming-language-csharp上的代码 我创建了一个blob 存储帐户中的 csv 文件。压缩和解压缩的副本都已上传。

这是我的数据源的 url,私有位为 xxx。

        string datasource = "https://xx.blob.core.windows.net/testdirectory?sp=r&st=2021-07-21T14:10:15Z&se=2021-07-21T22:10:15Z&sip=xx&spr=https&sv=2020-08-04&sr=c&sig=xxx";

这段代码有什么作用,为什么总是返回零计数?

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

标签: c#azure-cognitive-services

解决方案


这段代码(getModelNumberAsync 函数)有什么作用?

它列出了给定客户已经存在的模型(例如来自先前训练的模型)。

此外,如果删除参数已设置为 true,它会删除 3 个最近的模型。
我个人认为(我可能错了)这个样本有一个错误。我认为样本作者的意图是删除除最近的 4 个以外的所有旧模型(因此,它应该是 count > 4)。在任何情况下,示例代码中的删除标志都不会设置为 true。所以,这是一个有争议的问题。

为什么它总是返回零计数?

这表明尚未创建模型。这很可能是因为您尚未尝试训练模型。检查您是否在示例代码中调用 trainAsync 函数。即使您的训练失败(因为 csv 文件不是预期的格式等),也会创建一个状态为“失败”的模型,此时计数应该 > 零。

例如,当我尝试样本时,我的训练失败(由于不相关的原因 - 我的数据不是预期的格式),但 getModelNumberAsync 列出了客户知道的所有先前模型(计数为 5)。我将“状态:{3}”添加到控制台日志行。它不在示例代码中。 在此处输入图像描述


推荐阅读