ML.NET 是面向.NET 開發人員的開源機器學習框架,可以幫助開發人員使用 C# 或 F# 創建自定義機器學習模型,從而將機器學習集成到 Web、移動、桌面、游戲和物聯網應用中。《跨平臺機器學習:ML.NET架構及應用編程》以ML.NET 為核心,介紹了架構及其基本知識,介紹了ML.NET 的八大機器學習應用場景:預測、分類、聚類、異常檢查、預測、推薦、圖像分類以及神經網絡。 《跨平臺機器學習:ML.NET架構及應用編程》適合數據工程師使用和參考。
通過對《跨平臺機器學習:ML.NET架構及應用編程》的學習,讀者可以在專家的指導下,運用跨平臺機器學習框架ML.NET來創建機器學習解決方案。
有了ML.NET,機器學習可以為所有.NET開發人員賦能,《跨平臺機器學習:ML.NET架構及應用編程》可以幫助讀者將ML.NET應用于實際的生產解決方案中。在對ML.NET進行基本概述之后,作者闡明了用于回歸、分類、排名、異常檢測等的微框架(ML任務)。對于每個ML任務,都提供了克服現實世界中常見挑戰的見解。同時,書中還著重介紹了神經網絡Keras,展示了一個完整的機器學習應用,以及如何在.NET中利用流行的Python 工具。
微軟最有價值專家MVP(16屆)在書中展示了以下主題:
l 構建更智能的機器學習解決方案,更貼近用戶的需求;
l 了解ML.NET如何實例化經典ML管道,并簡化情緒分析、欺詐檢測和價格預測等常見場景;
l 實施數據處理和培訓,生產基于機器學習的軟件解決方案;
l 從基本預測轉向更復雜的任務,包括分類、異常檢測、推薦和圖像分類;
l 執行二分類和多分類;使用聚類和無監督學習將數據組織成同質組;
l 發現異常值以檢測可疑行為、欺詐、故障設備或其他問題;
l 充分利用 ML.NET 強大、靈活的預測功能;
l 實現排名、推薦、協同過濾的相關功能;
l 使用 ML.NET 遷移學習快速構建圖像分類解決方案;
l 當標準算法和淺層學習不夠時轉向深度學習;
l 通過 Azure認知服務API購買神經網絡,或探索使用 Keras和TensorFlow 構建自己的神經網絡。
我們需要有人能夠對未來可能的新事物抱有夢想,想想為什么以前沒有。
約翰·肯尼迪,1963
今天,數據科學家持續受到熱捧。豐富的數據,觸手可及的云計算能力,這是機器學習最終的完美世界嗎?從表面看,似乎已經有了所有必要的食材來烹制應用人工智能(applied AI)。但是,我們實際上仍然缺乏一個明確有效的組合方法。
如同其他學科具有其目的一樣,數據科學的目的是證明某些事情是可能的。然而,數據科學本身并不生產解決方案,那是機器學習領域的另一個分支數據工程的目的。
各大企業正在熱招數據科學家,但好的數據科學團隊,其成果通常是可運行的模型,該模型的軟件質量往往只是一個原型,而非可投入生產的工件。算法與數據緊密結合,且數據必須是完整、干凈和平衡的。這部分工作誰來負責卻往往并不明確。如此說來,這樣的工作最多也只能算是半成品。然而,對于其業務會產生大量數據的大型組織(如能源公共事業、金融機構和制造業),組建一個與應用AI流水線。生產部分脫鉤的數據科學團隊。預算明顯有限的小公司,則以服務方式采購一些應用數據科學的工作成果,這樣可能更經濟實惠。
從數據科學到生產,通常有一段很長的路要走,也有很多數據方面的工作要做,需要考慮下面幾點:
數據如何存儲?每天還是每小時?
數據是否要以某種中間格式的方式臨時復制?
要想讓模型工作的話,需要進行哪些轉換?如何實現自動化?
一旦部署到生產環境,該模型的性能如何?
預計要以什么頻率重新訓練模型以適應實時數據(live data)的需求?
如果重新訓練很頻繁,又應該如何自動化任何相關任務?
收集最新數據集、運行訓練并部署最新模型又該如何進行?
在機器學習模型方面,最大的問題可以追溯到所采用的數據。2021年7月,《麻省理工技術評論》發表了一篇文章,論述了人工智能在新冠疫情下所產生的影響。這篇文章的要點在于,在對適度開發的模型進行大規模審查時,從中發現的許多問題都與研究人員用來開發其工具的數據質量差有關。這樣,幾乎所有工具幾乎都失去了其有效的用途。于是人們開始更好地理解數據工程和數據質量的作用。通過CSV稀疏文件來處理數據對探查某個想法來說是足夠的,但要想建立一個健壯的基礎結構,還是需要換用別的數據庫(關系型、NoSQL或圖)和某些嚴肅的查詢語言。而如果需要這樣做,就很有可能需要超越Python,進入經典編程語言的領域。也就是說,僅僅掌握數據科學還不夠,還必須掌握嚴肅的編程和數據庫技術。另一方面,從數據中尋找和特定業務相關的見解,正是我們最終的目的。
目前,常規意義上的AI(更具體地說就是機器學習)只是垂直問題的商品和直接解決方案之間的一種權衡。商業化的云服務提供安全、穩定和可接受的質量。雖然并不能涵蓋所有可能的情況,但它們正在擴展,而且在不久的將來還有更多的擴展。
所有這一切都營造了一個環境,使我們能夠構建同樣的舊軟件,卻可以使用更強大的工具。我們不只是在談論編程語言的基元和由框架提供的一些類。我們還在談論由機器學習算法和商業化的云服務支持的智能和預測性工具。
在這個背景下,ML.NET完美充當了數據工程和商業化數據科學之間的橋梁,它和.NET Framework完全集成。ML.NET有用于淺層學習的內置算法、對Azure云服務的便利訪問以及與預訓練模型(如Keras或TensorFlow網絡)的
整合。
本書面向的讀者
在我們看來,如果您已經在用.NET,那么ML.NET就是做機器學習的完美工具,無論選擇的算法和模型的內部機制是什么。
本書針對的是愿意(或需要)進入機器學習世界的.NET開發人員。如果是軟件開發人員,想把數據科學和機器學習技能添加到自己的技能庫中,那么本書就是理想的選擇。如果是數據科學家,愿意學習更多Python以外的軟件知識,那么本書也是一個理想的選擇。
本書不面向的讀者
本書從ML.NET的角度討論機器學習。ML.NET是一個特定于平臺的庫。它主要是為數據工程師和機器學習工程師(而不是普通的數據科學家)量身定制的。這里澄清一下,機器學習工程師的核心職責是將外部訓練好的模型實際融入到客戶應用程序中執行更精細的任務,并對建立和訓練基于數據科學規范的模型的過程進行監督。本書討論如何選擇具體的工具。
如果對機器學習解決方案的實際生產沒有多大興趣,這本書可能不是最理想的參考。它并不會展示前沿的數據科學技術,不過會教你如何開始利用ML.NET團隊多年來一直在做的事情在.NET中整合簡單而有效的機器學習解決方案。
本書的組織方式
本書分為三部分。
第1章~第3章對ML.NET庫進行基礎性的概述。
第4章~第10章概述如何對常見問題進行數據處理、訓練和評估等專門任務。這些問題包括回歸、分類、排名和異常檢測等。
第11章~第13章專門討論所有淺層學習任務都不合適的場景下可能需要用到的神經網絡。此外還要概述神經網絡,提供一個同時使用商業化Azure認知服務和手工打造的定制Keras網絡的護照識別的例子。
最后,附錄要討論模型的可解釋性。
系統需求
要想完成本書的練習,需要準備好以下軟硬件:
一臺運行Windows 10/11,Linux或macOS的計算機
任意版本的Visual Studio 2019/2021或者Visual Studio Code
接入互聯網,以便下載軟件和本書示例文件
代碼示例
書中所有代碼(包括可能的勘誤和補充內容)都可以通過以下網址獲得:
https://MicrosoftPressStore.com/ProgrammingMLNET/downloads
作者簡介
迪諾·埃斯波西托(Dino Esposito)
Crionet首席架構師兼聯合創始人,為專業體育機構提供創新軟件和服務。16屆微軟最有價值專家,出版著作超過20部。
弗朗西斯科·埃斯波西托(Francesco Esposito)
數學高手,精通高等數學與數據科學,《機器學習導論》合著者。目前服務于Crionet,擔任工程與數學總監。連續創業者,先后創辦了Youbiquitous和KBMS Data Force。
第1章人工智能軟件 001
第2章 透視ML.NET架構 011
第3章 ML.NET基礎 033
第4章 預測任務 055
第5章 分類任務 091
第6章 聚類任務 125
第7章 異常檢查任務 149
第8章 預測任務 177
第9章 推薦任務 199
第10章 圖像分類任務 219
第11章 神經網絡概述 237
第12章 用于識別護照的神經網絡 255
附錄 模型的可解釋性 271
詳細目錄
第1章 人工智能軟件 001
1.1 軟件的源起 002
1.1.1 計算機的形式化 002
1.1.2 計算機工程設計 003
1.1.3 人工智能的誕生 004
1.1.4 作為副作用的軟件 004
1.2 軟件在今天的作用 005
1.2.1 自動化任務 006
1.2.2 反映現實世界 007
1.2.3 賦能用戶 008
1.3 人工智能如同軟件 008
第2章 透視ML.NET架構 011
2.1 Python與機器學習 012
2.1.1 Python為什么在機器學習中如此受歡迎 012
2.1.2 Python機器學習庫的分類 013
2.1.3 Python模型頂部的端到端方案 016
2.2 ML.NET概述 017
2.2.1 ML.NET中的學習管道 018
2.2.2 模型訓練執行摘要 024
2.3 使用訓練好的模型 028
2.3.1 使模型可從外部調用 029
2.3.2 其他部署場景 030
2.3.3 從數據科學到編程 030
2.4 小結 031
第3章 ML.NET基礎 033
3.1 通往數據工程 033
3.1.1 數據科學家的角色 034
3.1.2 數據工程師的角色 035
3.1.3 機器學習工程師的角色 036
3.2 從什么數據開始 037
3.2.1 理解可用的數據 037
3.2.2 構建數據處理管道 040
3.3 訓練步驟 043
3.3.1 選擇算法 044
3.3.2 衡量算法的實際價值 045
3.3.3 計劃測試階段 046
3.3.4 關于指標 047
3.4 在客戶端應用程序中使用模型 048
3.4.1 獲取模型文件 049
3.4.2 完整項目 049
3.4.3 預測打車費用 050
3.4.4 可伸縮性的考慮 052
3.4.5 設計恰當的用戶界面 053
3.5 小結 054
第4章 預測任務 055
4.1 管道和評估器鏈 056
4.1.1 數據視圖 056
4.1.2 轉換器 057
4.1.3 估算器 058
4.1.4 管道 059
4.2 回歸ML任務 059
4.2.1 ML任務的常規方面 060
4.2.2 支持的回歸算法 060
4.2.3 支持的校驗技術 063
4.3 使用回歸任務 066
4.3.1 可用的訓練數據 066
4.3.2 特征工程 071
4.3.3 訪問數據庫內容 074
4.3.4 合成訓練管道 077
4.4 機器學習深入思考 087
4.4.1 簡單線性回歸 087
4.4.2 非線性回歸 088
4.5 小結 089
第5章 分類任務 091
5.1 二分類機器學習任務 091
5.1.1 支持的算法 092
5.1.2 支持的驗證技術 094
5.2 情感分析的二分類 094
5.2.1 了解可用的訓練數據 094
5.2.2 特征工程 098
5.2.3 合成訓練管道 101
5.3 多分類ML任務 106
5.4 使用多分類任務 110
5.4.1 了解可用的數據 110
5.4.2 合成訓練管道 113
5.5 機器學習深入思考 121
5.5.1 分類的多面性 121
5.5.2 情感分析的另一個視角 122
5.6 小結 123
第6章 聚類任務 125
6.1 聚類ML任務 125
6.1.1 無監督學習 126
6.1.2 了解可用的訓練數據 126
6.1.3 特征工程 131
6.1.4 聚類算法 132
6.1.5 合成訓練管道 137
6.1.6 設置客戶端應用程序 139
6.2 機器學習深入思考 143
6.2.1 第一步始終是聚類分析 144
6.2.2 數據集的無監督縮減 145
6.3 小結 147
第7章 異常檢查任務 149
7.1 什么是異常 149
7.2 檢查異常情況的常規方法 150
7.2.1 時間序列數據 150
7.2.2 統計技術 153
7.2.3 機器學習方法 154
7.3 異常檢查ML任務 157
7.3.1 了解可用的訓練數據 157
7.3.2 合并訓練管道 160
7.3.3 設置客戶端應用程序 167
7.4 機器學習深入思考 171
7.4.1 預測性維護 172
7.4.2 金融詐騙 174
7.5 小結 175
第8章 預測任務 177
8.1 預測未來 177
8.1.1 簡單預測方法 178
8.1.2 預測的數學基礎 178
8.1.3 常見的分解算法 180
8.1.4 SSA算法 181
8.2 預測ML任務 183
8.2.1 了解可用的數據 183
8.2.2 合成訓練管道 185
8.2.3 設置客戶端應用程序 190
8.3 機器學習深入思考 193
8.3.1 不是公園里的隨機漫步 194
8.3.2 時間序列的其他方法 194
8.3.3 電力生產預測 195
8.4 小結 198
第9章 推薦任務 199
9.1 深入信息檢索系統 200
9.1.1 排名的基本藝術 201
9.1.2 推薦的靈活藝術 201
9.1.3 協同過濾的精妙藝術 203
9.2 ML推薦任務 204
9.2.1 了解可用的數據 204
9.2.2 合成訓練管道 208
9.2.3 設置客戶端應用程序 212
9.3 機器學習深入思考 215
9.3.1 如果喜歡奈飛 215
9.3.2 如果你不喜歡奈飛 216
9.4 小結 217
第10章 圖像分類任務 219
10.1 遷移學習 220
10.1.1 流行的圖像處理神經網絡 220
10.1.2 其他圖像神經網絡 220
10.2 通過合成進行遷移學習 221
10.2.1 ML.NET中的遷移學習模式 221
10.2.2 新的圖像分類器的總體目標 222
10.2.3 了解可用的數據 223
10.2.4 合成訓練管道 226
10.2.5 設置客戶端應用程序 228
10.3 ML圖像分類任務 230
10.3.1 圖像分類API 231
10.3.2 使用圖像分類API 232
10.4 機器學習深入思考 233
10.4.1 人腦的魔法 233
10.4.2 人工打造的神經網絡 234
10.4.3 重新訓練 235
10.5 小結 235
第11章 神經網絡概述 237
11.1 前饋神經網絡 237
11.1.1 人工神經元 238
11.1.2 網絡的層級 240
11.1.3 Logistic神經元 241
11.1.4 訓練神經網絡 243
11.2 更復雜的神經網絡 246
11.2.1 有狀態神經網絡 246
11.2.2 卷積神經網絡 249
11.2.3 自動編碼器 252
11.3 小結 253
第12章 用于識別護照的神經網絡 255
12.1 使用Azure認知服務 255
12.1.1 問題的剖析和解決方案 256
12.1.2 與ID表單識別器協同工作 257
12.2 自己動手打造神經網絡 261
12.2.1 神經網絡的拓撲 262
12.2.2 訓練時的麻煩 267
12.3 機器學習深入思考 268
12.3.1 商品和垂直解決方案 269
12.3.2 什么時候只能使用定制解決方案 269
12.4 小結 270
附錄 模型的可解釋性 271