機器學習,在理論和編程方面要如何準備?
11-23
先說下我的情況,信息專業的研究生,以後想往機器學習,數據挖掘的領域發展。
目前正在看andraw ng的課程,其餘的理論知識基本小白,希望大牛門能推薦幾本書。
編程方面,數據結構和基本的演算法都了解,還不是很熟練,語言方面,java和c++都有一定的基礎,都不是很熟練。
個人感覺,自己動手實踐編程的項目很少,缺乏實戰經驗,只有在oj上刷過一些水題。
1.目前的階段,該看些機器學習方面的什麼書籍?
2.如何提高自己的編程能力?
先謝謝大家了。
補上回答樓主編碼能力的問題:
---------------------------------------------
編碼能力
- 實現經典的機器學習方法。這是我的github項目,用python+numpy實現了常見的機器學習演算法:mazefeng/ml · GitHub。前段時間還年少輕狂,用c++實現了smo演算法來訓練SVMs,結果和libsvm還是有很大差距的(主要是訓練時間上)。mazefeng/svm · GitHub。
數學基礎
- 線性代數:看過的大部分ml演算法都是用linear algebra的terminology進行描述的。有線性代數基礎,在沒有看懂paper的情況下,還是有可能根據偽代碼實現文中演算法的。
- 概率與統計:有助於理解最大似然估計(MLE),最大後驗概率(MAP),正則化等ML中很重要的概念。所謂的最大似然估計,大多數情況下,就是counting。
- 數值優化(進階):注意不是凸優化,就是數值優化。學了這個之後,你就會了解,所謂的(stochastic/online/mini-batch) gradient descent方法,其實就是渣。梯度下降其實就是steepest descent的簡化版本,閹割了line search。光是line search,就值得花幾節課的時間大講特講。更別提像conjugate gradient descent這樣高級的一階演算法,以及牛頓法(Newton"s method)/擬牛頓法(Quasi-Newton/L-BFGS/OWL-QN)等逆天的二階演算法。
- 凸優化:很重要,但是沒有系統的學習過,在此不誤人子弟。
相關書籍
- 機器學習 by Tom Mitchell:雖然內容舊了點,但是很經典。
- Machine Learning: A Probabilistic Perspective by Kevin Murphy:知識點很全,但是講得太淺。包含統計學派和貝葉斯學派。
- 統計學習方法:Li Hang老師寫的書,寫的很好,絕對領先於國內ML書籍。
- 統計學習基礎(ESLII):統計學派寫的書,作者是Stanford統計系的幾位大牛。
- 模式識別與機器學習(PRML):貝葉斯學派寫的書,作者是M$的Bishop。
- ICML/NIPS/KDD等頂會的經典paper。
- 最後要默默吐槽下《Machine Learning in Action》這本書,寫的實在是一般。
推薦課程
- Machine Learning in Coursera by Andrew Ng:我的一個同事在C站上開的課,適合入門(我拿到這門課程認證的時候,Coursera還沒有上線...)。網上評價太多,請自行B/G之。
- Stanford Machine Learning by Andrew Ng:經典中的經典,是C站課程的升級版,理論深度深很多。網上也有很多介紹和評價,在此不作累述。
- UW Machine Learning by Pedro Domingo:以Tom Mitchell的書為教材,把很多經典的機器學習演算法講得很透徹(比如像規則集這種老掉牙的模型)。Pedro也不是省油的等,《A few useful things to know about machine learning》(中文譯作《機器學習二三事》)就是他寫的。他還發明了sum-product network,他的學生去年這方面的文章拿了nips的best student paper。
- Learning From Data by Abu-Mostafa:最大的亮點在於把PAC learning theory講得比較清晰透徹。PAC的作者得過Turning award,這個理論主要解釋了why machine learning work。台大的林軒田在C站上開過LFD的漢化版,叫《機器學習基石》。
- Machine Learning by Sam Roweis of NYU:這個課程沒記錯的話,應該是weibo上某個大v力推的。Sam Roweis乃有為青年,但是英年早逝。他的ppt寫得非常棒,我把他這門課程的ppt全部列印裝訂成冊,沒事拿出來翻翻。
- Neural Network for Machine Learning by Geoffrey Hinton:Hinton老先生在C站上開的唯一一門課,2012年開過之後就沒有重開過,因此這門課程的認證絕對是有紀念意義的。我雖然完成了所有的習題和Programming Assignment,但是因為過了時間遺憾地沒拿到證書。這門課程從頭到尾都是講神經網路的,可以作為深度學習的入門材料。老先生畢生都研究神經網路,對很多東西都有很深刻的理解,人也很謙虛。課程中也涉及到當時的一些前沿研究,比如說DBN(Deep Belief Net)和DBM(Deep Boltzmann Machine),以及防止過擬合的Drop-out技術。PA中還實現了作為DBN building block的RBM(Restricted Boltzmann Machine)。
- Unsupervised Feature Learning and Deep Learning by Andrew Ng:UFLDL講的是深度學習的另外一種實現方式:基於Sparse AutoEncoder(SAE)。把這個課程從頭follow到尾,基本上能夠把(深度)神經網路的基本理論和演算法搞清楚,例如:back-prop演算法,layer-wise pretraining,fine-tuning。傳統的back-prop演算法在神經網路變深的時候很難獲得好的效果。深度學習近些年重獲新生,除了計算力和數據方面的原因,也有在training上的一些像layer-wise pretraining和fine tuning等tricky方法的引入。完成這個課程的同時,也就自己完成了一個可以用於手寫數字識別的小型深度神經網路。
- Natural Language Processing by Mike Collins:C站上的自然語言處理課程。NLP放在這裡不算離題。ML屬於AI的一種實現,AI有3個子領域:機器人(Robotic),自然語言處理(NLP)和計算機視覺(CV)。Columbia Univ的Mike Collins主講,講得非常不錯,把NLP領域下面的3個子問題:Parsing,Tagging和Machine Translation講得很透徹,並且有相應的PA來深化對這些演算法的理解。另外一個要力薦的是Collins寫的notes和slides,講得非常清楚,尤其是NLP領域的ML演算法,例如HMM,MEMM(最大熵馬爾科夫模型)和CRF(條件隨機場,特指線性鏈CRF)。
- Probabilistic Graphical Models by Daphne Koller:C站上的條件概率圖模型(PGM),Koller和Ng是C站的聯合創始人。(如果我沒有記錯的話,Koller應該還是Ng的導師?)圖模型在ML中是門檻最高的,我雖然拿到了認證,但我也承認還是沒能把所有的知識點都搞懂。PGM根據圖是有向圖還是無向圖把模型分為2類,有向圖是貝葉斯網路(BN),無向圖是馬爾科夫隨機場(MRF)。整個課程基本按BN和MRF分成2個部分,分別講圖模型的建模,learning和inference。
==========課程部分後續有時間再做補充==========
學理論的時候先用matlab寫,簡單,容易出結果。
然後再用C++,讓演算法能夠適應到具體項目中。
如果要工作的話,好好編程,多動手做做實際項目。
理論方面主要是最優化,次要是線性代數,不要是概率統計
代碼方面,先做一年github的搬運工就明白了,盡量選C++
機器學習中涉及到的知識很多很雜,大多跟數學有關係,主要包括:最優化理論,圖論,概率論,隨機過程,矩陣論,泛函分析等。建議聽一下Andrew Ng的網易公開課。
meanshift,中文譯名為「均值漂移」,是基於給定的一堆數據,對其概率密度的梯度函數進行估計,目前主要應用於聚類,圖像平滑,圖像分割和目標跟蹤等方面。
重溫離散數學,線性代數等等數學理論知識,編程的話,掌握python
python學下,然後看下開源項目介面
首先編碼方面要牛。。。理論知識要充足,缺一不可
實戰方面的書,推薦兩本:
機器學習實戰 和 集體智慧編程。
現在很多機械和各種各樣的管理等等都已經模塊話了,你要是想學機器的話,建議你將他的模塊化學習學習,其實就是大的組成,然後學習各個模塊的功能,這樣能了解當機器出問題的時候是哪部分壞了有問題了(很像現在的維修,一般都是模塊更換,很少維修的),學會個各個部分的功能,當然你要是有能力有基礎的話在學學習機械各個部分功能的原理,就是他為什麼具有這種功能。最後你可以說對這個機器完全了解了
推薦閱讀:
※分布的相似度(距離)用什麼模型比較好?
※怎樣進行大數據的入門級學習?
※看技術書, 數學公式推導需要會計算么?
※計算機視覺方向博士如何做好科研?
※TensorFlow有哪些令人難以接受的地方?