ML.NET相關資源整理

2022-07-29 09:00:23

  在人工智慧領域,無論是機器學習,還是深度學習等,Python程式語言都是絕對的主流,儘管底層都是C++實現的,似乎人工智慧和C#/F#程式語言沒什麼關係。在人工智慧的工程實現,通常都是將Python訓練好的人工智慧模型封裝為REST API,以供其它的系統呼叫。雖然C#也確實天生就不合適搞人工智慧的訓練等,但是通過ML.NET這個開放原始碼的跨平臺機器學習框架,可以很容易的將人工智慧整合到Web、移動、桌面、遊戲和物聯網應用中。這篇文章主要總結ML.NET的相關學習資源。

一.ML.NET模型生成器和CLI

  什麼是機器學習呢?它的本質就是發現資料中的模式,模式以模型為載體,從而預測新的資料。通常會經過模型的選擇,資料的清洗,資料的載入,模型訓練,模型評估,模型測試,模型部署等幾個階段。但是,根據實際情況選擇合適的模型,以及對資料的清洗都很是需要經驗的。
1.ML.NET模型生成器
  模型生成器(Model Builder)算是一個低程式碼的機器學習平臺,可以通過圖形介面實現資料載入、模型訓練、模型評估和模型部署等功能,並且還支援強大的AutoML,從而可以獲得最適合解決方案的模型。相當於是極大的降低了人工智慧模型的訓練門檻。

2.ML.NET CLI
  除了模型生成器外,還提供了ML.NET CLI這個.NET Core工具。可為其指定一個機器學習任務和一個訓練資料集,而它將生成一個ML.NET模型以及要執行的C#程式碼,以便在應用程式中使用該模型。

二.ML.NET中的機器學習任務

1.二元分類任務
二元分類是有監督學習,顧名思義就是有2個類別的分類任務。訓練器如下:

AveragedPerceptronTrainer
SdcaLogisticRegressionBinaryTrainer
SdcaNonCalibratedBinaryTrainer
SymbolicSgdLogisticRegressionBinaryTrainer
LbfgsLogisticRegressionBinaryTrainer
LightGbmBinaryTrainer
FastTreeBinaryTrainer
FastForestBinaryTrainer
GamBinaryTrainer
FieldAwareFactorizationMachineTrainer
PriorTrainer
LinearSvmTrainer

2.多類分類任務
多類分類是有監督學習,顧名思義就是有多個類別的分類任務。訓練器如下:

LightGbmMulticlassTrainer
SdcaMaximumEntropyMulticlassTrainer
SdcaNonCalibratedMulticlassTrainer
LbfgsMaximumEntropyMulticlassTrainer
NaiveBayesMulticlassTrainer
OneVersusAllTrainer
PairwiseCouplingTrainer

3.迴歸測試任務
迴歸就是從一組相關特徵中預測標籤值。訓練器如下:

LbfgsPoissonRegressionTrainer
LightGbmRegressionTrainer
SdcaRegressionTrainer
OlsTrainer
OnlineGradientDescentTrainer
FastTreeRegressionTrainer
FastTreeTweedieTrainer
FastForestRegressionTrainer
GamRegressionTrainer

4.聚類分析任務
聚類分析是無監督學習,簡單理解就是從沒有標籤的資料中心,發現資料的模式種類。訓練器如下:

KMeansTrainer

5.異常檢測任務
異常檢測就是對罕見事件的預測,比如地震預測等。訓練器如下:

RandomizedPcaTrainer

6.排序任務
排序就是對資料記錄進行排名,比如看到的搜尋引擎中的搜尋條目。訓練器如下:

LightGbmRankingTrainer
FastTreeRankingTrainer

7.推薦任務
就是推薦演演算法,比如推薦User、Item和Tag等,在電商、社交、短視訊中等都有廣泛的應用。訓練器如下:

MatrixFactorizationTrainer

8.預測任務
使用過去的時序資料來預測將來的行為。比如,天氣預測、季節性銷售預測和預測維護等。訓練器如下:

ForecastBySsa

9.影象分類任務
影象分類是有監督學習,就是從有標記的影象中訓練模型,然後預測影象的類別。訓練器如下:

ImageClassificationTrainer

10.物體檢測任務
就是圖片物件的檢測,比如車牌、行人、紅綠燈等。不過目前物件檢測模型訓練僅適用於使用Azure機器學習的Model Builder。

三.ML.NET API v1.7.0[1]

1.Microsoft.Extensions.MLNamespace
解析:用於擴充套件ML.NET API的實用工具,包括預測引擎池。

2.Microsoft.MLNamespace
解析:ML.NET的主名稱空間。包含應用程式和操作上下文、轉換器和訓練器目錄以及用於資料檢視處理的元件。

3.Microsoft.ML.CalibratorsNamespace
解析:包含用於二元分類校準的元件的名稱空間。

