http://article.yeeyan.org/view/22139/410514

譯者: teyla 原作者:Jasonb
發(fā)表時(shí)間:2014-06-05瀏覽量:17031評(píng)論數(shù):2挑錯(cuò)數(shù):0
專(zhuān)為機(jī)器學(xué)習(xí)初學(xué)者推薦的優(yōu)質(zhì)學(xué)習(xí)資源,幫助初學(xué)者快速入門(mén)。

這篇文章的確很難寫(xiě),因?yàn)槲蚁M嬲貙?duì)初學(xué)者有幫助。面前放著一張空白的紙,我坐下來(lái)問(wèn)自己一個(gè)難題:面對(duì)一個(gè)對(duì)機(jī)器學(xué)習(xí)領(lǐng)域完全陌生的初學(xué)者,我該推薦哪些最適合的庫(kù),教程,論文及書(shū)籍幫助他們?nèi)腴T(mén)?

資源的取舍很讓人糾結(jié),我不得不努力從一個(gè)機(jī)器學(xué)習(xí)的程序員和初學(xué)者的角度去思考哪些資源才是最適合他們的。

我為每種類(lèi)型的資源選出了其中最佳的學(xué)習(xí)資料。如果你是一個(gè)真正的初學(xué)者,并且有興趣開(kāi)始機(jī)器學(xué)習(xí)領(lǐng)域的學(xué)習(xí),我希望你能在其中找到有用的東西。我的建議是,選取其中一項(xiàng)資源,一本書(shū),或者一個(gè)庫(kù),從頭到尾的讀一邊,或者完成所有的教程。選定一個(gè)后堅(jiān)持學(xué)習(xí),等到完全掌握以后,再選取另一個(gè)資源按同樣的方法學(xué)習(xí)。現(xiàn)在開(kāi)始吧。

程序庫(kù)

我信奉這么一句話:學(xué)到一定程度后,你需要開(kāi)始嘗試做事。這就是我怎么學(xué)會(huì)編程的,并且我確信其他大部分的人也是這么學(xué)會(huì)的。要知道自己的極限,激發(fā)自己的能量。如果你知道怎么編程,你就能快速深入到機(jī)器學(xué)習(xí)的學(xué)習(xí)中。然后制定一個(gè)計(jì)劃,在你實(shí)現(xiàn)一個(gè)工程系統(tǒng)前學(xué)習(xí)完這項(xiàng)技術(shù)相關(guān)的數(shù)學(xué)知識(shí)。

找一個(gè)庫(kù),先閱讀其文檔,然后就可以照著指南嘗試做一些事情了。以下是最優(yōu)秀的機(jī)器學(xué)習(xí)庫(kù)開(kāi)源代碼。我并不認(rèn)為這些庫(kù)適用于你的工程項(xiàng)目,但是它們非常適合學(xué)習(xí),開(kāi)發(fā)及建模。

先選擇一個(gè)你熟悉的語(yǔ)言對(duì)應(yīng)的庫(kù),然后再?lài)L試其他更功能強(qiáng)大的庫(kù)。如果你是個(gè)很好的程序員,你應(yīng)該知道你可以很容易的從一種語(yǔ)言切換到另一種語(yǔ)言。程序邏輯都是一樣的,只是語(yǔ)法和API的區(qū)別而已。

R Project for Statistical Computing(用于統(tǒng)計(jì)計(jì)算的R工程):這是一個(gè)軟件環(huán)境,采用類(lèi)lisp腳本語(yǔ)言。提供了你想要的所有統(tǒng)計(jì)相關(guān)的東西,包括非常贊的繪圖。CRAN(第三方機(jī)器學(xué)習(xí)包)的機(jī)器學(xué)習(xí)分類(lèi)下有該領(lǐng)域?qū)<覀兙帉?xiě)的代碼,最新的接口方法和其他你能想到的功能都可以在上面找到。如果你想快速建模并開(kāi)發(fā),R工程是必學(xué)的。不過(guò)你不一定從一開(kāi)始就從這個(gè)工程學(xué)起。

WEKA:數(shù)據(jù)挖掘平臺(tái),提供了API,一些命令行及整個(gè)數(shù)據(jù)挖掘生命周期的圖像化用戶(hù)接口。你可以準(zhǔn)備數(shù)據(jù),進(jìn)行可視化開(kāi)發(fā),創(chuàng)建分類(lèi)、回歸、集群模型和很多內(nèi)嵌及第三方組件提供的算法。如果你需要基于Hadoop平臺(tái)工作,那么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庫(kù),依賴(lài)Numpy和Scipy庫(kù)。如果你是Python或者Ruby程序員,這個(gè)庫(kù)比較合適。該庫(kù)接口友好,功能強(qiáng)大,且有完善的文檔支持。如果你想嘗試其他東西,那么Orange將是一個(gè)不錯(cuò)的選擇。

