本書致力于利用算法求解實(shí)際問題。第1部分介紹算法的核心內(nèi)容,探討什么是算法、如何設(shè)計(jì)算法,同時(shí)學(xué)習(xí)在算法中使用的數(shù)據(jù)結(jié)構(gòu)。重點(diǎn)講解排序算法、查找算法和求解圖問題的算法。第二部分討論各種機(jī)器學(xué)習(xí)算法,包括無(wú)監(jiān)督機(jī)器學(xué)習(xí)算法和傳統(tǒng)有監(jiān)督學(xué)習(xí)算法,詳細(xì)討論一些自然語(yǔ)言處理算法和推薦引擎。第三部分討論更高級(jí)的算法概念,重點(diǎn)介紹了密碼算法和大規(guī)模算法。本書還包含一些案例分析(如天氣預(yù)測(cè)、推文聚類和電影推薦引擎),用來(lái)說(shuō)明如何才能更好地應(yīng)用這些算法。
算法一直在計(jì)算科學(xué)和計(jì)算實(shí)踐中發(fā)揮著重要作用。本書致力于利用算法求解實(shí)際問題。為了限度地利用算法,必須深入理解算法背后的邏輯和數(shù)學(xué)知識(shí)。我們先概要地介紹算法,并探索各種算法設(shè)計(jì)技術(shù)。接下來(lái),學(xué)習(xí)線性規(guī)劃算法、PageRank算法、圖算法以及機(jī)器學(xué)習(xí)算法。本書還包含一些案例(如天氣預(yù)測(cè)、推文聚類和電影推薦引擎),用來(lái)說(shuō)明如何才能地應(yīng)用這些算法。通過學(xué)習(xí)本書,你將對(duì)使用算法求解實(shí)際計(jì)算問題充滿信心。
讀者對(duì)象
本書為程序員而寫!無(wú)論你是希望深刻理解算法背后的數(shù)學(xué)知識(shí)的經(jīng)驗(yàn)豐富的程序員,還是希望了解如何利用經(jīng)過實(shí)踐檢驗(yàn)的算法來(lái)改進(jìn)代碼設(shè)計(jì)和編寫方式的經(jīng)驗(yàn)不足的程序員,閱讀本書都大有裨益。在閱讀本書前必須具有Python編程經(jīng)驗(yàn),數(shù)據(jù)科學(xué)知識(shí)對(duì)閱讀本書有幫助,但不是必需的。
本書內(nèi)容
第1章概述算法基礎(chǔ)。1.1節(jié)介紹理解不同算法如何工作所需的基本概念,概述人們初如何用算法以數(shù)學(xué)的形式表達(dá)特定類型的問題,還提到不同算法的局限性。1.2節(jié)講述描述算法邏輯的各種方法。由于本書用 Python編寫算法,1.3節(jié)說(shuō)明如何設(shè)置環(huán)境以運(yùn)行書中給出的例子。1.4節(jié)介紹算法設(shè)計(jì)技術(shù)。1.5節(jié)討論如何用不同方法量化算法性能,并與其他算法進(jìn)行比較。1.6節(jié)討論驗(yàn)證算法的特定實(shí)現(xiàn)的各種方法。
第2章著重講述算法中用于存儲(chǔ)臨時(shí)數(shù)據(jù)的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。算法可能是數(shù)據(jù)密集型的,也可能是計(jì)算密集型的,或者既是數(shù)據(jù)密集型的又是計(jì)算密集型的。對(duì)于所有不同類型的算法,選擇恰當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)對(duì)其實(shí)現(xiàn)而言至關(guān)重要。許多算法具有遞歸和迭代邏輯,因而需要面向這種本征邏輯的專用數(shù)據(jù)結(jié)構(gòu)。由于本書用 Python編寫算法,這一章主要關(guān)注實(shí)現(xiàn)書中算法所需的 Python 數(shù)據(jù)結(jié)構(gòu)。
第3章給出用于排序和查找的核心算法。這些算法在后面將作為其他更復(fù)雜算法的基礎(chǔ)。本章先講述不同類型的排序算法,包括各種算法的性能比較。然后,講述各種查找算法,量化這些算法的性能和復(fù)雜度,并進(jìn)行比較。后,講述這些算法的實(shí)際應(yīng)用。
第4章講述設(shè)計(jì)各種算法所需的核心概念,闡述各種算法并討論它們的優(yōu)缺點(diǎn)。理解這些概念對(duì)設(shè)計(jì)的復(fù)雜算法而言至關(guān)重要。這一章先討論不同類型的算法設(shè)計(jì),然后求解著名的旅行商問題。之后討論線性規(guī)劃及其局限性。后,用實(shí)例展示如何用線性規(guī)劃進(jìn)行產(chǎn)量規(guī)劃。
第5章著重講述常見于計(jì)算機(jī)科學(xué)中的圖算法。圖是許多計(jì)算問題的模型。本章講述表示和搜索圖的各種方法。搜索圖意味著用系統(tǒng)化的方法沿圖中的邊訪問圖中的頂點(diǎn)。圖搜索算法可以發(fā)現(xiàn)圖的很多結(jié)構(gòu)。很多算法都通過在輸入圖上執(zhí)行搜索算法來(lái)獲得結(jié)構(gòu)信息。其他幾個(gè)圖算法都是基本圖搜索算法的細(xì)化。圖的搜索技術(shù)是圖算法領(lǐng)域的核心。該章首先討論圖的兩種常見的計(jì)算表示:鄰接表和鄰接矩陣。接下來(lái),講述廣度優(yōu)先搜索這種簡(jiǎn)單的圖搜索算法,并說(shuō)明如何創(chuàng)建廣度優(yōu)先搜索樹。然后講述深度優(yōu)先搜索,并給出深度優(yōu)先搜索算法訪問頂點(diǎn)順序的標(biāo)準(zhǔn)結(jié)論。
第6章討論無(wú)監(jiān)督機(jī)器學(xué)習(xí)算法。之所以被歸類為無(wú)監(jiān)督方法,是由于這些模型或算法在無(wú)監(jiān)督條件下從給定數(shù)據(jù)中學(xué)習(xí)固有的結(jié)構(gòu)、模式和關(guān)系。我們先討論聚類方法,這種機(jī)器學(xué)習(xí)方法基于固有的屬性或特征,試圖從數(shù)據(jù)集的數(shù)據(jù)樣本中找出相似性模式和關(guān)系模式,然后把數(shù)據(jù)樣本劃分為集群,使得各個(gè)集群內(nèi)的數(shù)據(jù)樣本具有相似性。接下來(lái),討論降維算法,該算法用于處理特征較多的問題。之后,討論關(guān)聯(lián)規(guī)則挖掘算法,它們屬于數(shù)據(jù)挖掘方法,用于檢查和分析大規(guī)模交易數(shù)據(jù)集,以發(fā)現(xiàn)有意義的模式和規(guī)則,而這些模式表示了跨交易的各種商品之間有意義的關(guān)系和關(guān)聯(lián)。后,討論處理異常檢測(cè)的算法。
第7章描述與一組機(jī)器學(xué)習(xí)問題相關(guān)的傳統(tǒng)監(jiān)督機(jī)器學(xué)習(xí)算法。這些問題中的標(biāo)記數(shù)據(jù)集具有輸入屬性和相應(yīng)的輸出標(biāo)簽或類別。這些輸入和其相應(yīng)的輸出用于學(xué)習(xí)一個(gè)一般性系統(tǒng),該系統(tǒng)用于預(yù)測(cè)不在數(shù)據(jù)集中的其他數(shù)據(jù)點(diǎn)的結(jié)果。我們先從機(jī)器學(xué)習(xí)的角度概述分類的相關(guān)概念。接下來(lái),討論重要的算法之一決策樹,給出決策樹算法的局限性和優(yōu)勢(shì)。接著介紹支持向量機(jī)和XGBoost這兩種重要的算法。后,討論線性回歸這種簡(jiǎn)單的機(jī)器學(xué)習(xí)算法。
第8章首先介紹典型神經(jīng)網(wǎng)絡(luò)這種重要的機(jī)器學(xué)習(xí)技術(shù)的主要概念和組成部分。然后介紹各種神經(jīng)網(wǎng)絡(luò),并闡述用于實(shí)現(xiàn)這些神經(jīng)網(wǎng)絡(luò)的激活函數(shù)。之后,詳細(xì)討論反向傳播算法,這是目前應(yīng)用廣泛的訓(xùn)練神經(jīng)網(wǎng)絡(luò)的收斂算法。接下來(lái),介紹遷移學(xué)習(xí)技術(shù),它可以大大簡(jiǎn)化模型訓(xùn)練并部分地使其自動(dòng)化。后,給出一個(gè)學(xué)習(xí)實(shí)例,討論如何在現(xiàn)實(shí)世界中利用深度學(xué)習(xí)進(jìn)行欺詐檢測(cè)。
第9章介紹自然語(yǔ)言處理算法,從理論到實(shí)踐循序漸進(jìn)地展開。首先介紹基礎(chǔ)知識(shí),然后討論背后的數(shù)學(xué)知識(shí)。接下來(lái),介紹一種流行的神經(jīng)網(wǎng)絡(luò),它廣泛應(yīng)用于設(shè)計(jì)和實(shí)現(xiàn)文本數(shù)據(jù)上的重要用例。此外,還介紹自然語(yǔ)言處理算法的局限性。后,給出一個(gè)案例,討論如何在自然語(yǔ)言處理領(lǐng)域訓(xùn)練機(jī)器學(xué)習(xí)模型,以進(jìn)行電影評(píng)論情感分析。
第10章重點(diǎn)討論推薦引擎,它先用與用戶偏好相關(guān)的信息建立模型,然后基于模型和信息向
譯者序
前言
關(guān)于作者
關(guān)于審校者
部分 基礎(chǔ)與核心算法
第1章 算法概述2
1.1 什么是算法2
1.2 描述算法邏輯4
1.2.1 理解偽代碼4
1.2.2 使用代碼片段6
1.2.3 制定執(zhí)行計(jì)劃6
1.3 Python包簡(jiǎn)介7
1.3.1 Python包8
1.3.2 通過Jupyter Notebook執(zhí)行Python9
1.4 算法設(shè)計(jì)技術(shù)10
1.4.1 數(shù)據(jù)維度11
1.4.2 計(jì)算維度12
1.5 性能分析13
1.5.1 空間復(fù)雜度分析13
1.5.2 時(shí)間復(fù)雜度分析14
1.5.3 性能評(píng)估14
1.5.4 選擇算法15
1.5.5 大O記號(hào)15
1.6 驗(yàn)證算法19
1.6.1 精確算法、近似算法和隨機(jī)算法19
1.6.2 可解釋性20
1.7 小結(jié)20
第2章 算法中的數(shù)據(jù)結(jié)構(gòu)21
2.1 Python中的數(shù)據(jù)結(jié)構(gòu)21
2.1.1 列表22
2.1.2 元組26
2.1.3 字典27
2.1.4 集合28
2.1.5 數(shù)據(jù)幀30
2.1.6 矩陣32
2.2 抽象數(shù)據(jù)類型33
2.2.1 向量33
2.2.2 棧34
2.2.3 隊(duì)列36
2.2.4 棧和隊(duì)列背后的基本思想37
2.2.5 樹38
2.3 小結(jié)40
第3章 排序算法和查找算法41
3.1 排序算法簡(jiǎn)介41
3.1.1 在Python中交換變量42
3.1.2 冒泡排序42
3.1.3 插入排序44
3.1.4 歸并排序46
3.1.5 希爾排序48
3.1.6 選擇排序50
3.2 查找算法簡(jiǎn)介51
3.2.1 線性查找52
3.2.2 二分查找52
3.2.3 插值查找53
3.3 實(shí)際應(yīng)用54
3.4 小結(jié)56
第4章 算法設(shè)計(jì)57
4.1 算法設(shè)計(jì)基本概念57
4.1.1 點(diǎn)所設(shè)計(jì)算法是否能產(chǎn)生預(yù)期的結(jié)果58
4.1.2 第二點(diǎn)所設(shè)計(jì)算法是否是獲取結(jié)果的方法58
4.1.3 第三點(diǎn)所設(shè)計(jì)算法在更大的數(shù)據(jù)集上表現(xiàn)如何61
4.2 理解算法策略61
4.2.1 分治策略62
4.2.2 動(dòng)態(tài)規(guī)劃策略64
4.2.3 貪心算法64
4.3 實(shí)際應(yīng)用求解TSP65
4.3.1 使用蠻力策略66
4.3.2 使用貪心算法68
4.4 PageRank算法70
4.4.1 問題定義70
4.4.2 實(shí)現(xiàn)PageRank算法70
4.5 了解線性規(guī)劃73
4.6 實(shí)例用線性規(guī)劃實(shí)現(xiàn)產(chǎn)量規(guī)劃73
4.7 小結(jié)76
第5章 圖算法77
5.1 圖的表示77
5.1.1 圖的類型79
5.1.2 特殊類型的邊81
5.1.3 自我中心網(wǎng)絡(luò)82
5.1.4 社交網(wǎng)絡(luò)分析82
5.2 網(wǎng)絡(luò)分析理論簡(jiǎn)介83
5.2.1 理解短路徑83
5.2.2 創(chuàng)建鄰域84
5.2.3 理解中心性度量85
5.2.4 用Python計(jì)算中心性指標(biāo)87
5.3 理解圖的遍歷88
5.3.1 廣度優(yōu)先搜索89
5.3.2 深度優(yōu)先搜索92
5.4 實(shí)例欺詐分析93
5.4.1 進(jìn)行簡(jiǎn)單的欺詐分析96
5.4.2 瞭望塔欺詐分析法97
5.5 小結(jié)99
第二部分 機(jī)器學(xué)習(xí)算法
第6章 無(wú)監(jiān)督機(jī)器學(xué)習(xí)算法102
6.1 無(wú)監(jiān)督學(xué)習(xí)簡(jiǎn)介102
6.1.1 數(shù)據(jù)挖掘生命周期中的無(wú)監(jiān)督學(xué)習(xí)103
6.1.2 無(wú)監(jiān)督學(xué)習(xí)的當(dāng)前研究趨勢(shì)105
6.1.3 實(shí)例106
6.2 理解聚類算法107
6.2.1 量化相似性107
6.2.2 分層聚類113
6.2.3 評(píng)估聚類效果115
6.2.4 聚類算法的應(yīng)用115
6.3 降維116
6.3.1 主成分分析116
6.3.2 主成分分析的局限性118
6.4 關(guān)聯(lián)規(guī)則挖掘119
6.4.1 實(shí)例119
6.4.2 市場(chǎng)購(gòu)物籃分析119
6.4.3 關(guān)聯(lián)規(guī)則120
6.4.4 排序規(guī)則122
6.4.5 關(guān)聯(lián)分析算法123
6.5 實(shí)例聚類相似推文127
6.5.1 主題建模128
6.5.2 聚類128
6.6 異常檢測(cè)算法129
6.6.1 基于聚類的異常檢測(cè)129
6.6.2 基于密度的異常檢測(cè)129
6.6.3 基于支持向量機(jī)的異常檢測(cè)129
6.7 小結(jié)130
第7章 傳統(tǒng)監(jiān)督學(xué)習(xí)算法131
7.1 理解監(jiān)督機(jī)器學(xué)習(xí)131
7.1.1 描述監(jiān)督機(jī)器學(xué)習(xí)132
7.1.2 理解使能條件134
7.1.3 區(qū)分分類器和回歸器134
7.2 理解分類算法135
7.2.1 分類器挑戰(zhàn)性問題135
7.2.2 評(píng)估分類器139
7.2.3 分類器的各個(gè)階段142
7.2.4 決策樹分類算法143
7.2.5 理解集成方法146
7.2.6 邏輯回歸149
7.2.7 支持向量機(jī)算法151
7.2.8 理解樸素貝葉斯算法153
7.2.9 各種分類算法的勝者156
7.3 理解回歸算法156
7.3.1 回歸器挑戰(zhàn)性問題156
7.3.2 線性回歸158
7.3.3 回歸樹算法162
7.3.4 梯度提升回歸算法163
7.3.5 各種回歸算法的勝者163
7.4 實(shí)例預(yù)測(cè)天氣164
7.5 小結(jié)166
第8章 神經(jīng)網(wǎng)絡(luò)算法167
8.1 理解人工神經(jīng)網(wǎng)絡(luò)168
8.2 人工神經(jīng)網(wǎng)絡(luò)的演化169
8.3 訓(xùn)練神經(jīng)網(wǎng)絡(luò)171
8.3.1 解析神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)171
8.3.2 定義梯度下降172
8.3.3 激活函數(shù)173
8.4 工具和框架178
8.4.1 Keras178
8.4.2 理解TensorFlow181
8.4.3 理解神經(jīng)網(wǎng)絡(luò)的類型183
8.5 遷移學(xué)習(xí)185
8.6 實(shí)例用深度學(xué)習(xí)實(shí)現(xiàn)欺詐檢測(cè)186
8.7 小結(jié)189
第9章 自然語(yǔ)言處理算法190
9.1 自然語(yǔ)言處理簡(jiǎn)介190