推薦這六本機器學習的經典書籍,並詳細說說它們的優缺點

盟(dataunion.org)是一個專注於數據應用的技術型社區,致力於成為培養與發現「數據科學家」的黃埔軍校。數盟主要關注大數據、數據挖掘、數據分析、數據可視化等領域,倡導「數據價值的發現與應用」,助力企業、個人提升價值。

@9.12數盟分享名額已滿,報名截止~請已報名的小夥伴規劃好路線

來自永遠的幻想的投稿,轉載請註明出處:微信公眾號數盟

萬事開頭難。第一本該介紹哪個,或者第一本該看哪個,實在是不好講。即使是Amazon上的書評,老外也是理工科兩極分化嚴重,每本都有很多人說適合入門用的,也有很多人說不適合的。但是個人認為,第一本一定要能用最清晰的語言,最簡單的例子把盡量多的核心概念、術語講在前面,最好還要有盡可能多的圖,這樣初學者才能「不怵」這麼多概念名詞。有了基本概念之後然後再後面反復涉及這些概念,不斷深化理解。最後再能覆蓋一定的廣度和前沿。

因此:第一本書,我推薦《Pattern Classification》。

引進的中文版和影印版,和原版都是第2版,但是英文原版後來多次印刷,改正了很多錯誤。

優點:

1.版本多,好找。不解釋。

2.圖多,也不解釋。

3.一開始就用簡單例子把模式識別的流程,和基本概念比如貝葉斯推斷、極大似然等等基本概念,以及評價分類能力常用的接收機特性曲線(Receiver Operating Characteristic curve ROC)等等概念提出來了,講得比較清楚。即使一開始看不明白,但是你知道有這些玩意,以後會多留心。

4.涉及面比較廣。雖然成書比較早了第二版是2000年,第一版居然是1973年。但是覆蓋的算法和領域比較廣泛,不只限於模式識別了,作為概覽很不錯了。

5.有深度。很多加*的章節之外,還有涉及哲學思想的評註章節,「發人深省」四個字並不為過,而且值得「反復回味」:比如「奧康的剃刀(Occam’s razor)」法則,「沒有天生優越的分類器」法則,等等等,這個中譯本的序言里也提到了。

6.入門的數學要求不高。這點對工科出身的人入門很重要。個人感覺學過概率和線代,入門就夠了。當然,隨機過程啊,矩陣論啊當然難免會涉及到,但是作者已經盡量淡化數學要求了。

問題和不足:

1.圖註簡略。圖雖多,有時還是難免不懂。

2.有難度。公式不少,而且有時跳步,夠工科生啃的。每個章節都有引申部分。傳說有的學校前三章就能講2個月以上的。

3.適合理解理論思路思想,但是想對照編程實踐,有點難度。雖然有一些算法的偽代碼,但是個人覺得還是太簡略了。主要是對數據的描述太少。不過,好消息是——現在有配套的Matlab教程了!壞消息是——好像國內沒引進.(偶爾說話大喘氣一下,哈哈)

感覺如果不是特別有錢,特別癡迷這個,還是算了。別的書有白提供程序的(再次大喘氣)。

4.偏預測,輕數據挖掘;在預測里偏分類,輕回歸。這倒不奇怪,人家書名寫得明白。

但是,即使想做數據挖掘的,我還是推薦先看這個書。因為首先入門階段,基本概念都是差不多的,而且後面講到算法性能評價、選擇標準等等思想確實值得領會。

這本主要用來領會思想思路,先不要執著於看懂每行公式,每張圖。

第一本大概就這樣。

後面就不分先後了。因為有的重理論,有的重應用,而且每個牛人都有自己擅長和生疏的領域,能在自己擅長的領域把各種算法串成脈絡,講清楚發展過程和區別聯繫已經很難得了。

推薦二《Artificial Intelligence:A Modern Approach》

這次先貼兩本離題稍遠點的,作為開闊知識來用的參考書。

《Artificial Intelligence:A Modern Approach》

中文和2種影印都是原書第2版,02年出的,兩種影印我比較過內容沒區別,但是清華的紙質稍好,但價格貴好多。中文和人郵的影印圖書館好找,但是市面上好像沒有了。

現在原版是09年底剛出的第3版了。但看書評,好像變化不是特別大,有些有第2版的人覺得虧了。

優點:

