什麼是 ML.NET?

ML.NET 是個由 Microsoft 建立,適用於 .NET 開發人員平台的免費、開放原始碼及跨平台機器學習架構。

ML.NET

ML.NET 是 .NET 開發人員平台的免費、開放原始碼和跨平台機器學習架構。

ML.NET 可讓您使用 C# 或 F# 為各種 ML 案例訓練、組建及運送自訂機器學習模型。ML.NET 包括如自動化機器學習 (AutoML) 的功能以及如 ML.NET CLIML.NET Model Builder 等工具,讓機器學習與您應用程式的整合變得更容易。

ML.NET 逐步說明

ML.NET 對幾乎每個案例都遵循相同的基本步驟; 它結合了資料載入、轉換及模型定型,讓您可輕鬆建立機器學習模型。

建立 ML.NET 內容

MLCoNtext 是所有 ML.NET 作的起點。MLContext 用於建立及使用 ML.NET 模型的所有層面。它在概念上與 Entity Framework 中的 DbContext 類似。

var mlContext = new MLContext();

您有 MLContext 的執行個體後,即可載入及轉換資料、為機器學習工作選擇最佳演算法、訓練模型。一旦定型後,您即可測試模型的正確性、將其儲存至磁碟,並使用它來進行預測。MLContext 可以從先前儲存到磁碟的模型初始化。

探索 MLContext

載入資料

機器學習使用已知的資料 (例如,訓練資料) 來尋找模式,以便對新的未知資料進行預測。

機器學習的輸入稱爲 [功能],這是用來進行預測的屬性。機器學習的輸出則稱為 [標籤],這是實際預測。

ML.NET 中的資料表示為 IDataView,這是一種彈性且高效率描述表格式資料 (例如,資料列和資料行) 的方式。IDataView 物件可包含數字、文字、布林值、向量等等。您可以將檔案或即時串流來源中的資料載入 IDataView。

LoadFromTextFile 讓您可從 TXT、CSV、TSV 及其他檔案格式載入資料。

IDataView trainingData = mlContext.Data
    .LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);

LoadFromEnumerable 可讓您從記憶體內集合、JSON/XML、關聯式與非關聯式資料庫 (例如,SQL、CosmosDB、MongoDB) 及許多其他資料來源載入。

IDataView trainingData = mlContext.Data
    .LoadFromEnumerable<SentimentInput>(inMemoryCollection);

深入了解載入資料

轉換資料

在多數情況下,您可用的資料不適合直接用來定型機器學習模型。未經處理資料需要透過資料轉換來預先處理。

[轉換器] 會取得資料,在其上執行一些工作,然後傳回新的已轉換資料。

FeaturizeText 方法會接受一段文字,並將它轉換成可用於機器學習的一系列數字。

內建有用於取代遺漏值、資料轉換、特徵化文字等的資料轉換集。

// Convert sentiment text into numeric features
IEstimator<ITransformer> dataTransformPipeline = mlContext.Transforms.Text
    .FeaturizeText("Features", "SentimentText");

探索資料轉換

選擇演算法

使用機器學習和 ML.NET 時,您必須選擇符合您的案例的機器學習工作。ML.NET 可為各種 ML 工作提供超過 30 種演算法 (或定型器):

ML 工作 演算法
二元分類 (例如情感分析) AveragedPerceptronTrainer, SdcaLogisticRegressionBinaryTrainer
多類別分類 (例如主題分類) LightGbmMulticlassTrainer、OneVersusAllTrainer
迴歸 (例如價格預測) LbfgsPoissonRegressionTrainer, FastTreeRegressionTrainer
叢集 (例如,客戶分割) KMeansTrainer
異常偵測 (例如,洗髮精銷售量尖峰偵測) RandomizedPcaTrainer
建議 (例如,電影推薦程式) MatrixFactorizationTrainer
排名 (例如,搜尋結果) LightGbmRankingTrainer, FastTreeRankingTrainer
IEstimator<ITransformer> trainer = mlContext.BinaryClassification.Trainers
    .AveragedPerceptron(labelColumnName: "Sentiment", featureColumnName: "Features"));

IEstimator<ITransformer> trainingPipeline = dataTransformPipeline.Append(trainer);

探索演算法

定型模型

您必須呼叫 Fit() 方法 (因為 ML.NET 的延遲載入方法),才能執行您指定的資料轉換和演算法。這是模型訓練發生的時候。

估算器會取得資料、從資料學習,以及建立轉換器。在模型定型的情況下,定型資料是輸入,而定型模型是輸出; 因此,定型的模型是轉換器,將輸入功能從新資料轉換成輸出預測。

