這篇文章的確很難寫,因?yàn)槲蚁M嬲貙Τ鯇W(xué)者有幫助。面前放著一張空白的紙,我坐下來問自己一個(gè)難題:面對一個(gè)對機(jī)器學(xué)習(xí)領(lǐng)域完全陌生的初學(xué)者,我該推薦哪些最適合的庫,教程,論文及書籍幫助他們?nèi)腴T?
資源的取舍很讓人糾結(jié),我不得不努力從一個(gè)機(jī)器學(xué)習(xí)的程序員和初學(xué)者的角度去思考哪些資源才是最適合他們的。
我為每種類型的資源選出了其中最佳的學(xué)習(xí)資料。如果你是一個(gè)真正的初學(xué)者,并且有興趣開始機(jī)器學(xué)習(xí)領(lǐng)域的學(xué)習(xí),我希望你能在其中找到有用的東西。我的建議是,選取其中一項(xiàng)資源,一本書,或者一個(gè)庫,從頭到尾的讀一邊,或者完成所有的教程。選定一個(gè)后堅(jiān)持學(xué)習(xí),等到完全掌握以后,再選取另一個(gè)資源按同樣的方法學(xué)習(xí)。現(xiàn)在開始吧。
程序庫
我信奉這么一句話:學(xué)到一定程度后,你需要開始嘗試做事。這就是我怎么學(xué)會編程的,并且我確信其他大部分的人也是這么學(xué)會的。要知道自己的極限,激發(fā)自己的能量。如果你知道怎么編程,你就能快速深入到機(jī)器學(xué)習(xí)的學(xué)習(xí)中。然后制定一個(gè)計(jì)劃,在你實(shí)現(xiàn)一個(gè)工程系統(tǒng)前學(xué)習(xí)完這項(xiàng)技術(shù)相關(guān)的數(shù)學(xué)知識。
找一個(gè)庫,先閱讀其文檔,然后就可以照著指南嘗試做一些事情了。以下是最優(yōu)秀的機(jī)器學(xué)習(xí)庫開源代碼。我并不認(rèn)為這些庫適用于你的工程項(xiàng)目,但是它們非常適合學(xué)習(xí),開發(fā)及建模。
先選擇一個(gè)你熟悉的語言對應(yīng)的庫,然后再嘗試其他更功能強(qiáng)大的庫。如果你是個(gè)很好的程序員,你應(yīng)該知道你可以很容易的從一種語言切換到另一種語言。程序邏輯都是一樣的,只是語法和API的區(qū)別而已。
R Project for Statistical Computing(用于統(tǒng)計(jì)計(jì)算的R工程):這是一個(gè)軟件環(huán)境,采用類lisp腳本語言。提供了你想要的所有統(tǒng)計(jì)相關(guān)的東西,包括非常贊的繪圖。CRAN(第三方機(jī)器學(xué)習(xí)包)的機(jī)器學(xué)習(xí)分類下有該領(lǐng)域?qū)<覀兙帉懙拇a,最新的接口方法和其他你能想到的功能都可以在上面找到。如果你想快速建模并開發(fā),R工程是必學(xué)的。不過你不一定從一開始就從這個(gè)工程學(xué)起。
WEKA:數(shù)據(jù)挖掘平臺,提供了API,一些命令行及整個(gè)數(shù)據(jù)挖掘生命周期的圖像化用戶接口。你可以準(zhǔn)備數(shù)據(jù),進(jìn)行可視化開發(fā),創(chuàng)建分類、回歸、集群模型和很多內(nèi)嵌及第三方組件提供的算法。如果你需要基于Hadoop平臺工作,那么Mahout就是一個(gè)很好的機(jī)器學(xué)習(xí)java框架,這個(gè)框架和和WEKA不相關(guān)。但如果你是大數(shù)據(jù)和機(jī)器學(xué)習(xí)的新手,那么還是堅(jiān)持看WEKA,記得一次只學(xué)一樣?xùn)|西。
Scikit Learn:機(jī)器學(xué)習(xí)Python庫,依賴Numpy和Scipy庫。如果你是Python或者Ruby程序員,這個(gè)庫比較合適。該庫接口友好,功能強(qiáng)大,且有完善的文檔支持。如果你想嘗試其他東西,那么Orange將是一個(gè)不錯(cuò)的選擇。
Octave:如果你熟悉MatLab或者你是Numpy程序員且正嘗試尋找一些不一樣的東西,那么可以考慮Octave。它提供了跟Matlab相似的數(shù)據(jù)計(jì)算環(huán)境,并且可以很簡單的通過編程解決線性及非線性的問題,這些問題是大部分機(jī)器學(xué)習(xí)算法的基礎(chǔ)。如果你有工程師背景,你可以從這里開始學(xué)起。
BigML:可能你不想做任何的編程,那么你可以全部使用工具,比如WEKA。你還可以更深一步并使用像BigML一樣的服務(wù),BigML提供了web版的機(jī)器學(xué)習(xí)接口,開發(fā)及創(chuàng)建模型可以全部在瀏覽器上完成。
選取其中一個(gè)平臺用于機(jī)器學(xué)習(xí)的實(shí)戰(zhàn)練習(xí)。不要只是看,要做。
視頻課程
現(xiàn)在很流行通過觀看視頻來學(xué)習(xí)機(jī)器學(xué)習(xí)。我在YouTube和VideoLectures.Net上看了很多機(jī)器學(xué)習(xí)的視頻,看視頻的風(fēng)險(xiǎn)在于你很容易只是看而不會去實(shí)踐。我建議在看視頻的時(shí)候一定要做好筆記,即便之后你很快就會把筆記扔掉。同時(shí)建議你不管在學(xué)什么,一定要去動手嘗試。
坦白來說,我看過的視頻中,沒有哪個(gè)視頻是特別適合初學(xué)者的,我指真正的初學(xué)者。他們都是基于讀者有最基本的線性代數(shù)和概率理論知識的假設(shè)。斯坦福大學(xué)Andrew Ng 的教程可能是最適合用于入門的了,另外,我推薦了一些一次性視頻。
Stanford Machine Learning(斯坦福機(jī)器學(xué)習(xí)):通過Coursera可以獲取到,Andrew Ng主講。除了招生,你可以在任何時(shí)間看到所有的課程,并且從Stanford CS229 course(斯坦福CS229課程)上下載到所有的講義和課堂筆記。課程包括家庭作業(yè),測試。課程集中在線性代數(shù)上,使用Octave環(huán)境。
Caltech Learning from Data:可以在edX訪問到,Yaser Abu-Mostafa主講。所有的課程和材料在CalTech網(wǎng)站上都可以獲取到。和斯坦福課程一樣,你可以按你自己的節(jié)奏來完成家庭作業(yè)和任務(wù)。它覆蓋了和斯坦福類似的課程,然后在細(xì)節(jié)上有一些深入,并且用了更多的數(shù)學(xué)方面的知識。家庭作業(yè)對初學(xué)者來說可能太難了。
Machine Learning Category on VideoLectures.Net(VideoLectures.Net上的機(jī)器學(xué)習(xí)分類):初學(xué)者很容易沉溺于海量的內(nèi)容中。你可以找尋一些看起來比較有趣的視頻,然后嘗試看看。如果不是你現(xiàn)階段能看懂的,就先放放。如果你看著合適,就記筆記。我發(fā)現(xiàn)我自己總是不斷的找尋自己感興趣的標(biāo)簽,然后最終選擇了完全不同的標(biāo)簽。當(dāng)然,看看該領(lǐng)域?qū)<艺嬲鞘裁礃拥囊餐玫摹?/p>
“Getting In Shape For The Sport Of Data Science” – Talk by Jeremy Howard:和一個(gè)本土R用戶團(tuán)隊(duì)關(guān)于機(jī)器學(xué)習(xí)實(shí)踐應(yīng)用的對話,這個(gè)團(tuán)隊(duì)在機(jī)器學(xué)習(xí)競賽中獲取了很好的成績。這個(gè)視頻很有用,因?yàn)楹苌儆腥巳ブv將機(jī)器學(xué)習(xí)應(yīng)用到一個(gè)項(xiàng)目中真正是什么樣的,及怎么去做這個(gè)項(xiàng)目。我幻想著能創(chuàng)建一個(gè)網(wǎng)絡(luò)真人TV秀,這樣可以能直接看到選手機(jī)器學(xué)習(xí)競賽中的表現(xiàn)。我是多么的向往啊。
論文概述
如果你不習(xí)慣讀研究性論文,你將會發(fā)現(xiàn)他們的語言非常枯燥。論文像是教科書的片段,但是論文描述了實(shí)驗(yàn),或者是該領(lǐng)域其他前沿研究。不過,如果你正要開始學(xué)習(xí)機(jī)器學(xué),這里有一些論文可能會引起你的興趣。
The Discipline of Machine Learning(機(jī)器學(xué)習(xí)的原則):機(jī)器學(xué)習(xí)原則定義的白皮書,作者Tom Mitchell. 當(dāng)時(shí)有一場辯論,Mitchell最終說服CMU主席成立單獨(dú)的機(jī)器學(xué)習(xí)機(jī)構(gòu),以保證機(jī)器學(xué)習(xí)將在今后的100年里作為一個(gè)學(xué)科存在。(也可參考短片Tom Mitchell訪談)。
A Few Useful Things to Know about Machine Learning(一些你必須知道的關(guān)于機(jī)器學(xué)習(xí)的事):這是一篇好論文,因?yàn)樗痪心嘤谔囟ǖ乃惴ǎ瞧蛴诒热缣卣鬟x取概述和模型簡化這些重要的問題上。走對方向并且從一開始就想清楚,都是很好的事情。
上面我只羅列了兩篇重要的論文,因?yàn)樽x論文會真的讓你陷入困境。
機(jī)器學(xué)習(xí)初學(xué)者書籍
市面上有很多機(jī)器學(xué)習(xí)的書,但很少有針對初學(xué)者編寫的。什么才是真正的初學(xué)者?可能是從其他領(lǐng)域轉(zhuǎn)入機(jī)器學(xué)習(xí)的,也可能是從計(jì)算機(jī)科學(xué),軟件編程或者統(tǒng)計(jì)學(xué)轉(zhuǎn)入的。即使這樣,大部分的書籍都會認(rèn)為你至少已經(jīng)有了線性代數(shù)和概率論的知識背景。
然而,這里還是有一些書鼓勵(lì)有興趣的程序員從一個(gè)最小的算法開始學(xué)習(xí),指定工具和庫,這樣編程人員就可以運(yùn)行程序并得出結(jié)果。最著名的有Programming Collective Intelligence(中文版:《集體智慧編程》)、Machine Learning for Hackers(中文版《機(jī)器學(xué)習(xí):實(shí)用案例解析》)和Data Mining: Practical Machine Learning Tools and Techniques(中文版《數(shù)據(jù)挖掘:實(shí)用機(jī)器學(xué)習(xí)技術(shù)》),以上三本分別基于Python,R和Java三種語言。如果有不懂的地方,可以參見這三本書。
[](http://machinelearningmastery.com /wp-content/uploads/2013/11/photo.jpg)
Programming Collective Intelligence(中文版:《集體智慧編程》):創(chuàng)建精巧的web 2.0應(yīng)用:這本書是專門為編程人員寫的,輕理論,重實(shí)戰(zhàn),有大量的代碼示例,實(shí)際上遇到的web問題及對應(yīng)的解決方案。買這本書的讀者,建議邊讀邊做練習(xí)!
Machine Learning for Hackers(中文版:《機(jī)器學(xué)習(xí):使用案例解析》):我建議在讀完P(guān)rogramming Collective Intelligence以后再來讀這本書。該書同樣提供了大量的實(shí)用性很強(qiáng)的案例。但是它有更多數(shù)據(jù)分析的東西并且使用R語言。我真心喜歡這本書。
Machine Learning: An Algorithmic Perspective:這本書像是Programming Collective Intelligence的升級版。這兩本書的目標(biāo)相同(幫助程序員入門),但是這本書包含了數(shù)學(xué)和參考文獻(xiàn),同時(shí)也有用Python寫的示例和代碼片段。我建議讀者先看Programming Collective Intelligence,如果看完以后還有興趣,再來看這本書。
Data Mining: Practical Machine Learning Tools and Techniques, Third Edition(中文版:《數(shù)據(jù)挖掘:實(shí)用機(jī)器學(xué)習(xí)技術(shù)》):實(shí)際上我是從這本書開始學(xué)起的,2000年的第一版。當(dāng)時(shí)我還是個(gè)java程序員,由于WEKA庫提供了很好的開發(fā)環(huán)境,我利用這本書結(jié)合WEKA庫進(jìn)行嘗試,用自己的算法做了插件并作了大量的機(jī)器學(xué)習(xí)應(yīng)用,同時(shí)延伸到數(shù)據(jù)挖掘部分。因此我強(qiáng)力推薦這本書和這種學(xué)習(xí)方法。
Machine Learning(中文版:《機(jī)器學(xué)習(xí)》):這本書比較老,包含了公式和很多的參考文獻(xiàn)。雖然是本教科書,但是每個(gè)算法的實(shí)用性依然非常強(qiáng)。
很多人能列舉出很多優(yōu)秀的機(jī)器學(xué)習(xí)教科書,我也可以。這些書的確很棒,只是個(gè)人覺得對初學(xué)者來說不太好入門而已。
擴(kuò)展閱讀
這篇文章經(jīng)過我仔細(xì)推敲,為了確保自己沒有漏掉任何一點(diǎn)重要的東西,我同時(shí)也看了其他人列出的資源。為了使內(nèi)容更全面,這里再列出一些網(wǎng)上其他優(yōu)秀的機(jī)器學(xué)習(xí)入門資源列表。
A List of Data Science and Machine Learning Resources:很詳細(xì)的資源列表,花點(diǎn)時(shí)間讀讀作者的建議,再看看其中的鏈接。很值得一看。
What are some good resources for learning about machine learning? Why?:這個(gè)問答的第一個(gè)答案很不錯(cuò),每次讀我都會做筆記并打上標(biāo)簽。這個(gè)答案里面最有價(jià)值的部分是機(jī)器學(xué)習(xí)課程的筆記列表及Q&A頁面的相關(guān)文章列表。
Overwhelmed by Machine Learning: is there an ML101 book?:一個(gè)StackOverflow上的帖子,上面確實(shí)列出了很多推薦的機(jī)器學(xué)習(xí)書籍列表,第一個(gè)回帖的是Jeff Moser,羅列了很多課程視頻和談話。
你是否已經(jīng)看過或者用過這些資源呢?你覺得怎么樣?
我不知道我是否為有興趣學(xué)習(xí)機(jī)器學(xué)習(xí)的程序員提供了真正有用的資源,有任何問題和建議,請留下寶貴留言!