Octave:如果你熟悉MatLab或者你是Numpy程序員且正嘗試尋找一些不一樣的東西,那么可以考慮Octave。它提供了跟Matlab相似的數(shù)據(jù)計(jì)算環(huán)境,并且可以很簡(jiǎn)單的通過(guò)編程解決線性及非線性的問(wèn)題,這些問(wèn)題是大部分機(jī)器學(xué)習(xí)算法的基礎(chǔ)。如果你有工程師背景,你可以從這里開(kāi)始學(xué)起。

BigML:可能你不想做任何的編程,那么你可以全部使用工具,比如WEKA。你還可以更深一步并使用像BigML一樣的服務(wù),BigML提供了web版的機(jī)器學(xué)習(xí)接口,開(kāi)發(fā)及創(chuàng)建模型可以全部在瀏覽器上完成。

選取其中一個(gè)平臺(tái)用于機(jī)器學(xué)習(xí)的實(shí)戰(zhàn)練習(xí)。不要只是看,要做。

視頻課程

現(xiàn)在很流行通過(guò)觀看視頻來(lái)學(xué)習(xí)機(jī)器學(xué)習(xí)。我在YouTube和VideoLectures.Net上看了很多機(jī)器學(xué)習(xí)的視頻,看視頻的風(fēng)險(xiǎn)在于你很容易只是看而不會(huì)去實(shí)踐。我建議在看視頻的時(shí)候一定要做好筆記,即便之后你很快就會(huì)把筆記扔掉。同時(shí)建議你不管在學(xué)什么,一定要去動(dòng)手嘗試。

坦白來(lái)說(shuō),我看過(guò)的視頻中,沒(méi)有哪個(gè)視頻是特別適合初學(xué)者的,我指真正的初學(xué)者。他們都是基于讀者有最基本的線性代數(shù)和概率理論知識(shí)的假設(shè)。斯坦福大學(xué)Andrew Ng 的教程可能是最適合用于入門(mén)的了,另外,我推薦了一些一次性視頻。

Stanford Machine Learning(斯坦福機(jī)器學(xué)習(xí)):通過(guò)Coursera可以獲取到,Andrew Ng主講。除了招生,你可以在任何時(shí)間看到所有的課程,并且從Stanford CS229 course(斯坦福CS229課程)上下載到所有的講義和課堂筆記。課程包括家庭作業(yè),測(cè)試。課程集中在線性代數(shù)上,使用Octave環(huán)境。

Caltech Learning from Data:可以在edX訪問(wèn)到,Yaser Abu-Mostafa主講。所有的課程和材料在CalTech網(wǎng)站上都可以獲取到。和斯坦福課程一樣,你可以按你自己的節(jié)奏來(lái)完成家庭作業(yè)和任務(wù)。它覆蓋了和斯坦福類(lèi)似的課程,然后在細(xì)節(jié)上有一些深入,并且用了更多的數(shù)學(xué)方面的知識(shí)。家庭作業(yè)對(duì)初學(xué)者來(lái)說(shuō)可能太難了。

Machine Learning Category on VideoLectures.Net(VideoLectures.Net上的機(jī)器學(xué)習(xí)分類(lèi)):初學(xué)者很容易沉溺于海量的內(nèi)容中。你可以找尋一些看起來(lá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用戶(hù)團(tuán)隊(duì)關(guān)于機(jī)器學(xué)習(xí)實(shí)踐應(yīng)用的對(duì)話,這個(gè)團(tuán)隊(duì)在機(jī)器學(xué)習(xí)競(jìng)賽中獲取了很好的成績(jī)。這個(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í)競(jìng)賽中的表現(xiàn)。我是多么的向往啊。

論文概述

如果你不習(xí)慣讀研究性論文,你將會(huì)發(fā)現(xiàn)他們的語(yǔ)言非常枯燥。論文像是教科書(shū)的片段,但是論文描述了實(shí)驗(yàn),或者是該領(lǐng)域其他前沿研究。不過(guò),如果你正要開(kāi)始學(xué)習(xí)機(jī)器學(xué),這里有一些論文可能會(huì)引起你的興趣。

The Discipline of Machine Learning(機(jī)器學(xué)習(xí)的原則):機(jī)器學(xué)習(xí)原則定義的白皮書(shū),作者Tom Mitchell. 當(dāng)時(shí)有一場(chǎng)辯論,Mitchell最終說(shuō)服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取概述和模型簡(jiǎn)化這些重要的問(wèn)題上。走對(duì)方向并且從一開(kāi)始就想清楚,都是很好的事情。

上面我只羅列了兩篇重要的論文,因?yàn)樽x論文會(huì)真的讓你陷入困境。

機(jī)器學(xué)習(xí)初學(xué)者書(shū)籍