ITransformer model = pipeline.Fit(trainingData);

深入了解模型定型

評估模型

ML.NET 提供評估您模型各種計量之效能的評估工具:

  • 正確性
  • 曲線下的面積 (AUC)
  • R 平方
  • 均方根誤差 (RMSE)
// Make predictions on test data
IDataView predictions = model.Transform(testDataView);

// Evaluate model and return metrics
var metrics = mlContext.BinaryClassification
    .Evaluate(predictions, labelColumnName: "Sentiment");

// Print out accuracy metric
Console.WriteLine("Accuracy" + metrics.Accuracy);

探索評估計量

部署與取用模型

您可以將定型的模型儲存為二進位檔案,然後再整合到您的 .NET 應用程式中。

mlContext.Model.Save(model, trainingData, "model.zip");

儲存已訓練的模型之後,即可在其他 .NET 應用程式中載入模型。

MLContext mlContext = new MLContext();
DataViewSchema predictionPipelineSchema;
ITransformer trainedModel = mlContext.Model.Load("model.zip", out predictionPipelineSchema);

接著,您可以使用載入的模型開始進行預測。您可以使用 [預測引擎],這是用於進行單一預測的便利 API,或是使用用於進行批次預測的 [轉換] 方法。

var predEngine = mlContext.Model.CreatePredictionEngine(model);
SentimentInput sampleComment = new SentimentInput{ SentimentText = "This is very rude!" };
SentimentOutput result = predEngine.Predict(sampleComment);
Console.WriteLine(result.Prediction);

了解如何使用經過定型的 ML 模型

ML.NET 常見問題集

ML.NET 的用途是什麼?

ML.NET 是適用於 .NET 開發人員的機器學習架構; 您可以使用 ML.NET 將自訂機器學習模型整合到您的 .NET 應用程式中。您可以將 ML.NET 用於多種案例,例如情感分析、價格預測、產品建議、銷售預測、影像分類、物件偵測等等! 請查看我們的 GitHub 範例存放庫,以了解更多可運用 ML.NET 的範例。

AI 與機器學習有何不同?

AI 是計算的分支,其涉及訓練電腦執行通常需要人類智慧的作業。機器學習是 AI 的子集,其涉及電腦從資料中學習及尋找模式,以便自行對新資料進行預測。

為什麼需要 ML.NET,以及 ML.NET 與 Microsoft 其他 AI/ML 供應項目的的不同?

Microsoft 提供許多 AI 和 ML 產品和服務,因此以下是它們之間的差異明細:

  • ML.NET: 組建自訂機器學習方案,並將它們整合到您的 .NET 應用程式中。
  • Azure 認知服務: 提供可新增至您應用程式之預建 AI 和機器學習模型的雲端服務。包含可使用多種模式的一組 API,以進行具有視覺和語音的自然通訊方式。
  • Azure Machine Learning: 雲端中的綜合性環境,以裝載您的端對端 ML 模型生命週期,包括模型訓練、版本控制、部署及在雲端規模的版本管理。

可以將 ML.NET 模型部署到哪些類型的應用程式?

您可以使用 ML.NET 與幾乎所有 .NET 應用程式,包括 Web 應用程式和服務、微服務/容器、桌面應用程式 (WPF 及 WinForms) 、Azure Functions 以及任何 Azure 伺服器端應用程式類型及主控台應用程式。

我可以透過 ML.NET 使用哪些架構?

.NET、.NET Core (版本 2.0 及更新版本) 及 .NET Framework (版本 4.6.1 及更新版本) 都支援 ML.NET。

ML.NET 支援哪些流程結構?

目前在 x64 和 x86 程序上支援 ML.NET。

我可以在哪些作業系統使用 ML.NET?

ML.NET 跨平台,因此在 Windows、Linux 和 macOS 上都支援。

ML.NET 是否免費?

是的! 與 .NET 平台的其餘部分一樣,ML.NET 完全免費。如需詳細資訊,請參閱 .NET 無需任何費用。ML.NET 採用 MIT 授權

ML.NET 的最佳程式設計語言為何?

ML.NET 目前同時支援 C# 以及 F#

可如何了解 ML.NET?

您可以開始使用此教學課程,也可以查看我們的 ML.NET 文件,以深入了解。

如何安裝 ML.NET?

透過新增 Microsoft.ML NuGet 套件,您可以新增 ML.NET 至任何 .NET 專案,或開始使用 ML.NET Model Builder (Windows) 或 ML.NET CLI (Windows、macOS 及 Linux)。

準備開始了嗎?

我們的逐步教學課程可協助您讓 ML.NET 在電腦上執行。

開始使用