ML.NET API 和工具八月更新

ML.NET是一个开源的跨平台机器学习框架,适合 .NET 开发人员。它允许将机器学习集成到 .NET 应用中,而无需离开 .NET 生态系统。ML.NET工具(Visual Studio 中的模型生成器 UI 和跨平台 ML.NET CLI),可根据您的场景和数据自动训练自定义机器学习模型。

在八月官方发布了ML.NET 1.5 和 1.5.1 以及新版本的模型生成器。其中包括了Bug修复和功能增强,以及异常检测和时间序列数据的新功能、TextLoader 的改进、模型生成器中图像分类的本地 GPU 训练等。

异常检测和时间序列数据的新算法和功能

时序列数据是一系列数据点。时间序列数据的一个常见示例是一年中每月的产品销售额:

 

 

 

机器学习中的时间序列数据有许多应用。异常检测和预测两种是 ML.NET 支持最多的:

  • 通过异常检测,您可以在时间序列数据中发现异常峰值。例如,您可以使用异常检测来识别信用卡上的潜在欺诈,或者根据仪表的每日读数确定功耗峰值。
  • 使用预测,您可以使用过去的时间序列数据对未来的行为进行预测。例如,您可以预测每月销售额,或者预测天气。

通过 SrCnn 算法检测完整异常

ML.NET 1.5 增加了一种新的异常检测算法,称为 DetectEntireAnomalyBySrCnn。此算法允许您一次检测整个数据集的异常。相较于现有的 DetectAnomalyBySrCnn 算法,它将数据集的某些部分stream化,并围绕检查点查找异常。

此新算法可以更快处理任意大小的数据集,因为它可以在固定大小的批处理上进行训练。但是由于它在内存中加载整个数据集,因此也会消耗更多的内存。如果手头有所有数据,可以使用新的DetectEntireAnomalyBySrCnn 算法。但是,如果时间序列数据正在流式传输,手头没有全部数据,或者数据太大,无法放入内存中,您仍然可以使用以前的 DetectAnomalyBySrCnn 算法。请查看此样本,了解如何使用 DetectEntireAnomalyBySrCnn 算法。

根源检测

此更新还添加了根源检测,这是一个可以识别哪些输入可能导致异常的特性。例如,说您有西雅图的住房数据,其中一个房源在8月6日显示异常高的价格。使用根源检测,您可能会发现邻域和物业类型是导致异常高价格的因素。1.5.1 更新还增加了定义根源分析阈值的能力,该阈值可能会影响选择哪些要素作为根本原因。

下面的代码显示了如何实现根源检测和打印结果(完整的示例可在这里找到)。

// Create a new ML context for ML.NET operations
var mlContext = new MLContext();

// Create a root cause localization input instance
DateTime timestamp = GetTimestamp();

var data = new RootCauseLocalizationInput(timestamp, GetAnomalyDimension(), new List(){ new MetricSlice(timestamp, GetPoints())
}, AggregateType.Sum, AGG_SYMBOL);

// Get the root cause localization result
RootCause prediction = mlContext.AnomalyDetection.LocalizeRootCause(data);

// Print the localization result
int count = 0;
foreach (RootCauseItem item in prediction.Items)
{
    count++;
    Console.WriteLine($"Root cause item #{count} ...");
    Console.WriteLine($"Score: {item.Score}, Path: {String.Join(" ",item.Path)}, Direction: {item.Direction}, Dimension:{String.Join(" ", item.Dimension)}");
}

//Item #1 ...
//Score: 0.26670448876705927, Path: DataCenter, Direction: Up, Dimension:[Country, UK] [DeviceType, ##SUM##] [DataCenter, DC1]

时间序列季节性和去季节性

1.5.1 更新还增加了处理时间序列数据的新功能,包括季节性检测和在异常检测之前对季节性数据进行非季节性化的能力。例如您有过去 5 年的销售数据,您注意到在有假日的月份销售额总是会上升。通常这种销售额的高峰将算作异常,但现在您可以使用 ML.NET 的季节性检测功能,用于识别这种月度发生,并在异常检测分析之前根据季节性情况对数据进行规范化,以便它不会显示为异常。

用于排名场景的自动ML

