打算使用幾篇文章介紹一下.NET下的機器學習框架ML.NET的具體應用,包括一些常用的業務場景、演演算法的選擇、模型的訓練以及RESTful API的建立、機器學習服務容器化,以及基於Azure DevOps的容器化部署等等相關的內容。如果你從來沒有玩過機器學習,也從來沒有瞭解過ML.NET,那麼,本文將會是一個很好的開始。
機器學習是一種對演演算法和統計資料模型進行科學學習的方式,透過使用這種方式,計算機系統能夠有效地基於樣式與推斷,而非遵循特定的指令序列來完成一項特定的任務。機器學習是人工智慧科學的一個分支,屬於人工智慧範疇。 (參考:https://en.wikipedia.org/wiki/Machine_learning)。
分類
機器學習可以分為如下幾類:
-
監督學習(Supervised Learning)
-
無監督學習(Unsupervised Learning)
-
半監督學習(Semi-supervised Learning)
-
增強學習(Reinforcement Learning)
監督學習
從給定的訓練資料集中學習出一種演演算法,當的資料到來時,可以根據這個函式預測結果。監督學習的訓練集要求是包括輸入和輸出,也可以說是特徵和標的。訓練集中的標的是由人標註的。常見演演算法分為:統計分類(Classification,根據訓練模型,透過給定的特徵屬性,預測標的屬性屬於哪個分類)和回歸分析(Regression,根據訓練模型,透過給定的特徵屬性,預測標的屬性的取值)。
無監督學習
與監督學習相比,訓練集沒有人為標註的結果(沒有人會對訓練資料集中的某個屬性進行標註,標註其為哪個分類,或者取值是多少)。常見演演算法有聚類(Clustering)、無監督異常情況檢測(Unsupervised Anomaly Detection)等。
半監督學習
介於監督學習與無監督學習之間,根據部分已被標記的資料來推斷未標註資料的標註資訊,並實現預測。
增強學習
機器為了達成標的,隨著環境的變動,而逐步調整其行為,並評估每一個行動之後所到的回饋是正向的或負向的。常見的棋局預測就屬於這一類。
機器學習演演算法評估標準
在選擇了機器學習演演算法之後,就可以基於訓練資料集,對機器學習模型進行訓練,在訓練結束後,可以透過一些衡量標準來尋求最優的機器學習演演算法。通常,我們會使用另一部分已知結果的資料作為測試樣本資料集,基於已訓練好的模型進行測試預測,然後比對真實值與預測值以對演演算法進行評估。機器學習演演算法的評估標準常見的有以下幾種(參考:https://machinelearningmastery.com/metrics-evaluate-machine-learning-algorithms-python/):
統計分類(Classification)演演算法衡量標準
-
Classification Accuracy
-
Logarithmic Loss
-
Area Under ROC Curve
-
Confusion Matrix
-
Classification Report
回歸分析(Regression)演演算法衡量標準
-
Mean Absolute Error
-
Mean Squared Error
-
R^2 (R-Squared)
ML.NET是微軟推出的一款基於.NET/.NET Core的機器學習框架,透過使用ML.NET,開發者可以使用.NET相關語言和開發工具進行機器學習任務的開發、測試、部署和執行。例如,根據不同的問題場景,開發者可以使用ML.NET並選擇相應的演演算法,基於已有的訓練資料集,對機器學習模型進行訓練,並將模型儲存成檔案或釋出到雲儲存以備後需;也可以使用ML.NET讀取已儲存的訓練模型,並基於給定的測試資料集進行預測,傳回預測結果。ML.NET支援自定義的機器學習演演算法,還能整合當下流行的機器學習平臺,比如Tensorflow,這使得.NET下機器學習的應用變得非常簡單方便。
從.NET Core 3.0開始,ML.NET將在.NET Core框架下得到原生的支援(參考Scott Hunter的《What’s Coming in .NET Core 3.0》一文),微軟官方的一些產品,例如Azure Machine Learning、Windows Defender以及PowerPoint的新功能:設計創意,都使用了ML.NET框架。有了ML.NET,可以在應用程式中快速、方便地整合一些機器學習的應用功能,比如:情感分析、猜你喜歡、資料預測、圖片分類等等。下圖展示了ML.NET與.NET Core 3.0之間的關係(圖片來源:https://devblogs.microsoft.com/dotnet/net-core-3-and-support-for-windows-desktop-applications/):
ML.NET支援的機器學習任務
目前,ML.NET支援以下幾種常見的機器學習任務(參考:https://docs.microsoft.com/zh-cn/dotnet/machine-learning/resources/tasks):
-
二元分類(Binary Classification):預測標的屬性的取值是“真”或“假”(0或1,Yes或No)
-
多類分類(Multiclassification):預測標的屬性的取值屬於哪一分類
-
回歸(Regression):預測標的屬性的結果值(一般是得到一個浮點數)
-
聚類分析(Clustering):根據資料集中資料的某種特性,將資料進行分組
-
異常情況檢測(Anomaly Detection):根據資料集的資料,識別出小部分的“特殊化”資料(異常資料)
-
排名(Ranking):排名任務從一組標記的示例構建排名程式。 該示例集由實體組組成,這些實體組可以使用給定的標準進行評分。 每個實體的排名標簽是 { 0, 1, 2, 3, 4 }。 排名程式定型為用每個實體的未知分數對新實體組進行排名
-
建議(Recommendation):支援生成推薦產品或服務的串列,例如,你為使用者提供歷史電影評級資料,並希望向他們推薦接下來可能觀看的其他電影
在使用ML.NET進行機器學習之前,需要首先確定自己的應用場景,然後根據應用場景選擇合適的機器學習演演算法並定製訓練管道(Training Pipeline)。比如:透過機器學習來判斷某種化合物對於細胞的作用是陰性的還是陽性的,這屬於二元分類的應用範疇;再比如,根據一批學生的個人情況以及他們的學習成績,來預測另一部分學生的學習成績,這屬於回歸任務的應用範疇。開發者需要根據應用場景來進行選擇。
ML.NET機器學習實踐步驟
通常情況下,使用ML.NET進行機器學習實踐,有以下這些步驟:
-
資料預處理與規整化 :對訓練資料集進行規整化處理,比如刪除一些特殊資料或者拋棄一些空值
-
確定問題型別(是分類、回歸還是聚合等) :確定我們需要拿著訓練資料集乾什麼?是對其中某些特性進行分類,還是用來預測未知值?
-
確定特徵屬性與標的屬性:透過使用Microsoft Power BI或者TIBCO Spotfire等分析工具,來確定哪些欄位屬於特性控制(Feature Control)欄位,哪些欄位屬於標的欄位
-
使用相應分類下的不同演演算法,基於訓練資料集進行模型訓練
-
根據演演算法衡量標準對模型進行評估,選擇合適演演算法:使用測試樣本資料集,對演演算法所產生的模型進行預測,然後比較預測結果與實際結果,從而達到評估演演算法的目的
-
基於最優演演算法生成併發布模型:將模型釋出成檔案,儲存以備後用
-
構建API:基於釋出的模型構建RESTful API,便於應用程式整合
-
部署API:將RESTful API部署到雲端,便於應用程式呼叫
本文簡要介紹了機器學習的基本知識,並對ML.NET機器學習框架進行了簡要介紹。文章最後描述了使用ML.NET進行機器學習的實踐步驟。後續文章會以一到兩個案例為基礎,詳細介紹這8個步驟的具體實踐。
原文地址: http://sunnycoding.cn/2019/04/06/mlnet-containerize-and-azure-devops-practices-part1/
朋友會在“發現-看一看”看到你“在看”的內容