産品特色
編輯推薦
以全棧機器學習應用為目標
通過介紹Docker等部署工具,幫助讀者加速掌握機器學習模型的産業化進程。不管你是就職於大公司,還是自己創業,希望本書的內容能夠讓你快速上綫滿意的機器學習係統,離夢想更近一點。
抓住機器學習主乾,遠離學院派
世界在變,機器學習也在不停地變。對於機器學習中的很多重要成員,如建模工具、分布式隊列等,本書都會對其來龍去脈和發展趨勢進行綜述。希望通過這樣的討論,能夠讓讀者對機器學習的發展趨勢有自己的判斷,在未來的成長中也能獨占鰲頭。
能讀的代碼,能跑的例子
本書力求避免代碼的大段堆砌。所有案例代碼都力求在 20 行以內,所有例子都通過多次可用性測試。同時我們也將源代碼寄存在 Github 上麵,隨時進行更新排錯。
實時股票交易實例數據
采用美股交易秒級數據作為案例數據,搭建實時機器學習平颱,對數據進行存儲、加工分析和可視化,並且對數據未來若乾秒的走勢進行預測。
內容簡介
本書是國內少有的從係統構架角度介紹機器學習應用的圖書,總結瞭筆者多年來在Google、微軟工作中積纍的精華。書中內容可以從工具、理論和案例三條綫路來概括:
工具方麵,除瞭數據分析工具Pandas、機器學習工具Scikit Learn和Docker以外,還介紹瞭RabbitMQ、Elasticsearch,以及MySQL、Cassandra數據庫等。
理論方麵,不僅介紹瞭監督式機器學習基礎、衡量和評價方法,機器學習的常見構架,還在本書末尾對機器學習構架的設計模式進行瞭總結,這樣的總結也屬國內外業界首創。
案例方麵,采用美股交易秒級數據作為案例數據,利用Pandas對秒級交易數據進行分析,利用Scikit Learn對股票變化方嚮進行預測,還打造瞭一個以RabbitMQ為消息傳導中樞的實時處理係統。
作者簡介
彭河森,資深機器學習科學傢,曾在Google、Amaz*n、微軟等公司從事一綫機器學習構架和開發工作,參與瞭Google實時數據警報、Amazo*産品廣告自動化優化、微軟必應廣告等多項海量數據、延時要求苛刻的機器學習應用工作。也參與Scikit-learn、Airflow、R等多項開源項目。對機器學習項目的生存期管理、架構設計、軟件開發以及應用關鍵有著豐富的經驗。
汪涵,資深機器學習開發者,曾是Amaz*n、微軟、Quantlab、晨星等公司一綫機器學習開發人員,參與瞭Amazo*AB檢驗服務、微軟必應搜索問答係統等多項關鍵大數據處理和機器學習應用的構架和開發工作。對機器學習、自然語言處理有著深刻的體會。
目錄
前 言
第1部分 實時機器學習方法論
第1章 實時機器學習綜述 2
1.1 什麼是機器學習 2
1.2 機器學習發展的前世今生 3
1.2.1 曆史上機器學習無法調和的難題 3
1.2.2 現代機器學習的新融閤 4
1.3 機器學習領域分類 5
1.4 實時是個“萬靈丹” 6
1.5 實時機器學習的分類 7
1.5.1 硬實時機器學習 7
1.5.2 軟實時機器學習 7
1.5.3 批實時機器學習 8
1.6 實時應用對機器學習的要求 8
1.7 案例:Netflix在機器學習競賽中學到的經驗 9
1.7.1 Netflix 用戶信息被逆嚮工程 9
1.7.2 Netflix 最終勝齣者模型無法在生産環境中使用 9
1.8 實時機器學習模型的生存期 10
第2章 實時監督式機器學習 12
2.1 什麼是監督式機器學習 12
2.1.1 “江湖門派”對預測模型的
不同看法 13
2.1.2 工業界的學術門派 14
2.1.3 實時機器學習實戰的思路 15
2.2 怎樣衡量監督式機器學習模型 16
2.2.1 統計量的優秀 16
2.2.2 應用業績的優秀 20
2.3 實時綫性分類器介紹 20
2.3.1 廣義綫性模型的定義 20
2.3.2 訓練綫性模型 21
2.3.3 冷啓動問題 22
第3章 數據分析工具 Pandas 23
3.1 顛覆 R 的 Pandas 23
3.2 Pandas 的安裝 24
3.3 利用 Pandas 分析實時股票報價數據 24
3.3.1 外部數據導入 25
3.3.2 數據分析基本操作 25
3.3.3 可視化操作 26
3.3.4 秒級收盤價變化率初探 28
3.4 數據分析的三個要點 30
3.4.1 不斷驗證假設 30
3.4.2 全麵可視化,全麵監控化 30
第4章 機器學習工具 Scikit-learn 31
4.1 如何站在風口上?嚮Scikit-learn 學習 31
4.1.1 傳統的綫下統計軟件 R 31
4.1.2 底層軟件黑盒子 Weka 32
4.1.3 跨界産品 Scikit-learn 33
4.1.4 Scikit-learn的優勢 33
4.2 Scikit-learn 的安裝 34
4.3 Scikit-learn 的主要模塊 35
4.3.1 監督式、非監督式機器學習 35
4.3.2 建模函數fit和predict 36
4.3.3 數據預處理 38
4.3.4 自動化建模預測 Pipeline 39
4.4 利用 Scikit-learn 進行股票價格波動預測 40
4.4.1 數據導入和預處理 41
4.4.2 編寫專有時間序列數據預處理模塊 41
4.4.3 利用 Pipeline 進行建模 43
4.4.4 評價建模效果 43
4.4.5 引入成交量和高維交叉項進行建模 44
4.4.6 本書沒有告訴你的 45
第2部分 實時機器學習架構
第5章 實時機器學習架構設計 48
5.1 設計實時機器學習架構的
四個要點 48
5.2 Lambda 架構和主要成員 49
5.2.1 實時響應層 49
5.2.2 快速處理層 50
5.2.3 批處理層 50
5.3 常用的實時機器學習架構 50
5.3.1 瀑布流架構 50
5.3.2 並行響應架構 51
5.3.3 實時更新模型混閤架構 52
5.4 小結 53
第6章 集群部署工具 Docker 55
6.1 Docker 的前世今生 55
6.2 容器虛擬機的基本組成部分 56
6.3 Docker 引擎命令行工具 57
6.3.1 Docker 引擎的安裝 57
6.3.2 Docker 引擎命令行的基本操作 58
6.4 通過 Dockerfile 配置容器虛擬機 61
6.4.1 利用 Dockerfile 配置基本容器虛擬機 62
6.4.2 利用 Dockerfile 進行虛擬機和宿主機之間的文件傳輸 62
6.5 服務器集群配置工具Docker Compose 64
6.5.1 Docker Compose 的安裝 64
6.5.2 Docker Compose 的基本操作 64
6.5.3 利用 Docker Compose 創建網頁計數器集群 65
6.6 遠端服務器配置工具Docker Machine 68
6.6.1 Docker Machine 的安裝 68
6.6.2 安裝 Oracle VirtualBox 69
6.6.3 創建和管理 VirtualBox中的虛擬機 69
6.6.4 在 Docker Machine 和 VirtualBox的環境中運行集群 70
6.6.5 利用 Docker Machine 在 Digital Ocean 上配置運行集群 71
6.7 其他有潛力的 Docker 工具 73
第7章 實時消息隊列和RabbitMQ 74
7.1 實時消息隊列 74
7.2 AMQP 和 RabbitMQ 簡介 76
7.3 RabbitMQ的主要構成部分 76
7.4 常用交換中心模式 78
7.4.1 直連結構 78
7.4.2 扇形結構 78
7.4.3 話題結構 79
7.4.4 報頭結構 79
7.5 消息傳導設計模式 79
7.5.1 任務隊列 80
7.5.2 Pub/Sub 發布/監聽 80
7.5.3 遠程命令 81
7.6 利用 Docker 快速部署RabbitMQ 82
7.7 利用 RabbitMQ 開發隊列服務 85
7.7.1 準備案例材料 86
7.7.2 實時報價存儲服務 86
7.7.3 實時走勢預測服務 89
7.7.4 整閤運行實驗 93
7.7.5 總結和改進 95
第8章 實戰數據庫綜述 98
8.1 SQL 與 NoSQL,主流數據庫分類 98
8.1.1 關係型數據庫 99
8.1.2 非關係型數據庫 NoSQL 99
8.2 數據庫的性能 100
8.2.1 耐分割 100
8.2.2 一緻性 101
8.2.3 可用性 101
8.2.4 CAP 定理 101
8.3 SQL和NoSQL對比 102
8.3.1 數據存儲、讀取方式 102
8.3.2 數據庫的擴展方式 103
8.3.3 性能比較 103
8.4 數據庫的發展趨勢 103
8.4.1 不同數據庫之間自動化同步更為方便 103
8.4.2 雲數據庫的興起 104
8.4.3 底層和應用層多層化 104
8.5 MySQL 簡介 105
8.6 Cassandra簡介 105
8.6.1 Cassandra交互方式簡介 105
8.6.2 利用Docker安裝Cassandra 106
8.6.3 使用Cassandra存儲數據 106
第9章 實時數據監控 ELK 集群 107
9.1 Elasticsearch、LogStash和Kibana 的前世今生 107
9.1.1 Elasticsearch 的平凡起傢 108
9.1.2 LogStash 卑微的起源 108
9.1.3 Kibana 驚艷登場 109
9.1.4 ELK 協同作戰 109
9.2 Elasticsearch 基本架構 109
9.2.1 文檔 110
9.2.2 索引和文檔類型 111
9.2.3 分片和冗餘 112
9.2.4 Elasticsearch 和數據庫進行比較 113
9.3 Elasticsearch 快速入門 113
9.3.1 用 Docker 運行 Elasticsearch 容器虛擬機 113
9.3.2 創建存儲文檔、文檔類型和索引 114
9.3.3 搜索文檔 117
9.3.4 對偶搜索 120
9.4 Kibana 快速入門 124
9.4.1 利用 Docker 搭建ELK 集群 125
9.4.2 配置索引格式 127
9.4.3 交互式搜索 128
9.4.4 可視化操作 129
9.4.5 實時檢測麵闆 132
第10章 機器學習係統設計模式 134
10.1 設計模式的前世今生 134
10.1.1 單機設計模式逐漸式微 134
10.1.2 微服務取代設計模式的示例 135
10.1.3 微服務設計模式的興起 137
10.2 讀:高速鍵值模式 137
10.2.1 問題場景 137
10.2.2 解決方案 138
10.2.3 其他使用場景 139
10.3 讀:緩存高速查詢模式 139
10.3.1 問題場景 139
10.3.2 解決方案 139
10.3.3 適用場景 141
10.4 更新:異步數據庫更新模式 141
10.4.1 問題場景 141
10.4.2 解決方案 141
10.4.3 使用場景案例 142
10.5 更新:請求重定嚮模式 144
10.5.1 問題場景 144
10.5.2 解決方案 144
10.5.3 更新流程 145
10.5.4 使用場景案例 146
10.6 處理:硬實時並行模式 146
10.6.1 問題場景 146
10.6.2 解決方案 147
10.6.3 使用場景案例 147
10.7 處理:分布式任務隊列模式 148
10.7.1 問題場景 148
10.7.2 解決方案 149
10.7.3 Storm 作為分布式任務隊列 150
10.7.4 適用場景 151
10.7.5 結構的演進 152
10.8 處理:批實時處理模式 152
10.8.1 問題場景 152
10.8.2 解決方案 152
10.8.3 適用場景 153
第3部分 未來展望
第11章 Serverless 架構 156
11.1 Serverless 架構的前世今生 156
11.2 Serverless 架構對實時
機器學習的影響 157
第12章 深度學習的風口 159
12.1 深度學習的前世今生 159
12.2 深度學習的難點 161
12.3 如何選擇深度學習工具 161
12.3.1 與現有編程平颱、技能整閤的難易程度 162
12.3.2 此平颱除做深度學習之外,還能做什麼 163
12.3.3 深度學習平颱的成熟程度 164
12.4 未來發展方嚮 165
前言/序言
機器學習從業人員的艱難選擇
作為機器學習從業人員,如果今天突然被公司或學校開除,你能養活自己嗎?鄰居老大媽買土雞蛋不買神經網絡模型,東門老大爺認識郭德綱不認識樸素貝葉斯,麵容姣好的“翠花”隻認房産證不認 Zookeeper。即使你身懷絕技,有著遠大的抱負,機器學習應用難以變現也是事實。為瞭能維持生計,眾多機器學習從業人員隻能進入大公司、大組織。但限於流程和已有的體製,在這樣的工作環境下,他們很難完全發揮自己的潛能。
太多的好朋友,在脫離體製和大公司的時候豪情萬丈,吃散夥飯時和戰友們慷慨激昂,唱著真心英雄,夢想著自己也有迴到北京東二環開始指點江山的一天。可是第二天帶著宿醉起床麵對著電腦屏幕時,卻不知道該怎麼開始。沒錯,我們都有自己的想法,我們自己就是程序員,比那些在創業街上賣 PPT 的人“厲害”多瞭。可是在工業界,不管是初入職場的新人,還是久經沙場的老將,都需要在業餘時間不停地刷題,練習“LeetCode”中的習題,以應對不時之需。這樣的生存方式嚴重阻礙瞭知識經濟的發展,更不要提為祖國健康工作五十年瞭。與大組織、巨無霸企業不同的是,自主創業往往需要開發人員全棧的技術能力。大公司裏麵的技術能手在獨立創業的時候也不免會遇到下麵這些很基本的問題:
服務器從哪裏來?
以前單位、導師手裏有一套自主開發的大數據平颱,現在自己單乾瞭沒法用,怎麼辦?
以前用的機器學習軟件包是某個“牛人”自己開發的“獨門武功”,隻在公司內部用,現在該用什麼?
模型訓練齣來瞭,又怎麼部署?
總算東拼西湊寫好瞭一個流程,接下來如何實現數據可視化?
總算有客戶開始用瞭,怎麼樣纔能對結果實時監控?
這個時候你纔會想起馬雲的那句話:“離開公司瞭你什麼都不是”。還是迴大公司吧,至少比較安穩……
總結起來,機器學習從業人員的難處有三點。
技能無法直接轉化為經濟效益:必須依靠大組織、公司,纔能實現經濟效益的轉化。這必然要求從業人員服從諸多的條款和價值觀,這對他們工作效率和積極性來說都是沉重的負擔。
迭代速度受牽製:雖然開源社區擁有眾多非常優秀的工具,但大公司、大組織往往都有眾多曆史遺留架構,這使得開發部署過程變得異常漫長。與此同時,從業人員也會覺得所學的知識將來無法為自己所用,因此感到空虛。
齣成果壓力大:高投入就需要有高迴報。機器學習從業人員薪資非常高,因此公司對從業人員進行新架構、新項目開發的耐心往往也非常有限。就算是從公司利益齣發,進行架構、代碼的革新,從業人員往往也會擔上不少風險。如果不能在短時間內實現架構,或者新訓練的模型不能達到預期目標,從業人員的工作穩定性將會得不到保證。
老闆、管理人員的睏境
機器學習從業人員有自己的睏難,公司的老總、經理也有傷腦筋的事情。2015 年 KDNuggets 調查數據顯示,工業界超過半數的數據科學傢在一個職位上的工作時間一般都少於兩年。另外美國舊金山灣區的機器學習科學傢在一個職位上平均隻會停留8個月。這麼高的跳槽頻率讓眾多雇主也提心吊膽。根據筆者的經驗,機器學習從業人員,從入職到真正開始産生正現金流,至少需要 9 個月左右的時間。太短的工作年限對於很多雇主來說遠遠不足以收迴成本。
有的公司財力雄厚,高薪聘請瞭擁有榖歌工作經驗的斯坦福大學博士,但這名博士入職三個月,文章發錶瞭四篇,會開瞭五場,可是機器學習模型拿到實際工作環境中的效果卻不理想,無法上綫。結果令人沮喪。
資金實力不太充裕的初創公司就更難瞭。本身財力有限,招人靠情懷來對衝。好不容易找到瞭誌同道閤的人,開口就問人傢要 GPU 集群,而現成的機器學習框架中TensorFlow 太慢,PaddlePaddle 太差,往往有一些以技術為主打的初創公司,專心於核心軟件開發,而速度太慢,結果還沒開始上綫産生效益,當時所在的初創公司就已經燒斷瞭現金流。
另一方麵,老闆從來不敢對機器學習從業人員過分施壓。因為若施壓太大,再加上現在市場對機器學習專傢的需求旺盛,機器學習員工都是一言不閤就跳槽。施壓太小,機器學習員工就會開始麵嚮簡曆的開發模式,一會兒去歐洲開會,一會兒開源個深度學習框架,就是不上綫真正能賺錢的産品,這又怎能不讓人著急?
總結起來,管理人員的難處有以下三點。
雙重身份的矛盾:機器學習開發人員到底算科學傢還是算程序員?這是一個管理者需要麵對的根本性問題。若把機器學習開發人員看成科學傢,就要做好所有投資都打水漂的心理準備,投資迴報率可能非常低;若把機器學習開發人員看成程序員,就要給其足夠的自由度和福利,並且做好開發人員冗餘,對員工突然離職的情況做好準備。
利益衝突的矛盾:現在機器學習人員的流動性很高,公司需要齣效益,而工作人員需要齣好看的簡曆。在很多情況下,這兩個需求是背道而馳的。本書後文會對各種機器學習架構進行綜述,其中不乏員工為瞭充實簡曆而開發的“政績工程”。通過對本書的學習,相信管理人員的眼睛也會擦亮不少。
和商業部門整閤的矛盾:機器學習科學傢往往醉心於開發最復雜最
構建實時機器學習係統 下載 mobi epub pdf txt 電子書