ML.NET相關資源整理

  在人工智能領域,無論是機器學習,還是深度學習等,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參考://docs.microsoft.com/zh-cn/dotnet/api/
[2]ML.NET文檔://docs.microsoft.com/zh-cn/dotnet/machine-learning/
[3]ML.NET教程://docs.microsoft.com/zh-cn/dotnet/machine-learning/tutorials/
[4]dotnet/machinelearning-samples://github.com/dotnet/machinelearning-samples
[5]SciSharp STACK://github.com/SciSharp
[6]SciSharp/TensorFlow.NET://github.com/SciSharp/TensorFlow.NET
[7]Azure機器學習文檔://docs.microsoft.com/zh-cn/azure/machine-learning/
[8]Azure認知服務文檔://docs.microsoft.com/zh-cn/azure/cognitive-services/
[9].NET for Apache Spark文檔://docs.microsoft.com/zh-cn/dotnet/spark/
[10].NET文檔://docs.microsoft.com/zh-cn/dotnet/
[11]FsLab://fslab.org/tutorials.html
[12]F#文檔://docs.microsoft.com/zh-cn/dotnet/fsharp/
[13]F#軟件基金://fsharp.org/
[14]Q&A ML.NET://docs.microsoft.com/en-us/answers/topics/dotnet-mlnet.html
[15]Machine Learning at Microsoft with ML.NET://arxiv.org/pdf/1905.05715.pdf
[16]機器學習重要術語詞彙表://docs.microsoft.com/zh-cn/dotnet/machine-learning/resources/glossary
[17]《F#語言程序設計》://url39.ctfile.com/f/2501739-627693806-97f8da?p=2096 (訪問密碼: 2096)

Tags: