産品特色
        編輯推薦
                                    以全棧機器學習應用為目標 
通過介紹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 太差,往往有一些以技術為主打的初創公司,專心於核心軟件開發,而速度太慢,結果還沒開始上綫産生效益,當時所在的初創公司就已經燒斷瞭現金流。 
另一方麵,老闆從來不敢對機器學習從業人員過分施壓。因為若施壓太大,再加上現在市場對機器學習專傢的需求旺盛,機器學習員工都是一言不閤就跳槽。施壓太小,機器學習員工就會開始麵嚮簡曆的開發模式,一會兒去歐洲開會,一會兒開源個深度學習框架,就是不上綫真正能賺錢的産品,這又怎能不讓人著急? 
總結起來,管理人員的難處有以下三點。 
雙重身份的矛盾:機器學習開發人員到底算科學傢還是算程序員?這是一個管理者需要麵對的根本性問題。若把機器學習開發人員看成科學傢,就要做好所有投資都打水漂的心理準備,投資迴報率可能非常低;若把機器學習開發人員看成程序員,就要給其足夠的自由度和福利,並且做好開發人員冗餘,對員工突然離職的情況做好準備。 
利益衝突的矛盾:現在機器學習人員的流動性很高,公司需要齣效益,而工作人員需要齣好看的簡曆。在很多情況下,這兩個需求是背道而馳的。本書後文會對各種機器學習架構進行綜述,其中不乏員工為瞭充實簡曆而開發的“政績工程”。通過對本書的學習,相信管理人員的眼睛也會擦亮不少。 
和商業部門整閤的矛盾:機器學習科學傢往往醉心於開發最復雜最尖端的模型,以取得機器學習理論上的最佳效果。可是很多機器學習模型的可解釋度並不好,無法讓業務部門對模型進行可視化解讀。雖然機器學習工具眾多,但是能將機器學習模型和可視化係統整閤起來的程序卻非常少。本書所描述的架構和可視化部分會對這個問題進行解答。 
總的來說,企業求生求利的動力意味著開發人員必須短平快地齣結果;機器學習模型效果的不確定性意味著管理人員必須擁抱不確定性;機器學習從業人員的高流動性意味著公司和組織必須采取靈活的開發流程和架構。 
不寫尋常書,不走尋常路 
什麼樣的技術成長道路,纔能讓我們施展自己的纔華,同時快樂地養活自己?什麼樣的職業發展模式,纔能讓我們真正掌握自己的命運,去改變世界,而不是為北京、上海、深圳高昂的房價發愁?什麼樣的架構設計,纔能讓我們的生活迴到朝九晚五的正常模式,能夠每天六點迴傢和傢人吃晚餐,和心愛的人看星星看月亮? 
起初機械工業齣版社華章公司的楊綉國編輯聯係到作者之一彭河森的時候,他是很猶豫的。市場上現在已經有瞭很多優秀的機器學習著作,怎麼還需要我們再寫一本呢?為瞭驗證我們的觀點,我們去豆瓣等網站進行瞭簡單的市場調查,以“機器學習”為關鍵詞搜索瞭已有書評。 
搜索的結果既是意料之中又讓我們大為吃驚。意料之中的是現在市麵上已經存在很多優秀的機器學習相關圖書,對機器學習模型的支撐涵蓋瞭從基本邏輯迴歸到最前沿的深度學習的所有內容。大為吃驚的則有如下兩個方麵。 
讀者胃口很挑:沒錯,說你呢。我們發現眾多機器學習圖書都被打上瞭“太廣、深度不夠”的標簽。這讓我們感覺到壓力巨大,害怕我們的這本書也會打上類似的標簽。 
理論太多、應用太少:我們發現市麵上的書籍大多都是以理論為主,再搭配相應的編程工具。對部署、係統架構設計、後期可視化等重要工作根本沒有提及。而我們預計讀者大多是在校學生,或者是初入職場的機器學習從業人員,他們這個時候最需要的大概不是天花亂墜的理論,而是能切切實實地實現機器學習模型功能的指導。 
有瞭這樣的認識之後,我們決定從應用和架構的角度著手,來寫作本書,並設立瞭如下的目標。 
1. 以機器學習全棧應用能力為目標 
“如果明天你就要被微軟開除,那麼今天你希望學到些什麼?”我們在撰寫這本書的時候一直以這樣的精神來激勵自己。微軟每年7 月到 9 月都會有裁員措施,但這也在不停地提醒筆者要抓緊時間好好寫書,貼近應用,這樣纔能在不幸被裁員的時候養活自己。這樣的精神一直貫穿瞭全書:本書所有的章節都配備瞭實際使用的案例分析,我們的案例分析不隻是針對當前章節所學知識的練習,也涉及實際應用中可能會遇到的“大坑”,以及相應的解決辦法。 
我們力圖通過 Docker 等部署工具的介紹,幫助讀者快速掌握機器學習模型的産業化進程。不管你是就職於大公司,還是自己創業,我們都希望本書的內容能夠讓你快速上綫滿意的機器學習係統,離你的夢想更近一點。 
世界在改變,機器學習也在不停地改變。對於機器學習中的很多重要成員,如建模工具、分布式隊列等,本書都會對其來龍去脈和發展趨勢進行綜述。希望通過這樣的討論,能夠讓讀者建立起對機器學習發展局勢的判斷,在未來的成長中也能獨占鰲頭。 
2. 抓住機器學習主乾,遠離學院派 
現今 Scikit-learn 等軟件已經包含瞭大量的機器學習模塊,其使用方法已經標準化,所以我們不準備在機器學習模型上耗費太多筆墨。例如,在 Scikit-learn 的綫性模型模塊 LinearRegression 中,訓練模型會調用fit() 函數,進行預測會調用predict() 函數。與此同時,Scikit-learn 中的隨機森林模塊 RandomForest同樣是調用以上兩個函數進行模型的訓練和預測的。接口的統一化幫助瞭開發人員進行模塊化開發。如果齣現瞭新的機器學習模型,則隻需要替換一下模型訓練模塊即可。 
另外鑒於現如今網上豐富的機器學習理論資源,我們認為現今的讀者完全有能力對特定的機器學習模型進行自學。本書會以綫性模型為例對 Scikit-learn 的使用進行講解,有需要對其他機器學習模塊進行學習的讀者,也可以很容易地將綫性模型模塊替換成為其他的模塊。 
3. 能讀的代碼,能運行的例子 
“好多技術類書籍我看著看著就暈瞭,代碼根本沒法讀”,我們嚮眾多好友徵詢意見的時候收到瞭這樣的反饋。為瞭增加本書案例的可讀性,我們力求避免代碼的大段堆砌。所有案例的代碼模塊都力求在 20 行以下。 
“好多書的例子都沒辦法編譯”,我們寫這本書的時候也聽到瞭不少朋友的“吐槽”。我們認為能正常運行起來的例子是良好學習體驗的關鍵。為此,本書的所有例子都通過多次可用性測試,並且使用Docker運行,大大降低瞭重復利用的門檻。同時我們將源代碼寄存在 Github 上麵,隨時進行更新排錯,我們也歡迎讀者在上麵添加 Pull Request,完善新內容,與我們進行交流。 
4. 實時股票交易、金融輿情分析實例數據 
有很多 IT 界的朋友經常在工作纍瞭的時候說:“實在不行我就轉行去做金融瞭,”但是行動起來去做金融的人卻甚少。既然在機器學習從業人員的眼中金融行業就像烏托邦那般美妙,那麼為什麼不進去看一看自己是否閤適呢? 
另外,也有一些具有金融背景的友人,他們急切地想要利用機器學習方法來實現自動化交易。每年都有無數高考狀元、名校學子加入外資對衝基金,如果我們能夠架設好一個實時交易投資的平颱,沒準人纔就不會流失到華爾街去瞭,而能為國所用呢。 
對此我們采用瞭美股交易秒級數據作為本書案例的數據。我們收集瞭 2015 年 8月所有標準普爾 500 指數成分股每秒的報價和成交量。這裏的數據主要是以時間序列形式齣現,我們將會嘗試搭建實時機器學習平颱,對這些數據進行存儲、加工分析和可視化,並且對未來若乾秒的走勢進行預測。如果一切順利,我們可以從中得到 Alpha(量化交易中的可以長期盈利的策略),實現盈利。 
在後麵的章節中,我們會從數據分析齣發,由淺到深地利用以上數據進行建模,且在本書結尾時實現對金融數據預測判斷的功能。 
本書的學習方法 
重架構、重設計、重實戰是本書撰寫的指導思想。我們認為優秀的係統設計在於完備的思考和準備,因此本書對計算機編程和機器學習理論隻有入門級的要求。 
1.基礎知識要求 
本書的兩位筆者之中,彭河森是統計學齣身,汪涵是應用數學齣身。但最後都殊途同歸地走上瞭機器學習應用的道路。對於計算機編程基礎,本書的門檻為國內全日製大學本科非計算機專業理科第二年的水平。我們假設讀者具有基本的 Python 編程能力,能在腳本執行和交互情況下運行 Python 程序。本書著重講解架構設計,對麵嚮對象編程、設計模式等課題沒有任何要求。 
對於機器學習理論基礎,本書的門檻為國內全日製大學本科非計算機、統計、數學專業理科第二年的水平。本書假設讀者具有基本的綫性代數知識,對統計推斷和機器學習模型有基本的瞭解。 
2.學習環境配置 
本書假設讀者采用瞭 Ubuntu 16.04 或Mac操作係統。新版 Windows10在本書寫作之時剛剛開始支持 Linux Shell,並且具有瞭 Ubuntu 內核的支持,由於時間關係我們沒有來得及驗證,請讀者謹慎試驗。另外由於我們將在本書中大量使用 Docker,所以相關軟件將會以 Docker 鏡像的形式存在。我們將在相應章節(第6章)中介紹 Docker 及其環境工具的安裝和配置。本書對其他係統軟件的安裝並沒有要求。 
每個章節的實例內容都可以在Github 官方網站上下載,地址為:https://github.com/real-time-machine-learning/。我們將每一個章節的內容都分成一個獨立的 Git 存檔,每個章節之間的程序不會相互關聯,以方便讀者選擇性地閱讀和實踐。 
3. 寫作分工 
本書大部分內容由彭河森、汪涵兩人共同探討、實踐、總結並得齣理論方嚮。汪涵完成瞭實戰數據庫綜述章節(第8章);其他所有章節均由彭河森完成。 
這裏我們嚮本書寫作過程中參與討論和建議的唐磊、陸昊威、高斌、湯宇清、孫寶臣、Luhui Hu、徐易等專傢及友人錶示感謝。特彆感謝嚴老在本書編寫過程中兩次收留作者在傢。      
				
 
				
				
					《數據之舞:賦能決策的實時洞察》  在一個信息爆炸的時代,我們每天都被海量數據洪流所裹挾,然而,數據本身並不能直接轉化為價值。真正的力量在於從中提取實時、有價值的洞察,並將其迅速轉化為 actionable insights,從而在瞬息萬變的商業環境中做齣更明智、更敏捷的決策。《數據之舞》並非一本聚焦於特定技術的“工具書”,而是一次深入探索數據價值鏈核心的旅程,它揭示瞭如何構建一個能夠持續感知、理解並響應數據變化的智能決策體係,從而在競爭激烈的舞颱上保持領先。  本書的核心在於“實時性”與“洞察力”的融閤。我們不再滿足於對過去事件的靜態分析,而是要擁抱那些能夠“聽懂”當下、預測未來的動態數據流。想象一下,當你的業務數據像一場活生生的舞蹈,不斷變化著節奏、鏇律和舞步,如何纔能捕捉到其中最精彩的片段,理解其深層含義,並預測下一個精彩的瞬間?《數據之舞》將引領你走進這場精彩紛呈的舞蹈,讓你掌握解讀數據“語言”的藝術,並學會如何讓這些語言驅動業務的創新和增長。  Part I: 數據之舞的序麯——理解實時洞察的價值與挑戰  在本書的開篇,我們將首先深入剖析“實時洞察”在當今商業格局中的核心地位。我們不再討論“什麼是數據”,而是聚焦於“如何讓數據活起來”。我們將從宏觀層麵探討,為何在金融交易、在綫零售、物聯網監控、客戶服務等諸多領域,實時的決策能力已成為企業生存和發展的關鍵。過時的信息意味著錯失良機,而延遲的響應則可能導緻巨大的損失。  隨後,我們將直麵構建實時數據處理和分析係統所麵臨的諸多挑戰。這些挑戰並非技術上的孤立難題,而是貫穿於數據采集、傳輸、處理、存儲、分析和應用的全過程。我們將討論數據量的爆炸式增長如何考驗著基礎設施的承載能力;網絡延遲和不穩定性如何影響數據的一緻性和時效性;數據源的異構性和質量問題如何增加數據融閤和清洗的難度;以及如何確保係統在麵對突發流量和復雜業務邏輯時的穩定性和可擴展性。此外,我們還會觸及數據安全、隱私保護以及閤規性要求等在實時係統中不可忽視的議題。  Part II: 數據之舞的節拍——構建靈活高效的數據流  理解瞭實時洞察的價值與挑戰,我們將進入本書的核心環節——如何設計和構建能夠支撐實時洞察的靈活高效的數據流。這部分並非關於某種具體的“算法”或“框架”,而是關於“數據流動的哲學”和“係統架構的設計原則”。  我們將首先探討“事件驅動架構(EDA)”在構建實時係統中的重要性。EDA不僅僅是一種技術模式,更是一種思維方式,它將係統的關注點從“狀態”轉移到“事件”。我們將深入理解如何識彆和定義關鍵事件,如何設計高效的事件生産者和消費者,以及如何利用消息隊列(message queues)和事件總綫(event buses)來解耦係統組件,實現鬆耦閤和高可用性。  接著,我們將討論“流式處理(stream processing)”的核心概念和關鍵技術。我們不再將數據視為靜態的批次,而是將其看作連續不斷的河流。我們將探索如何利用流式處理引擎來實時地過濾、轉換、聚閤和分析數據,從而在數據産生的同時就提取齣有價值的信息。這包括對窗口(windowing)機製、狀態管理(state management)以及容錯(fault tolerance)機製的深入理解,確保數據在流動過程中不丟失、不重復,並且結果的準確性能夠得到保障。  此外,我們還將審視“數據湖(data lake)”和“數據倉庫(data warehouse)”在實時數據架構中的演變和融閤。我們認識到,並非所有數據都適閤被立即轉化為結構化的報錶,而實時係統也需要能夠存儲和訪問大量的原始數據以供進一步的探索和分析。因此,我們將探討如何構建一個既能支持低延遲的流式查詢,又能存儲海量原始數據的混閤式數據平颱,從而滿足不同層級的洞察需求。  Part III: 數據之舞的鏇律——從數據中奏響智能決策  僅僅擁有流動的數據流是不夠的,我們還需要從中奏響“智能決策”的鏇律。《數據之舞》將引導你超越簡單的實時數據展示,而是去理解如何將數據轉化為具有前瞻性和指導性的洞察。  我們將深入探討“實時分析(real-time analytics)”的豐富內涵。這包括對實時指標(real-time metrics)、實時儀錶盤(real-time dashboards)以及實時告警(real-time alerts)的設計和實現。我們關注的不僅是數據的呈現,更是如何通過可視化的方式,將復雜的數據轉化為易於理解的趨勢和模式,從而幫助決策者快速抓住關鍵信息。  更進一步,我們將觸及“實時預測(real-time prediction)”的藝術。這並非遙不可及的未來,而是基於當前數據流,對未來可能發生的事件進行即時推演。我們將探討如何將一些基礎的預測模型(如趨勢外推、異常檢測)部署到流式處理管道中,從而實現對風險的提前預警、對機會的即時捕捉。例如,在電商場景中,當用戶瀏覽行為發生變化時,係統能否立即預測其購買意嚮並推薦最相關的商品?在金融領域,當市場數據齣現異常波動時,係統能否立即識彆潛在的欺詐行為?  同時,我們還會探討“實時推薦(real-time recommendation)”和“實時個性化(real-time personalization)”在提升用戶體驗和業務效率方麵的重要作用。當用戶與平颱進行交互的每一刻,係統是否都能理解其意圖,並提供最符閤其需求的內容或服務?這需要對用戶行為進行持續的、實時的捕捉和分析,並將其與相應的個性化模型相結閤。  Part IV: 數據之舞的指揮——保障係統的韌性與演進  一場精彩的舞蹈離不開精準的指揮和持續的排練,《數據之舞》的最後一部分將聚焦於如何確保整個實時數據係統的韌性、可維護性和持續演進能力。  我們將討論“可觀察性(observability)”在實時係統中的重要性。如何確保我們能夠清晰地瞭解係統內部的運行狀況?這包括對數據流的監控、對處理延遲的追蹤、對係統錯誤的檢測以及對資源利用率的評估。我們將探討如何構建有效的監控和告警體係,從而在問題發生的第一時間就能得到通知,並迅速定位和解決。  此外,我們還將關注“係統彈性和容錯(resilience and fault tolerance)”。在麵對硬件故障、網絡中斷或軟件Bug時,係統如何能夠自動恢復,並盡可能地減少對數據處理和決策的影響?我們將探討各種冗餘(redundancy)、故障轉移(failover)和數據恢復(data recovery)策略,以確保係統的健壯性。  最後,我們還會探討“持續集成與持續交付(CI/CD)”在實時數據係統中的應用。隨著業務需求的變化和技術的發展,我們的數據係統也需要不斷地更新和優化。如何能夠安全、高效地將新的功能和改進部署到生産環境中,同時又不影響正在運行的實時數據流,是至關重要的。  《數據之舞:賦能決策的實時洞察》不僅僅是一本關於技術的書籍,它更是一次關於如何重塑企業決策模式的思考。它將幫助你理解,數據不再是冰冷的數字,而是充滿生命力的語言,通過學習如何與這些數據共舞,你將能夠揭示隱藏的機遇,應對未知的挑戰,並最終在信息時代的浪潮中,奏響屬於你自己的、充滿智慧的決策樂章。