1.涉及面特別廣。從走棋的算法,到語義邏輯分析,到智能系統……並不局限於概率統計類的方法,無所不包。

2.很多AI方面的歷史人物和典故。從萊布尼茨時代的機械計算機器,到圖靈,到50 60年代某人第一次寫了個什麼算法。怎麼說呢,當故事書看也行了。

3.敘述比較清楚。

問題:

1.有點散。各個章節之間有時聯繫不是那麼大,其實為了做到包羅萬象,散是難免的。

2.Introduction 而非Reference。所以指望看這個書完了去照著寫算法,就別想了。

3.第2版里沒涉及支持向量機(Support Vetor Machine SVM)。這個即使作為02 年出的書也不應該了。不過現在SVM基本是大路貨了,到處都是(SVM有點走當年神經網路最後爛大街,無人問津的趨勢)。

4.太厚,快速翻閱即可。中文700多頁,英文1100多頁。因為畢竟大家有各自專業背景,所以挑前幾章+自己相關領域的章節,瀏覽即可,其他當故事書看,就當做專業英語的閱讀資料吧。

總之,適合沒接觸過的這方面的人入門用。但是個人感覺一個是有點散,一個是概念太多,沒有突出概率統計。感覺很容易迷路似的,所以第一本沒推薦這個。但N多學校都用這個做教材,不是沒道理的。

推薦三《Nonlinear Time Series: Nonparametric and Parametric Methods》

這本是兩個中國牛人寫的。范劍青、姚奇偉.

這本雖然專講時間序列,但是覺得自動化之類工科出身的人往機器學習數據挖掘方面轉的話,這樣一本由數學家寫的數學味濃一些的書還是很有必要的。特別是中國人寫的,所以在大牛在國內的時候,還有機會當面請教。

優點:

1.背景知識適合自動化、通信這些專業的。一般電子類的都會學點現代數字信號處理比如Wiener最佳濾波,Kalman濾波之類,已經了解ARMA模型了,這樣看這個書可以了解這些方法的發展和引申。雖然不見得以後真的去做金融之類,但是用自己熟悉的背景知識去入門,總比兩眼一抹黑鑽進去強。其實「在工言工」,看成是在講高級濾波算法的話,能不能用在控制系統里呢?反正俺那本已經被搞控制的同學借去鳥。

2.圖表例子多,程序提供下載。雖然是S-plus/R寫的,可能工科的沒接觸過R,但是很容易上手。

3.數學味,不解釋。

問題:

1.領域比較專門。主要適合經濟數據,金融數據這些。當然書里也舉了生態學上的例子。

2.比較難懂。一個是數學味,一個是很少分析算法細節,公式推導都比較簡略,要配合參考文獻和程序。

但是之所以推薦這本,倒不是說里面講到的那些方法。而是想:

1.介紹兩位中國牛人,有機會見到可以請教。

2.通過這書里的例子,了解點R語言。開源的數學軟體,是數學家用的,上面有很多最新的ML算法。假如你早已熟悉了工程味的MATLAB,現在可以體味一下R簡化的都是哪些地方?在思路和實踐上,都要習慣不斷切換工科和理科兩種方式。試試理科的工具,也就能多找找感覺。

3.要適應數學家的表達。畢竟這個領域的算法都是人家提出來的,看論文基本就是在膜拜統計學家了。通過這個也體會一下同樣是ARMA模型,理科是怎麼思考的。不要再滿足於當初學信號處理的時候,好像學了個Levinson-Durbin,Kalman遞推公式就萬事大吉。

推薦四《Pattern Recognition and Machine Learning》

最後3本,打算先介紹2本貝葉斯方法為主的。下一次再用我最喜歡、也看得最仔細的《the Elements of StatisticalLearning》(EoSL)壓軸。

作者個人網站:Christopher M. Bishop 上面有題解。這本國內好像沒引進。但是人大經濟學論壇和CSDN上有PDF下載,淘寶上好像也有賣列印版的。

優點:

1.comprehensive。即使是打12星的讀者,也承認這書相對其他同類書里算是好讀的了。畢竟,讓沒接觸過的人一下子把腦子切換成用概率來建立數學模型,描述數據,不是太容易的。能用盡量清楚的語言描述清楚已經很顯示作者功力了。

2.權威性和讀者口碑。作者個人網站上有他的其他著作,不贅述了。關於口碑,不止一個讀者在其他書的書評里提到這本《PRML》和之前第一本介紹的《Pattern Classification》以及下次再說的《EoSL》,並稱為3本最pop的ML書。而Pattern Classification 的第1版是1973年,第2版是2000年;《EoSL》第1版是2001年,第2版是2009年;都比2006年才出版的《PRML》出得早。能和這2本並稱,可見這本書的在讀者心中的地位。

插一句:這種700多頁難啃、但又必須通讀的理論書,我還是覺得讀pop的比較放心。即使暫時讀不懂,也不要緊,反正硬讀下去就是了,準沒錯。我不是太敢去碰生僻冷門的著作,一個怕讀半截發現不行,浪費時間,一個是怕讀完了,結果把路子走野了。

缺點:

1.缺實際例子。Amazon上給1、2星的大多是因為這個原因。好幾個讀者說:不要著急,08年出配套的MATLAB示例。結果到現在作者個人網站上也只字未提。

2.主要是以貝葉斯推斷的框架來描述問題的。有什麼樣的世界觀就有什麼樣的方法論,對其他方法介紹得就很少了。難怪不止一個讀者說:This books should be called 「My personal unifying theory of Machine Learning and Pattern Recognitionusing the Bayesian Approach」.

3.數學要求+textbook。因為缺實際例子,所以圖就淨是示意性質的簡單圖了。而貝葉斯方法少不了大量的公式和積分符號,這些是工科人最頭痛的。最喜歡看能編程做到的偽代碼,實在沒有,看見sigma求和符號也比積分號舒服點,起碼知道這就一個for循環的事。

沒把這本放第一本的原因主要就是12了,其實2也不能算缺點。

推薦五《Semiparametric Regression (Cambridge Series in Statistical and Probabilistic Mathematics)》

本書網站上有MATLAB代碼。網上能找到PDF版下載。

這本看得不仔細,稍微簡單說說。缺點是03年出的,稍嫌老了。而且是專以回歸角度來敘述的,以ML整個領域來說,涉及面不是太廣。

優點是comprehensive。我是作為《EoSL》的第5、6章的補充來看的,對Spline有任何不明白的地方就看這個書。

這次就這樣吧,下次最終章詳細來說壓軸的《EoSL》。

推薦六《EoSL》:一副機器學習數據挖掘的腳手架

正式開始之前,先擺出網友提到的問題:

「我現在混飯吃的地方,管這一堆東西叫DM;我們用的時候大都是立足於現成的軟體包。

我的基本感覺是,這堆東西,你要是就是揀點出來用用,似乎不難;尤其是已經有了個現成的軟體包,而且你的目的和任務已經由於歷史性的原因非常明確了。

我的理解,如果冒昧地說一下,永遠兄的環境,似乎是要從零開始-當然基本的理論和算法已經在那兒了,搞出個應用於某個任務的新"程序"。如果方便的話,能不能說說你要解決的問題都是哪些方面的。

我的疑惑在於,一直不是很清楚基本的框架(Framework):要敲釘子找榔頭、要卸螺絲拿扳手,看不到這些技術之間的聯繫。與此相關的是,這里涉及到計算機、數學、統計(經濟、生物、行銷等若干學科都有自己的概念/名詞體系)、自動化,我的理解是各個學科里面拿出一塊或幾塊,然後放在了一起,到底是哪幾塊、是怎麼湊在一起的(也許根本就沒湊在一起)?找了些書看,看著看著就被繞進去了。

不知永遠兄和其他各位,如果有空的話,能否釋疑解惑一二,我先謝謝大家。」

其實前面帖子的回復里我提到一點了,我現在主要是做圖像影片中的目標檢測、跟蹤。應用環境的軟硬體限制了,肯定沒法用現成的軟體包的,肯定是要自己寫程序。而且要兼顧ROC和運行時的時間、空間複雜度。

當然還幹些別的,個人興趣也不止於此,比如這幾天就去鼓搗股指去了,才一直沒動筆。

關於框架,其實是我最想說,但是也最難下筆的問題。

其實學任何一個專業,如果沒有一個高屋建瓴的視角看待這個學科,如果心中沒有一個脈絡把「榔頭,扳手」這樣的「知識點」串成一個體系,那不管是復習應付考試還是想在實際中把知識應用起來,都很困難的(沒有體系純把知識點都硬背下來,太難了)。

