什麼是 ML.NET?
ML.NET 是個由 Microsoft 建立,適用於 .NET 開發人員平台的免費、開放原始碼及跨平台機器學習架構。
ML.NET
ML.NET 是 .NET 開發人員平台的免費、開放原始碼和跨平台機器學習架構。
ML.NET 可讓您使用 C# 或 F# 為各種 ML 案例訓練、組建及運送自訂機器學習模型。ML.NET 包括如自動化機器學習 (AutoML) 的功能以及如 ML.NET CLI 和 ML.NET Model Builder 等工具,讓機器學習與您應用程式的整合變得更容易。
ML.NET 逐步說明
ML.NET 對幾乎每個案例都遵循相同的基本步驟; 它結合了資料載入、轉換及模型定型,讓您可輕鬆建立機器學習模型。
建立 ML.NET 內容
MLCoNtext 是所有 ML.NET 作的起點。MLContext
用於建立及使用 ML.NET 模型的所有層面。它在概念上與 Entity Framework 中的 DbContext
類似。
var mlContext = new 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);
轉換資料
在多數情況下,您可用的資料不適合直接用來定型機器學習模型。未經處理資料需要透過資料轉換來預先處理。
[轉換器] 會取得資料,在其上執行一些工作,然後傳回新的已轉換資料。
內建有用於取代遺漏值、資料轉換、特徵化文字等的資料轉換集。
// 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.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: Build custom machine learning solutions and integrate them into your .NET applications.
- 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 在電腦上執行。