自動駕駛汽車、自然語言識別、內(nèi)容推薦引擎的實(shí)現(xiàn)都離不開人工智能和機(jī)器學(xué)習(xí)算法。機(jī)器學(xué)習(xí)算法只有在解決具體問題時(shí)才能體現(xiàn)價(jià)值。本書以解決各種趣味問題為目標(biāo),教讀者用Python、JavaScript、C 編寫機(jī)器學(xué)習(xí)算法,內(nèi)容深入淺出,兼具實(shí)用性與大局觀。讀者將學(xué)習(xí)編寫遺傳算法、啟發(fā)式算法、爬山算法、模擬退火算法,運(yùn)用蒙特·卡洛模擬、點(diǎn)格自動機(jī)、適應(yīng)函數(shù)解決問題。本書尤其適合對人工智能和機(jī)器學(xué)習(xí)感興趣的程序員進(jìn)階學(xué)習(xí)。
不知道你有沒有聽說過一個(gè)說法編程逃出紙口袋(譯注:原文為Coding your way out of a paper bag,way out of a paper bag是俚語,用來比喻容易的事。這個(gè)短語常用于否定句,比如someone is not able to code their way out of a paper bag,意思是有些人毫無編程經(jīng)驗(yàn)。作者在這里將這個(gè)短語用作雙關(guān)語,一來表示本書將幫助讀者輕松掌握機(jī)器學(xué)習(xí)的概念與算法,二來作者確實(shí)在例子里用到了紙口袋)。本書將教你用各種機(jī)器學(xué)習(xí)算法幫助粒子、螞蟻、蜜蜂,甚至烏龜逃離紙口袋。這個(gè)比喻聽起來有點(diǎn)怪,但這種方式很適合演示算法。讀者對象如果你是初學(xué)者或剛?cè)腴T的程序員,想學(xué)習(xí)機(jī)器學(xué)習(xí)算法,那么這本書很適合你。你將學(xué)習(xí)遺傳算法(genetic algorithm)、自然啟發(fā)的粒子群算法(nature-inspired swarm)、蒙特卡洛模擬(Monte Carlo simulation)、元胞自動機(jī)(cellular automata),還有聚類(cluster)。除此以外,你還將學(xué)習(xí)測試代碼。本書內(nèi)容閱讀本書,你將學(xué)習(xí):? 運(yùn)用啟發(fā)式算法(heuristics)解決問題并設(shè)計(jì)適應(yīng)度函數(shù)(fitness function)。? 構(gòu)建遺傳算法(genetic algorithm)。? 構(gòu)建受自然啟發(fā)的粒子群算法(nature-inspired swarms)。? 用蒙特卡洛模擬(Monte Carlo simulation)進(jìn)行統(tǒng)計(jì)模擬。? 了解元胞自動機(jī)(cellular automata)的概念。? 使用爬山法(hill climbing)和模擬退火算法(simulated annealing)找到函數(shù)的極值。? 嘗試各種選擇算法,包括錦標(biāo)賽法(tournament selection)和轉(zhuǎn)輪賭選擇法(roulette selection)。? 掌握啟發(fā)式算法、適應(yīng)度函數(shù)、衡量指標(biāo)和聚類的知識。你還會學(xué)習(xí)測試代碼,舉一反三地解決新問題,因地制宜地采用編程策略這是稱職的程序員必須具備的素質(zhì)。除此之外,你還會借助可視化代碼觀察算法是如何通過學(xué)習(xí)來解決問題的。衷心希望這本書能對你未來的機(jī)器學(xué)習(xí)項(xiàng)目有所啟發(fā)。在線資源受篇幅所限,書中代碼有所省略。本書官網(wǎng)有完整的代碼下載 。書中代碼采用C (C 11及以上版本)、Python(2.x或3.x)和JavaScript(用于操作HTML5 canvas)編寫。代碼還會用到一些開源庫,包括matplotlib、SFML、Catch、Cosmix-Ray。這些繪圖庫和測試庫不是必需的,但是能帶來更完整的學(xué)習(xí)體驗(yàn)。你也可以根據(jù)算法描述,用你喜歡的語言編程,而不必拘泥于書中的代碼。Frances Buontempo
第 1 章 逃出紙口袋 1
1.1 開始 3
1.1.1 逃出紙口袋 4
1.2 目標(biāo):尋找出路 5
1.3 幫助烏龜逃脫 6
1.3.1 烏龜和紙口袋 7
1.4 拯救烏龜 8
1.4.1 正方形 9
1.4.2 角螺旋 10
1.4.3 該逃脫了 11
1.5 算法有效嗎 12
1.6 拓展學(xué)習(xí) 14
第 2 章 尋找紙口袋 17
2.1 從數(shù)據(jù)中學(xué)習(xí) 18
2.1.1 劃分?jǐn)?shù)據(jù) 21
2.2 生成決策樹的方法 22
2.2.1 選取最佳特征 22
2.3 找到紙口袋 28
2.3.1 尋找分割點(diǎn) 29
2.3.2 構(gòu)建決策樹 30
2.3.3 數(shù)據(jù)分類 31
2.3.4 將決策樹轉(zhuǎn)為規(guī)則集 32
2.4 算法有效嗎 33
2.4.1 如何剪枝36
2.5 拓展學(xué)習(xí)38
第 3 章 遺傳算法 39
3.1 發(fā)射炮彈41
3.2 解的生成方法44
3.2.1 算法的初始化 44
3.2.2 算法的迭代45
3.2.3 如何讓解變得更好45
3.2.4 最終決策46
3.3 發(fā)射炮彈47
3.3.1 隨機(jī)初始化48
3.3.2 選擇過程48
3.3.3 交叉 53
3.3.4 突變 54
3.4 算法有效嗎56
3.4.1 畫圖 56
3.4.2 記錄 60
3.4.3 突變測試60
3.4.4 遺傳算法的變體 62
3.5 拓展學(xué)習(xí)63
第 4 章 粒子群算法 65
4.1 控制粒子群67
4.1.1 移動單個(gè)粒子 67
4.1.2 移動多個(gè)粒子 71
4.1.3 粒子群75
4.2 粒子群的生成76
4.2.1 跟隨鄰近粒子 77
4.2.2 跟隨最好位置 78
4.3 創(chuàng)建粒子群80
4.3.1 跟隨鄰近粒子 80
4.3.2 跟隨最好位置 83
4.4 算法有效嗎 88
4.5 拓展學(xué)習(xí) 90
第 5 章 尋找路線 91
5.1 釋放信息素 92
5.1.1 使用信息素 94
5.2 怎樣生成路線 96
5.3 讓螞蟻行動起來 98
5.3.1 隨機(jī)初始化 98
5.3.2 畫路線 102
5.3.3 迭代優(yōu)化路線 103
5.4 算法有效嗎 107
5.4.1 從同一點(diǎn)出發(fā) 107
5.4.2 隨機(jī)從不同點(diǎn)出發(fā) 109
5.4.3 和的選擇 109
5.4.4 其他參數(shù) 111
5.5 拓展學(xué)習(xí) 112
第 6 章 運(yùn)用隨機(jī)模型 113
6.1 讓粒子隨機(jī)運(yùn)動 114
6.1.1 蒙特卡洛模擬 114
6.1.2 布朗運(yùn)動 117
6.1.3 幾何布朗運(yùn)動 122
6.1.4 跳躍擴(kuò)散 123
6.2 如何產(chǎn)生擴(kuò)散 125
6.2.1 小隨機(jī)步長 125
6.2.2 用 C 畫圖 126
6.3 讓粒子擴(kuò)散開 127
6.3.1 布朗運(yùn)動 128
6.3.2 股票價(jià)格 133
6.4 算法有效嗎 137
6.4.1 基于特性的測試 139
6.5 拓展學(xué)習(xí)143
第 7 章 蜂群算法 145
7.1 養(yǎng)蜂 146
7.1.1 讓蜜蜂行動起來 146
7.1.2 蜜蜂的分工147
7.1.3 算法總覽 149
7.2 算法分析150
7.2.1 算法細(xì)節(jié) 150
7.2.2 搖擺舞152
7.3 讓蜜蜂飛起來 152
7.3.1 蜂群算法的實(shí)現(xiàn) 153
7.3.2 蜂群算法的可視化161
7.4 算法有效嗎164
7.5 拓展學(xué)習(xí)166
第 8 章 元胞自動機(jī)167
8.1 讓元胞活起來 169
8.2 創(chuàng)造人工生命 172
8.2.1 算法細(xì)節(jié) 173
8.3 實(shí)現(xiàn)元胞自動機(jī) 175
8.4 算法有效嗎182
8.5 拓展學(xué)習(xí)183
第 9 章 遺傳算法與元胞自動機(jī)185
9.1 找到最好的配置 186
9.2 遺傳算法在元胞自動機(jī)上的工作方式190
9.3 找到最優(yōu)初始排列193
9.3.1 交叉 197
9.3.2 突變 201
9.3.3 運(yùn)行遺傳算法 202
9.3.4 初等元胞自動機(jī) 204
9.3.5 隨機(jī)規(guī)則 206
9.4 算法有效嗎 207
9.4.1 初等元胞自動機(jī) 209
9.4.2 隨機(jī)規(guī)則 211
9.5 拓展學(xué)習(xí) 212
第 10 章 找到最優(yōu)解 215
10.1 移動烏龜 216
10.2 烏龜怎么走 217
10.2.1 爬山法 218
10.2.2 模擬退火算法 220
10.3 尋找口袋底部 222
10.3.1 用函數(shù)表示口袋形狀 223
10.3.2 爬山法 224
10.3.3 模擬退火算法 225
10.4 算法有效嗎 228
10.4.1 爬山法 229
10.4.2 模擬退火算法 231
10.5 更高維度的情況 233
10.6 拓展學(xué)習(xí) 237
參考文獻(xiàn) 239