這就是當年陸九淵在鵝湖之會時說朱熹理學是格物級別,是支離。反過來,如果只有理論,不會用「榔頭,扳手」,那就是空疏。(關於這個問題可以去看晨楓老大的關於工程科研和工業實踐的脫節。)

另外,我現在還有一個越來越深的體會就是:有什麼樣的世界觀才會有什麼樣的方法論。封建社會「皇帝輪流做」的世界觀只能建起聚義廳和分金亭,絕不可能建起工農蘇維埃政府和銀行。如果想自己針對具體問題提出新方法,沒有一個世界觀是絕對不行的。

這個系列寫到後來就想開始寫框架,但是首先,講框架離不開具體算法和應用背景,那就難免要列列圖表公式什麼的,而網文貼圖麻煩,「此處並非講話之所」;再一個,個人水平有限,公式圖表還是得去抄書,然後再列出處,反倒不如直接把出處寫清楚點,寫寫書評。第三,俺平時很喜歡東拉西扯的跑題,思路也比較發散(人如其ID),也不太想寫得太規矩,還是隨便一點。

我就用這本書,借著牛作者的花來獻獻佛,說說自己對的「體系」理解吧。

寫這麼多廢話,主角還沒上場―。―,趕緊有請:

《The Elements of Statistical Learning: Data Mining, Inference, and Prediction, Second Edition (Springer Series in Statistics)》

本書網址是我見過的對一本書來說最全面的網站,不但有R程序,還有本書第2版PDF下載!還能由此找到作者個人發表的文章、講這個課用的講義、幻燈片、留的作業等等等。

優點:

1.思路和動機。Amazon有讀者覺得這書不好,僅僅是作者的研究個人研究筆記而已。沒錯,這是一本三個作者把70年代以來他們的研究軌跡串起來的書。

對於作案水平高的老大,能毫無保留把作案手法給小賊們講清楚已經是難能可貴了。而再能進一步交待清楚自己作案動機、怎麼逐一發展出的作案手法的心得,這可是很稀有的存在啊。

不得不提到厚積薄發老大的【原創】結束語+全文鏈接:那些沒有拆掉的腳手架們。(全文完),在里面老大提到:

「盧梭曾寫過《懺悔錄》,剖析自己的心路歷程。我讀數學家傳記,讀到高斯時,有後人抱怨,「他建立了一座宏偉的數學宮殿供我們敬仰,卻在宮殿建成後把腳手架拆得幹乾淨淨,讓我們無從知道他是怎麼做出那些偉大的發現的。」

可以說,這本書就是三個作者給數據挖掘,機器學習這個宮殿搭的一個腳手架。處處可見作者思路的軌跡,是怎麼想出那麼多方法的。

我本不想細說這個,正如Amazon上讀者說的,這個腳手架的個人色彩濃厚了點,機器學習領域方法太多,走作者這條路未必對就真對路。但是既然南寒問到了,那就提作者背背書吧。

不過這麼一來,一篇肯定就放不下了,講到哪里算哪里,多了就再起新篇吧。

作者出發點是「維數災難(the curse of dimensionality)」。

如果用「少量的訓練樣本在高維特徵空間中分布變得稀疏,導致算法缺乏泛化能力」這樣的話來解釋,我想任何人第一次聽說的時候絕對不會明白。我即使現在明白了,也還是覺得這種表達太裝13了,太繞。那就換一種角度來說。

解方程的時候,理論上方程個數N只要等於未知數個數p,那麼就可以了。但是實際中考慮的誤差之類的,方程數要比未知數多,才能保證求出的解是「好的」。總是希望最好是「所有可能的樣本」拿來都能套用這個解。也就是說是全局最優解。

「維災難」是說,隨著未知數個數增加,需要的方程個數增加得大得多。具體到機器學習上1個訓練樣本就是1個方程,那麼維數p一高,你的訓練樣本N再多也是「不夠用」的,即使N>>p。

解決方法就倆字——想辦法「降維」。降低描述每個樣本的特徵向量的維數p,也就是降未知數的個數。這樣方程數量不變的情況下,未知數少了。

