本篇文章簡要介紹 ML.NET 背景和麵向 .NET 開發的特色功能,以及典型的機器學習編碼示例,並分享自己整理的 ML.NET API 速查手冊。
ML.NET 簡介
ML.NET 是面向.NET開發人員的跨平臺機器學習框架,它具備在聯機或本地環境中將機器學習模型整合到 .NET 應用程式中的能力。
2002 年微軟啟動有一個研究專案命名為 TMSN,其意在“Test mining search and navigation”,後來它被改名為 TLC(The learning code)。ML.NET 正是派生自 TLC 庫,最初被用於微軟的內部產品。
ML.NET 的核心既可以通過指定演算法來訓練自定義機器學習模型,也可以匯入預訓練的 TensorFlow 和 ONNX 模型繼續訓練。生成模型後,可以將其新增到應用程式中進行預測。ML.NET 支援在使用 .NET Core/.NET Framework 的 Windows、Linux 和 macOS 上執行,所有平臺均支援 64 位,此外 Windows 平臺支援 32 位,但 TensorFlow、LightGBM 和 ONNX 相關功能除外。
ML.NET 整合了眾多主流的轉換器、演算法庫,通過 API 提供了豐富的資料處理物件和演算法評估器,並且對 Infer.NET、NimbusML、Scikit-Learn、TensorFlow 等機器學習相關的包提供了方便地擴充套件機制。如果您是一位 .NET 開發者,您將很輕鬆地上手使用,並且將成果無縫整合到 .NET Core 應用程式中,特別是 ASP.NET Core 的 Web 應用中實現一些高階的智慧服務。
邏輯迴歸模型示例
簡單示例訓練一個用於二分類的邏輯迴歸模型程式碼如下:
//Step 1. Create an ML Context
var ctx = new MLContext();
//Step 2. Read in the input data from a text file for model training
IDataView trainingData = ctx.Data
.LoadFromTextFile<ModelInput>(dataPath, hasHeader: true);
//Step 3. Build your data processing and training pipeline
var pipeline = ctx.Transforms.Text
.FeaturizeText("Features", nameof(SentimentIssue.Text))
.Append(ctx.BinaryClassification.Trainers
.LbfgsLogisticRegression("Label", "Features"));
//Step 4. Train your model
ITransformer trainedModel = pipeline.Fit(trainingData);
//Step 5. Make predictions using your trained model
var predictionEngine = ctx.Model
.CreatePredictionEngine<ModelInput, ModelOutput>(trainedModel);
var sampleStatement = new ModelInput() { Text = "This is a horrible movie" };
var prediction = predictionEngine.Predict(sampleStatement);
ML.NET 目前在 Github 上以開源專案(https://github.com/dotnet/mac...)進行持續更新迭代,最新的版本為1.6。
ML.NET 特色
ML.NET 支援的熱門機器學習任務覆蓋眾多,包括了傳統的分類、迴歸、聚類,也支援了有關時序和影像神經網路。目前已知的應用場景例如:情緒分析、產品推薦、價格預測、客戶分層、物件檢測、欺詐檢測、峰值檢測、影像分類、銷量預測等等。
ML.NET 對 .NET 開發者非常友好,它提供了 Visual Studio 擴充套件 Model Builder, 這是一個視覺化的工具套件,以非常低門檻的操作要求即可快速訓練出指定任務型別的機器學習模型,並且自動生成相關的原始碼,方便後續修改和維護。對於喜歡通過程式碼方式進行機器學習任務的夥伴,官方提供了豐富的文件(https://docs.microsoft.com/en...)和示例程式碼庫(https://github.com/dotnet/mac...)。
另外,ML.NET 針對 CLI 也提供了命令列工具,而且是支援 AutoML 的,使得常見的機器學習場景實現零編碼。
速查手冊
通過 AutoML 生成的程式碼一開始閱讀起來會有一點點不習慣,也不利於後續改造程式碼以適應開發者的實際需要。如果從來沒有接觸過機器學習的開發者,可能會擔心記不住、看不懂、用不慣 ML.NET API 文件中密密麻麻基於專業術語的物件和方法,鑑於收集到如是實際開發者反饋的障礙,作者將 ML.NET API 按經典的機器學習實現步驟,把常用的方法整理成一份圖冊,並新增了一些程式碼片段用來幫助快速理解 API 物件和方法的使用規則。另外,圖冊底部把截止目前 ML.NET 已內建支援的模型訓練器和資料轉換器列成表格方便掌握完整資訊。圖冊以高清向量格式的圖片分享出來,在編碼的時候放在習慣的地方,像開發其他 .NET 應用一樣可隨時檢視,一目瞭然。
速查手冊高清版本下載:https://beanhsiang.github.io/...