4.Microsoft.ML.DataNamespace
解析:包含資料載入和儲存、資料架構定義和模型訓練指標元件的名稱空間。

5.Microsoft.ML.RuntimeNamespace
解析:包含ML.NET執行時所需的型別的名稱空間。

6.Microsoft.ML.TimeSeriesNamespace
解析:包含時間序列相關模型的名稱空間。

7.Microsoft.ML.TrainersNamespace
解析:包含訓練程式、模型引數和實用工具的名稱空間。

8.Microsoft.ML.Trainers.FastTreeNamespace
解析:包含快速樹演演算法的訓練程式、模型引數和實用工具的名稱空間。

9.Microsoft.ML.Trainers.LightGbmNamespace
解析:包含LightGBM演演算法的訓練程式、模型引數和實用工具的名稱空間。

10.Microsoft.ML.TransformsNamespace
解析:包含資料轉換元件的名稱空間。

11.Microsoft.ML.Transforms.ImageNamespace
解析:包含影象載入和轉換元件的名稱空間。

12.Microsoft.ML.Transforms.OnnxNamespace
解析:包含ONNX模型載入和轉換元件的名稱空間。

13.Microsoft.ML.Transforms.TextNamespace
解析:包含文字資料轉換元件的名稱空間。

14.Microsoft.ML.Transforms.TimeSeriesNamespace
解析:包含時序資料轉換元件的名稱空間。

15.Microsoft.ML.VisionNamespace
解析:包含影象分類元件的名稱空間。

四.ML.NET官方例子

1.情緒分析
解析:演示如何使用ML.NET應用二元分類任務。

2.GitHub問題分類
解析:演示如何使用ML.NET應用多類分類任務。

3.價格預測器
解析:演示如何使用ML.NET應用迴歸任務。

4.Iris聚類分析
解析:演示如何使用ML.NET應用聚類分析任務。

5.推薦
解析:根據以前的使用者評級生成影片推薦

6.影象分類
解析:展示瞭如何將現有TensorFlow模型重新訓練為使用ML.NET建立自定義影象分類器。

7.異常檢測
解析:演示如何構建針對產品銷售資料分析的異常檢測應用程式。

8.檢測影象中的物件
解析:演示如何使用預先訓練的ONNX模型檢測影象中的物件。

9.對電影評論的情緒分類
解析:瞭解載入預訓練的TensorFlow模型,對電影評論的情緒分類。

五.F#程式語言

  最後再提下F#程式語言,C#語言就不用說了,F#是C#的同門師兄弟了,並且極其擅長演演算法和並行程式設計,關鍵是可以無縫存取所有的第三方.NET庫和工具。不過遺憾的是,可能F#太高階了,在我的周圍沒有見過一個人使用,但是並不能否定F#是一門優秀的程式語言。
  在ML.NET中,不僅可以使用C#程式語言,還可以使用F#程式語言,但是F#的語法還是比較複雜的,可參考的資料[11][12][13]也很少。網上就找到了一本中文的F#書籍《F#語言程式設計》[17],其它的基本都是英文的。如果感興趣可以下載,嘗試下F#程式語言,說不定會有新的驚喜。接下來計劃對ML.NET做一個系列的講解,但是更新不會太快。

參考文獻:
[1]ML.NET API參考:https://docs.microsoft.com/zh-cn/dotnet/api/
[2]ML.NET檔案:https://docs.microsoft.com/zh-cn/dotnet/machine-learning/
[3]ML.NET教學:https://docs.microsoft.com/zh-cn/dotnet/machine-learning/tutorials/
[4]dotnet/machinelearning-samples:https://github.com/dotnet/machinelearning-samples
[5]SciSharp STACK:https://github.com/SciSharp
[6]SciSharp/TensorFlow.NET:https://github.com/SciSharp/TensorFlow.NET
[7]Azure機器學習檔案:https://docs.microsoft.com/zh-cn/azure/machine-learning/
[8]Azure認知服務檔案:https://docs.microsoft.com/zh-cn/azure/cognitive-services/
[9].NET for Apache Spark檔案:https://docs.microsoft.com/zh-cn/dotnet/spark/
[10].NET檔案:https://docs.microsoft.com/zh-cn/dotnet/
[11]FsLab:https://fslab.org/tutorials.html
[12]F#檔案:https://docs.microsoft.com/zh-cn/dotnet/fsharp/
[13]F#軟體基金:https://fsharp.org/
[14]Q&A ML.NET:https://docs.microsoft.com/en-us/answers/topics/dotnet-mlnet.html
[15]Machine Learning at Microsoft with ML.NET:https://arxiv.org/pdf/1905.05715.pdf
[16]機器學習重要術語詞彙表:https://docs.microsoft.com/zh-cn/dotnet/machine-learning/resources/glossary
[17]《F#語言程式設計》:https://url39.ctfile.com/f/2501739-627693806-97f8da?p=2096 (存取密碼: 2096)