市面上有很多機(jī)器學(xué)習(xí)的書(shū),但很少有針對(duì)初學(xué)者編寫(xiě)的。什么才是真正的初學(xué)者?可能是從其他領(lǐng)域轉(zhuǎn)入機(jī)器學(xué)習(xí)的,也可能是從計(jì)算機(jī)科學(xué),軟件編程或者統(tǒng)計(jì)學(xué)轉(zhuǎn)入的。即使這樣,大部分的書(shū)籍都會(huì)認(rèn)為你至少已經(jīng)有了線性代數(shù)和概率論的知識(shí)背景。

然而,這里還是有一些書(shū)鼓勵(lì)有興趣的程序員從一個(gè)最小的算法開(kāi)始學(xué)習(xí),指定工具和庫(kù),這樣編程人員就可以運(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三種語(yǔ)言。如果有不懂的地方,可以參見(jiàn)這三本書(shū)。

[![Books for Machine Learning Beginners](http://machinelearningmastery.com/wp- content/uploads/2013/11/photo-300x225.jpg)](http://machinelearningmastery.com /wp-content/uploads/2013/11/photo.jpg)

Programming Collective Intelligence(中文版:《集體智慧編程》):創(chuàng)建精巧的web 2.0應(yīng)用:這本書(shū)是專(zhuān)門(mén)為編程人員寫(xiě)的,輕理論,重實(shí)戰(zhàn),有大量的代碼示例,實(shí)際上遇到的web問(wèn)題及對(duì)應(yīng)的解決方案。買(mǎi)這本書(shū)的讀者,建議邊讀邊做練習(xí)!

Machine Learning for Hackers(中文版:《機(jī)器學(xué)習(xí):使用案例解析》):我建議在讀完P(guān)rogramming Collective Intelligence以后再來(lái)讀這本書(shū)。該書(shū)同樣提供了大量的實(shí)用性很強(qiáng)的案例。但是它有更多數(shù)據(jù)分析的東西并且使用R語(yǔ)言。我真心喜歡這本書(shū)。

Machine Learning: An Algorithmic Perspective:這本書(shū)像是Programming Collective Intelligence的升級(jí)版。這兩本書(shū)的目標(biāo)相同(幫助程序員入門(mén)),但是這本書(shū)包含了數(shù)學(xué)和參考文獻(xiàn),同時(shí)也有用Python寫(xiě)的示例和代碼片段。我建議讀者先看Programming Collective Intelligence,如果看完以后還有興趣,再來(lái)看這本書(shū)。

Data Mining: Practical Machine Learning Tools and Techniques, Third Edition(中文版:《數(shù)據(jù)挖掘:實(shí)用機(jī)器學(xué)習(xí)技術(shù)》):實(shí)際上我是從這本書(shū)開(kāi)始學(xué)起的,2000年的第一版。當(dāng)時(shí)我還是個(gè)java程序員,由于WEKA庫(kù)提供了很好的開(kāi)發(fā)環(huán)境,我利用這本書(shū)結(jié)合WEKA庫(kù)進(jìn)行嘗試,用自己的算法做了插件并作了大量的機(jī)器學(xué)習(xí)應(yīng)用,同時(shí)延伸到數(shù)據(jù)挖掘部分。因此我強(qiáng)力推薦這本書(shū)和這種學(xué)習(xí)方法。

Machine Learning(中文版:《機(jī)器學(xué)習(xí)》):這本書(shū)比較老,包含了公式和很多的參考文獻(xiàn)。雖然是本教科書(shū),但是每個(gè)算法的實(shí)用性依然非常強(qiáng)。

很多人能列舉出很多優(yōu)秀的機(jī)器學(xué)習(xí)教科書(shū),我也可以。這些書(shū)的確很棒,只是個(gè)人覺(jué)得對(duì)初學(xué)者來(lái)說(shuō)不太好入門(mén)而已。

擴(kuò)展閱讀

這篇文章經(jīng)過(guò)我仔細(xì)推敲,為了確保自己沒(méi)有漏掉任何一點(diǎn)重要的東西,我同時(shí)也看了其他人列出的資源。為了使內(nèi)容更全面,這里再列出一些網(wǎng)上其他優(yōu)秀的機(jī)器學(xué)習(xí)入門(mén)資源列表。

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è)問(wèn)答的第一個(gè)答案很不錯(cuò),每次讀我都會(huì)做筆記并打上標(biāo)簽。這個(gè)答案里面最有價(jià)值的部分是機(jī)器學(xué)習(xí)課程的筆記列表及Q&A頁(yè)面的相關(guān)文章列表。

Overwhelmed by Machine Learning: is there an ML101 book?:一個(gè)StackOverflow上的帖子,上面確實(shí)列出了很多推薦的機(jī)器學(xué)習(xí)書(shū)籍列表,第一個(gè)回帖的是Jeff Moser,羅列了很多課程視頻和談話。

你是否已經(jīng)看過(guò)或者用過(guò)這些資源呢?你覺(jué)得怎么樣?

我不知道我是否為有興趣學(xué)習(xí)機(jī)器學(xué)習(xí)的程序員提供了真正有用的資源,有任何問(wèn)題和建議,請(qǐng)留下寶貴留言!