本書是機器學習入門書籍,面向需要提升數(shù)據(jù)科學技能的開發(fā)人員和需要提升編程技能的數(shù)據(jù)科學家,涵蓋了從機器學習基礎(chǔ)概念到完整解決方案的各個方面。本書共分為五個部分,主要內(nèi)容包括人工智能基礎(chǔ)知識、實現(xiàn)機器學習解決方案的步驟、微軟的ML.NET庫、實用的機器學習算法、神經(jīng)網(wǎng)絡(luò)、AI云服務等,并且免費提供使用ML.NET庫構(gòu)建的代碼示例。
Preface
前 言
我們需要那些能夠夢想從未發(fā)生的事情,并追問自己為什么不能這樣的人。
約翰·F.肯尼迪在愛爾蘭議會的演講,1963年6月
人們對如今的人工智能持有兩種觀點,這兩種觀點都不是排他性的。一種觀點是絕大多數(shù)媒體宣揚和追求的觀點,而另一種觀點則是IT社區(qū)宣揚和追求的觀點。在這兩大陣營中,都有一些真正的專家和權(quán)威人士。
媒體宣揚的觀點關(guān)注的是,人工智能作為一個整體,無論是以已知還是未知的形式,可能對我們的未來生活產(chǎn)生的影響。IT社區(qū)(軟件和數(shù)據(jù)科學家所屬領(lǐng)域)提出的觀點認
為,機器學習是新一代軟件服務的基礎(chǔ),而新一代軟件服務只是比現(xiàn)有服務更智能。
在媒體觸及的大眾與小得多的IT社區(qū)之間的中間地帶是云服務團隊。他們每天進行研究,使技術(shù)水平向前邁進,發(fā)布新的服務,為新的和現(xiàn)有的應用程序添加智能。
位于人工智能金字塔底部的是經(jīng)理和高管。一方面,他們渴望把從科技新聞中聽到的那些令人驚嘆的服務應用到商業(yè)中,以超越競爭對手。另一方面,他們面臨著以最大的希望開始的項目的驚人賬單。
人工智能不是一根魔杖。
人工智能不是按使用次數(shù)付費的服務。不過,它既不是資本,也不是經(jīng)營支出。
人工智能只是一種軟件。
如果能從軟件開發(fā)的角度來考慮,包括設(shè)置需求,找到可靠的合作伙伴,制定預算然后開始工作,在充分考慮敏捷性的前提下重新開始等,那么任何關(guān)于人工智能的商業(yè)決策都會更好。
就那么簡單嗎?
雖然人工智能與軟件開發(fā)有關(guān),但它與建立電子商務網(wǎng)站或訂購平臺并不完全一樣。
如果你不清楚要解決的問題、問題的背景和要表達的觀點,就不要從事人工智能項目。
不要以最有力的競爭者為唯一榜樣來開始一個雄心勃勃的冒險項目。
如果你還沒準備好損失一大筆錢,那就不要開始這樣的項目。
每次只解決一個痛點,構(gòu)建一個跨職能團隊,并提供對數(shù)據(jù)的完全訪問。
誰應該讀本書
在準備本書的過程中,我們收到了很多關(guān)于章節(jié)內(nèi)容安排的反饋,也多次對此進行了詳細說明。我們至少對目錄進行了三次徹底修改。困難之處在于,我們設(shè)計本書是為了使其獨特且創(chuàng)新,追求的是一種與我們所看到的現(xiàn)實相去甚遠的機器學習和軟件開發(fā)的理念。希望我們的愿景也是將來機器學習的愿景!
受數(shù)據(jù)科學的限制,我們把機器學習看作交付給開發(fā)人員的組件,將其嵌入某些Web服務或桌面應用程序中。這是一個恰到好處的瀑布式結(jié)構(gòu)。公司和企業(yè)經(jīng)常談論的敏捷在哪里?敏捷機器學習意味著數(shù)據(jù)科學家和開發(fā)人員是在一起工作的,業(yè)務分析師和領(lǐng)域?qū)<乙矔尤雸F隊。同時為了方便數(shù)據(jù)的訪問和操作,數(shù)據(jù)利益相關(guān)者(無論是IT人員還是DevOps人員,或其他人員)也會加入團隊。這就是敏捷團隊恰到好處。
我們看到了從數(shù)據(jù)科學到軟件開發(fā)、從軟件開發(fā)到數(shù)據(jù)科學的技術(shù)融合的(商業(yè))需求。而這本入門書對這兩方面都有好處。在深入分析機器學習算法的機理之前,它與開發(fā)人員進行對話并展示ML.NET的實際運行情況(通過Python)。它還與需要了解更多軟件需求的數(shù)據(jù)科學家進行了對話。
如果你是一名軟件開發(fā)人員,想學習數(shù)據(jù)科學和機器學習技能,那么本書就是你的理想選擇。如果你是一名數(shù)據(jù)科學家,想學習更多關(guān)于軟件的知識,那么本書也是非常理想的選擇。不過,這兩類人員都需要更多地了解對方。
這是本書的理念。我們將其歸類為介紹性的,因為它拓展的是寬度而不是深度。它提供了.NET的例子,因為我們認為,盡管Python生態(tài)系統(tǒng)非常豐富和繁榮,但是沒有理由不去尋找允許你在更接近軟件應用程序、軟件服務和微服務的基本硬件的情況下進行機器學習的平臺,以便最終可以使用任意的學習管道(包括TensorFlow、PyTorch及Python代碼)。
誰不應該讀本書
這是一本入門級的書,清晰、準確地概述了使用ML.NET平臺進行實驗的機器學習技術(shù)。如果你正在尋找大量的Python示例,那么本書并不是理想選擇。如果你正在尋找如何在解決方案(無論是Python還是ML.NET)中復制和粘貼的示例,我們不確定本書是否理想選擇。如果你正在尋找算法背后的數(shù)學細節(jié),或者一些算法實現(xiàn)的注釋,同樣,本書也不是理想選擇(我們確實包括了一些數(shù)學知識,但只是皮毛)。
本書的章節(jié)安排
本書分為五個部分。第一部分簡要介紹人工智能、智能軟件的基礎(chǔ),以及任意機器學習項目在端到端解決方案中的基本步驟。第二部分重點介紹ML.NET庫,并概述其核心部分,比如回歸和分類等常見問題中的數(shù)據(jù)處理、訓練及評估等任務。第三部分涉及一系列算法的數(shù)學細節(jié),這些算法包括線性回歸、決策樹、集成方法、貝葉斯分類器、支持向量機、K-Means、在線梯度,它們通常被訓練用來解決現(xiàn)實生活中的問題。第四部分致力于研究神經(jīng)網(wǎng)絡(luò),當淺層算法都不適用時,神經(jīng)網(wǎng)絡(luò)可能會發(fā)揮作用。第五部分是關(guān)于人工智能(特別是機器學習)的商業(yè)愿景,簡單回顧了云平臺(特別是Azure平臺)提供的數(shù)據(jù)處理和計算的運行時服務。
代碼示例
本書中演示的所有代碼,包括可能的勘誤表和擴展,都可以在MicrosoftPressStore.com/IntroMachineLearning/downloads中找到。
勘誤表和圖書支持
我們已盡力確保本書及其配套內(nèi)容的準確性。你可以在MicrosoftPressStore.com/IntroMachineLearning/errata上提交勘誤表及其相關(guān)更正。如果你發(fā)現(xiàn)一個尚未列出的錯誤,請在同一頁面提交給我們。如需更多圖書支持,請訪問http://www.MicrosoftPressStore.com/Support。
請注意,對微軟軟件和硬件產(chǎn)品的支持不是通過前面的網(wǎng)址提供的。有關(guān)微軟軟件或硬件的幫助,請訪問http://support.microsoft.com。
CONTENTS
目 錄
譯者序
前言
致謝
作者簡介
第一部分 機器學習基礎(chǔ)
第1章 人類是如何學習的 2
1.1 邁向思考型機器 2
1.1.1 機器推理的曙光 3
1.1.2 哥德爾不完備定理 3
1.1.3 計算機的形式化 3
1.1.4 邁向人類思想的形式化 4
1.1.5 人工智能學科的誕生 5
1.2 學習機理 6
1.2.1 到底什么是智能軟件 6
1.2.2 神經(jīng)元是如何工作的 7
1.2.3 胡蘿卜加大棒法
(軟硬兼施) 10
1.2.4 應變能力 12
1.3 人工智能的形式 13
1.3.1 原始智能 13
1.3.2 專家系統(tǒng) 13
1.3.3 自治系統(tǒng) 15
1.3.4 人工的情感形式 17
1.4 本章小結(jié) 18
第2章 智能軟件 19
2.1 應用人工智能 19
2.1.1 軟件智能的發(fā)展 19
2.1.2 專家系統(tǒng) 20
2.2 通用人工智能 22
2.2.1 無監(jiān)督學習 22
2.2.2 監(jiān)督學習 24
2.3 本章小結(jié) 26
第3章 映射問題和算法 27
3.1 基本問題 27
3.1.1 對象分類 28
3.1.2 結(jié)果預測 30
3.1.3 對象分組 31
3.2 更復雜的問題 33
3.2.1 圖像分類 33
3.2.2 目標檢測 34
3.2.3 文本分析 34
3.3 自動機器學習 35
3.3.1 AutoML平臺的
特性 35
3.3.2 運行中的AutoML Model Builder 37
3.4 本章小結(jié) 40
第4章 機器學習解決方案的
一般步驟 42
4.1 數(shù)據(jù)收集 42
4.1.1 組織中的數(shù)據(jù)驅(qū)動文化 43
4.1.2 存儲選項 44
4.2 數(shù)據(jù)準備 45
4.2.1 提高數(shù)據(jù)質(zhì)量 45
4.2.2 清理數(shù)據(jù) 46
4.2.3 特征工程 47
4.2.4 最終確定訓練數(shù)據(jù)集 48
4.3 模型選擇及訓練 50
4.3.1 算法備忘錄 51
4.3.2 神經(jīng)網(wǎng)絡(luò)案例 53
4.3.3 評估模型性能 54
4.4 模型部署 55
4.4.1 選擇合適的主機平臺 55
4.4.2 公開API 56
4.5 本章小結(jié) 56
第5章 數(shù)據(jù)因素 58
5.1 數(shù)據(jù)質(zhì)量 58
5.1.1 數(shù)據(jù)有效性 58
5.1.2 數(shù)據(jù)收集 59
5.2 數(shù)據(jù)完整性 60
5.2.1 完備性 61
5.2.2 唯一性 61
5.2.3 及時性 61
5.2.4 準確性 61
5.2.5 一致性 62
5.3 到底什么是數(shù)據(jù)科學家 62
5.3.1 工作中的數(shù)據(jù)科學家 62
5.3.2 數(shù)據(jù)科學家工具箱 63
5.3.3 數(shù)據(jù)科學家和軟件
開發(fā)人員 63
5.4 本章小結(jié) 64
第二部分 .NET中的機器學習
第6章 .NET方式 66
6.1 為什么用或不用Python 67
6.1.1 為什么在機器學習中
Python如此受歡迎 67
6.1.2 Python機器學習庫的
分類 68
6.1.3 基于Python模型的端到
端解決方案 70
6.2 ML.NET簡介 72
6.2.1 在ML.NET中創(chuàng)建和
使用模型 72
6.2.2 學習環(huán)境的要素 74
6.3 本章小結(jié) 78
第7章 實現(xiàn)ML.NET管道 79
7.1 從數(shù)據(jù)開始 79
7.1.1 探索數(shù)據(jù)集 80
7.1.2 應用公共數(shù)據(jù)轉(zhuǎn)換 80
7.1.3 關(guān)于數(shù)據(jù)集的注意事項 81
7.2 訓練步驟 81
7.2.1 選擇算法 82
7.2.2 評估算法的性能 82
7.2.3 計劃測試階段 83
7.2.4 指標預覽 83
7.3 從客戶端應用程序中預測價格 84
7.3.1 獲取模型文件 84
7.3.2 設(shè)置ASP.NET應用程序 85
7.3.3 預測出租車費 85
7.3.4 設(shè)計適當?shù)挠脩艚缑妗?7
7.3.5 質(zhì)疑數(shù)據(jù)和解決問題的
方法 88
7.4 本章小結(jié) 88
第8章 ML.NET任務及算法 89
8.1 ML.NET的整體框架 89
8.1.1 涉及的類型和接口 89
8.1.2 數(shù)據(jù)表示 90
8.1.3 支持的目錄 92
8.2 分類任務 94
8.2.1 二值分類 94
8.2.2 多分類 98
8.3 聚類任務 103
8.3.1 準備工作數(shù)據(jù) 103
8.3.2 訓練模型 104
8.3.3 評估模型 105
8.4 遷移學習 107
8.4.1 建立圖像分類器的步驟 108
8.4.2 應用必要的數(shù)據(jù)轉(zhuǎn)換 108
8.4.3 模型的構(gòu)建和訓練 110
8.4.4 關(guān)于遷移學習的補充
說明 112
8.5 本章小結(jié) 112
第三部分 淺層學習基礎(chǔ)
第9章 機器學習的數(shù)學基礎(chǔ) 114
9.1 統(tǒng)計數(shù)據(jù) 114
9.1.1 統(tǒng)計平均值 115
9.1.2 統(tǒng)計眾數(shù) 117
9.1.3 統(tǒng)計中位數(shù) 118
9.2 偏差和方差 119
9.2.1 統(tǒng)計學中的方差 120
9.2.2 統(tǒng)計學中的偏差 122
9.3 數(shù)據(jù)表示 122
9.3.1 五位數(shù)總結(jié) 122
9.3.2 直方圖 123
9.3.3 散點圖 124
9.3.4 散點圖矩陣 125
9.3.5 以適當?shù)谋壤L圖 125
9.4 本章小結(jié) 126
第10章 機器學習的度量 127
10.1 統(tǒng)計學與機器學習 127
10.1.1 機器學習的最終目標 128