最近半個月開始研究Spark的機器學習算法,由于工作原因,其實現在還沒有真正開始機器學習算法的研究,只是做了前期大量的準備,現在把早年學習的,正在學習的和將要學習的一起做個梳理,整理一個Spark機器學習完整流程。本文推薦的書籍注重通俗和實戰。
基礎知識
Linux基礎知識和實戰
Linux的學習推薦《鳥哥的Linux私房菜》基礎篇,這本書是成千上萬Linux學習者的入門書籍,詼諧,幽默,深刻,注實戰。我早年看的時候是第三版,今年6月份鳥哥已經更新到了第四版。
繁體網址:http://cn.linux.vbird.org/
簡體網址:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/
網絡知識
在集群運維時,尤其是生產環境下,各個節點之間的網絡問題,至關重要,推薦《鳥哥的Linux私房菜》服務器篇和《Wireshark網絡分析就這么簡單》,后者的作者是EMC網絡存儲部門的主任工程師,主要以自己工作中遇到的各種難題,通過調侃的方式,介紹了網絡的基礎知識(很遺憾,我還沒有讀完)。
Hadoop基礎知識和原理
Hadoop的學習我早年看的書是《Hadoop權威指南》,這本書不推薦,因為確實不好啃,翻譯的水平有限,對于初學者來說,容易放棄,我開始學習Hadoop時,應該是1.0時代,這時的三架馬車是HDFS和MapReduce,HBase,這幾年隨著Hadoop的在業界的迅速發展,進入了2.0時代,集成進了雅虎的Yarn資源管理器。當然不管如何發展,HDFS和MapReduce還是Hadoop的核心,最好動手去搭建Hadoop集群(前面Linux的學習在這里就能發揮作用了)。
Spark基礎知識和原理
Spark的學習推薦《Spark快速大數據分析》和官網指南,這本書是Saprk開源社區的幾位核心貢獻者寫的,讀起來很流程,其中RDD章節是核心,相對于MapReduce每次中間過程都將數據寫入硬盤,IO消耗大,RDD則是放在了內存中,速度不言而語(其實就是犧牲內存換速度)。當然最好也去動手搭建集群,這里可以參考我之前寫的博客
集群搭建:http://www.lxweimin.com/p/4b8b3e2ffe84
開發實例:http://www.lxweimin.com/p/eb6f3e0c09b5
開發語言
在機器學習領域的語言,一定是一門函數式編程語言,其次有強大的第三方科學計算庫。
Python
在科學計算領域,Python無疑是第一語言,Spark也是支持Python的,Python的第三方庫有NumPy(數值處理庫)、SciPy(數學符號計算庫)、matplotlib等。
Scala
Python作為科學計算領域的第一語言,有著龐大的科學計算庫,但是,我個人選擇Scala語言的原因有兩個:一,Scala語言的函數式設計更好,二,Scala是運行在JVM上的,在生成壞境下速度優勢明顯。
基礎語法的學習推薦:http://twitter.github.io/scala_school/zh_cn/ (Twitter的Scala課堂)
推薦視頻1:http://www.imooc.com/learn/613 (慕課網scala視頻教程),這個視頻是下面英文版視頻的簡化版,每集7分鐘左右,主要理解Scala函數式編程的思想。
推薦文章:https://www.zhihu.com/question/28292740 (函數式編程思維),和上面的視頻一起看,基本上是scala函數式編程的精髓。
推薦視頻2:https://www.coursera.org/specializations/scala (Scala 函數式程序設計原理),視頻是scala語言的設計者Martin Odersky教授講解的,有中文字幕,這個是深入學習Scala視頻。
理論知識
線性代數
如果不熟悉線性代數的概念,要去學習自然科學,現在看來就和文盲差不多 ————瑞典數學家Lars Garding
這句話可能有點過,但至少是機器學習的基礎。
推薦視頻1:麻省理工學院Gilbert Strang教授的線性代數課 ,視頻地址:http://open.163.com/special/opencourse/daishu.html (已看到19集),上學階段未理解的很多概念,如矩陣列空間,零空間,和行空間及線性變換,這門課講的很好。
推薦視頻2:線性代數的本質 視頻地址:https://www.bilibili.com/video/av6731067/ ,B站翻譯的視頻,作者結合動畫形式從幾何角度講解線性變化,矩陣,行列式,向量空間等意義。講的非常好,謝謝翻譯作者。
推薦文章:《線性代數的本質》 一篇博客,和上面的視頻結合這看。
推薦書籍:David C.Lay 教授的《線性代數及其應用》,這本書對于矩陣的線性變化解釋的很好,是一本很好的工具書,可以隨時翻。
Spark高級數據分析和機器學習
下面才是真正的機器學習開始。這里推薦《Spark高級數據分析》和《Spark機器學習》
前者的作者是Cloudera公司的數據科學家,主要以目前業界的案例分析。在理解的基礎上最好去動手實踐,我個人在集群上運行了第八章的案例,可以參考我之前寫的博客:利用Docker搭建大數據處理集群。 后者還沒讀。
機器學習才剛開始,后續會更新。