虽然 ML.NET 支持排名场景有一段时间,但现在也增加了本地 AutoML 支持。这意味着您不必担心选择算法或手动调整算法设置,相反您只需选择排名场景并输入数据,AutoML 将根据您的输入为您提供最佳模型。目前您可以使用 Auto ML.NET API 进行排名实验,不久将会把 AutoML Ranking 添加到 ML.NET CLI。

下面的代码显示了如何使用 Auto ML.NET API 创建排名实验并打印结果(完整的示例可在这里找到)。

MLContext mlContext = new MLContext();

// Load data
IDataView trainDataView = mlContext.Data.LoadFromTextFile(TrainDataPath, hasHeader: true, separatorChar: ',');

// Run AutoML Ranking experiment
ExperimentResult experimentResult = mlContext.Auto()
    .CreateRankingExperiment(new RankingExperimentSettings(){
        MaxExperimentTimeInSeconds = ExperimentTime })
    .Execute(trainDataView, testDataView, new ColumnInformation(){ LabelColumnName = LabelColumnName, GroupIdColumnName = GroupColumnName });

// Print metric from best model
RunDetail bestRun = experimentResult.BestRun;

Console.WriteLine($"Total models produced: {experimentResult.RunDetails.Count()}");
Console.WriteLine($"Best model's trainer: {bestRun.TrainerName}");
Console.WriteLine($"Metrics of best model from validation data --");
PrintMetrics(bestRun.ValidationMetrics);

文本加载器的更新

1.5 更新还改进了文本加载器体验,其中包括添加以下功能:

  • 使文本加载器能够接受引用字段中的新行。
  • 支持逃生图表。
  • 将公共通用方法添加到接受 Options 对象的 TextLoader 目录中。
  • 文本加载器中的十进制标记选项。

您可以在ML.NET 1.5 和 1.5.1 发行说明中查看有关此版本的更多更新。

使用 ML.NET 模型生成器用于图像分类的本地 GPU 训练

现在您可以通过 Visual Studio 中的模型生成器利用本地 GPU 进行更快的图像分类训练。我们使用7.7万张图像的数据集测试了本地训练。将 CPU 与 GPU 进行比较,我们得到了以下结果:

 

 

 

打开模型生成器并选择图像分类场景,现在将看到本地 GPU 训练的第三个选项(除了本地 CPU 训练和 Azure 训练)。

选择本地 (GPU) 作为训练环境后,可以检查计算机是否与模型生成器 UI 中的 GPU 训练兼容。

 

 

 

兼容性要求包括:

  1. 在可视化ML.NET市场或VS 中的扩展管理器中安装模型生成器 GPU 支持扩展。
  2. 与 CUDA 兼容的 GPU。
  3. 安装 CUDA v10.0(确保获得 v10.0,而不是任何较新版本 - 不能安装多个版本的 CUDA)。
  4. 为CUDA 10.0 安装 cuDNN v7.6.4(不能安装多个版本的 cuDNN)。

目前,模型生成器可以检查您是否安装了与 CUDA 兼容的 GPU 和 GPU 扩展。但是它尚无法检查您是否具有 CUDA 和 cuDNN 的正确版本。我们正在努力在将来的版本中添加此兼容性检查。

没有与 CUDA 兼容的 GPU,但仍想要更快的训练?您可以在 Azure 中进行,例如通过在模型生成器中选择 Azure 训练环境以使用 Azure ML,或者使用 GPU 创建 Azure VM 并使用模型生成器的本地 GPU 选项进行训练。

您可以阅读有关如何在"文档"中设置 GPU ML.NET

模型生成器中的反馈按钮

现在,为使模型生成器打开 GitHub 问题变得更加容易。我们添加了"反馈"按钮,以便您开始提交 Bug 或从 Visual Studio 中的 UI 中建议功能。

选择"报告 Bug"或"建议功能"将在浏览器中打开 GitHub,并填写相应的模板。

 

 

 

入门和资源

开始学习ML.NET并了解有关 Microsoft 文档中ML.NET模型生成器。

posted on 2020-10-05 12:50  Bean.Hsiang  阅读(548)  评论(0编辑  收藏  举报