1. 程式人生 > 實用技巧 >ML.NET API 和工具八月更新

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 選項進行訓練。

您可以閱讀有關如何在"文件"中設定 GPUML.NET

模型生成器中的反饋按鈕

現在,為使模型生成器開啟 GitHub 問題變得更加容易。我們添加了"反饋"按鈕,以便您開始提交 Bug 或從 Visual Studio 中的 UI 中建議功能。

選擇"報告 Bug"或"建議功能"將在瀏覽器中開啟 GitHub,並填寫相應的模板。

入門和資源

開始學習ML.NET並瞭解有關 Microsoft 文件中ML.NET模型生成器。