除了維災難,還有一種情況,就是未知數反過來比方程多的時候,而且是p>>N。比如DNA微陣列分析、語義分析這些。以DNA來說,對某種癌症,上萬的基因的可能致病作用是未知數(如果考慮不同基因組合作用,就更多了),可病人樣本的總是有限的,有時就是要在幾千個,幾百個的樣本上進行分析,希望能「挖掘」到放之四海而皆準的原理來。這時候想把p降到<N,實在不現實。

而方程太少,參數太多,肯定是無窮多種解啊,可是致病機理一定是確定的。想得到唯一解怎麼辦呢?嗯,加約束條件

我概括作者研究的總方向就是一個:線性模型+罰約束

作者在第3章開始講線性回歸,然後第4章線性分類。從最基礎的最小二乘解開始,然後是對解加2范數約束得到Ridge Regression嶺回歸;再到加1范數的約束,於是有了Lasso,LAR;然後是1 2 范數的組合Elastic Net等等等……。一開始讀過,覺得這些沒什麼特別之處啊,說一千道一萬,不就是個線性方程組的解麼,能有什麼意思?就像《地道戰》里的牛娃說的:「鼓搗這玩意,能把黑風口的炮樓挖掉麼?」Amazon也有讀者覺得前幾章有點浪費篇幅。除了因為覺得線性回歸、分類太簡單,還有擠占別的章節篇幅的嫌疑,後面再說。

但是越往後讀,就越要經常往回翻第3章。

與其說這是作者的寫作方式,倒不如說作者的研究路徑就是這種不斷「回溯」的過程(借用軟體工程里的話)。具體地說:作者就是用這種不斷應用「線性模型+罰約束」的思想,串起來一系列的方法:

第5章從樣條到加罰平滑樣條和小波,這就到了kernel的思想:經過非線性的核/基函數作用,非線性問題又變成了線性問題。

這就到了第9章的廣義加法模型:樹和多元加法樣條。

有了廣義加法模型,第10章作者用「逐次向加法模型添加非線性基函數,以使指數形式的損失函數變小」的角度分析了Adaboost,boosting,以及提出了MART。

然後到了第15章Random Forest。這章很短,但是之前一路看過來之後,覺得就是這麼簡單而已。

16章的Ensemble Learning也是如此,開頭的ECOC虛晃一槍。後面仍然使用boosting 、Random Forest的思路,用線性組合+罰來集成多分類器。

最後的18章,推廣到p>>N的情況下的特徵選擇問題。作者展示了在DNA微陣列分析問題上,把之前各種方法隨便組合起來一下(比如加罰的logistic 回歸,線性回歸+PCA = 監督PCA),都有不俗表現。

通讀此書之後讓人覺得是某位大俠,從最樸實無華的招式起手,初覺平淡無奇,但是後面不斷深入、不斷變化,到最後的眼花繚亂,屢出奇招。而每次變招都是從原來那最簡單的招式開始(比如太極拳,就是攬雀尾啊,那幾招)。這幾章構成了一個連貫的思路,作者們30多年來的成果主要也集中上面這幾章。

其他的章節要麼是為了掛靠在這個思路下面(4線性分類),要麼是為了講這個思路不得不提到(6核平滑、7模型選擇、13原型方法和近鄰、14無監督學習)。其中的7、14也是非常重要的章節。

剩下的就比較雞肋了,應該是作者不擅長或者不care,但是因為寫書還是放進來的(8 貝葉斯推斷、11神經網路、12支持向量機、17圖模型)。僅以這些方法本身論,都是能單獨寫一本書的,也應該算是「必知必會」的知識點了,但是本書中篇幅和內容上都比較簡略了。

作者簡介:永遠的幻想,北京,博士畢業,關注計算機視覺、金融時間序列、兵棋推演中的機器學習、數據挖掘、並行計算。blog:http://xuanmanstein.wordpress.com/(需梯子)

關於我們 ID:DataScientistUnion

數盟網站:www.dataunion.org

數盟微博:@數盟社區

數盟微信:DataScientistUnion

數盟【大數據群】272089418

數盟【數據可視化群】 179287077

數盟【數據分析群】 174306879

(長按可關注)


點擊[閱讀原文] 了解9.12數盟聚會


閱讀原文


關於作者:
數盟(數據科學家聯盟)隸屬於北京數盟科技有限公司,數盟致力於成為培養與發現「數據科學家」的黃埔軍校。數盟服務包括:線下活動、大數據培訓。官網:http://dataunion.org,合作:[email protected]

微信號:DataScientistUnion