標籤:

機器學習該怎麼入門?

本人大學本科,對機器學習很感興趣,想從事這方面的研究。在網上看到機器學習有一些經典書如Bishop的PRML, Tom Mitchell的machine learning,還有pattern classification,不知該如何入門?那本書比較容易理解?


好東西不敢獨享,轉載一發。

正在學習林軒田的機器學習基石和吳恩達的機器學習,感覺講的還不錯,數學基礎還是蠻重要的。

機器學習入門資源不完全匯總

感謝貢獻者: tang_Kaka_back@新浪微博

歡迎補充指正,轉載請保留原作者和原文鏈接。 本文是 機器學習日報的一個專題合集,歡迎訂閱:請給hao@memect.com發郵件,標題"訂閱機器學習日報"。

機器學習入門資源不完全匯總基本概念

機器學習 機器學習是近20多年興起的一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。機器學習理論主要是設計和分析一些讓計算機可以自動「學習」的演算法。機器學習演算法是一類從數據中自動分析獲得規律,並利用規律對未知數據進行預測的演算法。因為學習演算法中涉及了大量的統計學理論,機器學習與統計推斷學聯繫尤為密切,也被稱為統計學習理論。演算法設計方面,機器學習理論關注可以實現的,行之有效的學習演算法。

下面從微觀到宏觀試著梳理一下機器學習的範疇:一個具體的演算法,領域進一步細分,實戰應用場景,與其他領域的關係。

圖1: 機器學習的例子:NLTK監督學習的工作流程圖 (source: http://www.nltk.org/book/ch06.html)

圖2: 機器學習概要圖 by Yaser Abu-Mostafa (Caltech) (source: Map of Machine Learning (Abu-Mostafa))

圖3: 機器學習實戰:在python scikit learn 中選擇機器學習演算法 by Nishant Chandra (source: In pursuit of happiness!: Picking the right Machine Learning Algorithm)

圖4: 機器學習和其他學科的關係: 數據科學的地鐵圖 by Swami Chandrasekaran (source: Becoming a Data Scientist)

機器學習入門資源不完全匯總入門攻略

大致分三類: 起步體悟,實戰筆記,行家導讀

  • 機器學習入門者學習指南 @果殼網 (2013) 作者 白馬 -- [起步體悟] 研究生型入門者的親身經歷

  • 有沒有做機器學習的哥們?能否介紹一下是如何起步的 @ourcoders -- [起步體悟] 研究生型入門者的親身經歷,尤其要看reyoung的建議

  • tornadomeet 機器學習 筆記 (2013) -- [實戰筆記] 學霸的學習筆記,看看小夥伴是怎樣一步一步地掌握「機器學習」

  • Machine Learning Roadmap: Your Self-Study Guide to Machine Learning (2014) Jason Brownlee -- [行家導讀] 雖然是英文版,但非常容易讀懂。對Beginner,Novice,Intermediate,Advanced讀者都有覆蓋。

    • A Tour of Machine Learning Algorithms (2013) 這篇關於機器學習演算法分類的文章也非常好
    • Best Machine Learning Resources for Getting Started(2013) 這片有中文翻譯 機器學習的最佳入門學習資源 @伯樂在線 譯者 programmer_lin
  • 門主的幾個建議

    • 既要有數學基礎,也要編程實踐
    • 別怕英文版,你不懂的大多是專業名詞,將來不論寫文章還是讀文檔都是英文為主
    • [我是小廣告][我是小廣告]訂閱機器學習日報,跟蹤業內熱點資料。

機器學習入門資源不完全匯總更多攻略

  • 機器學習該怎麼入門 @知乎 (2014)
  • What"s the easiest way to learn machine learning @quora (2013)
  • What is the best way to study machine learning @quora (2012)
  • Is there any roadmap for learning Machine Learning (ML) and its related courses at CMU Is there any roadmap for learning Machine Learning (ML) and its related courses at CMU(2014)

機器學習入門資源不完全匯總課程資源

Tom Mitchell 和 Andrew Ng 的課都很適合入門

機器學習入門資源不完全匯總入門課程機器學習入門資源不完全匯總2011 Tom Mitchell(CMU)機器學習

英文原版視頻與課件PDF 他的《機器學習》在很多課程上被選做教材,有中文版。

  • Decision Trees
  • Probability and Estimation
  • Naive Bayes
  • Logistic Regression
  • Linear Regression
  • Practical Issues: Feature selection,Overfitting ...
  • Graphical models: Bayes networks, EM,Mixture of Gaussians clustering ...
  • Computational Learning Theory: PAC Learning, Mistake bounds ...
  • Semi-Supervised Learning
  • Hidden Markov Models
  • Neural Networks
  • Learning Representations: PCA, Deep belief networks, ICA, CCA ...
  • Kernel Methods and SVM
  • Active Learning
  • Reinforcement Learning 以上為課程標題節選

機器學習入門資源不完全匯總2014 Andrew Ng (Stanford)機器學習

英文原版視頻 這就是針對自學而設計的,免費還有修課認證。「老師講的是深入淺出,不用太擔心數學方面的東西。而且作業也非常適合入門者,都是設計好的程序框架,有作業指南,根據作業指南填寫該完成的部分就行。」(參見白馬同學的入門攻略)"推薦報名,跟著上課,做課後習題和期末考試。(因為只看不幹,啥都學不會)。" (參見reyoung的建議)

  1. Introduction (Week 1)
  2. Linear Regression with One Variable (Week 1)
  3. Linear Algebra Review (Week 1, Optional)
  4. Linear Regression with Multiple Variables (Week 2)
  5. Octave Tutorial (Week 2)
  6. Logistic Regression (Week 3)
  7. Regularization (Week 3)
  8. Neural Networks: Representation (Week 4)
  9. Neural Networks: Learning (Week 5)
  10. Advice for Applying Machine Learning (Week 6)
  11. Machine Learning System Design (Week 6)
  12. Support Vector Machines (Week 7)
  13. Clustering (Week 8)
  14. Dimensionality Reduction (Week 8)
  15. Anomaly Detection (Week 9)
  16. Recommender Systems (Week 9)
  17. Large Scale Machine Learning (Week 10)
  18. Application Example: Photo OCR
  19. Conclusion

機器學習入門資源不完全匯總進階課程

2013年Yaser Abu-Mostafa (Caltech) Learning from Data -- 內容更適合進階 課程視頻,課件PDF@Caltech

  1. The Learning Problem
  2. Is Learning Feasible?
  3. The Linear Model I
  4. Error and Noise
  5. Training versus Testing
  6. Theory of Generalization
  7. The VC Dimension
  8. Bias-Variance Tradeoff
  9. The Linear Model II
  10. Neural Networks
  11. Overfitting
  12. Regularization
  13. Validation
  14. Support Vector Machines
  15. Kernel Methods
  16. Radial Basis Functions
  17. Three Learning Principles
  18. Epilogue

2014年 林軒田(國立台灣大學) 機器學習基石 (Machine Learning Foundations) -- 內容更適合進階,華文的教學講解 課程主頁

When Can Machines Learn? [何時可以使用機器學習] The Learning Problem [機器學習問題] -- Learning to Answer Yes/No [二元分類] -- Types of Learning [各式機器學習問題] -- Feasibility of Learning [機器學習的可行性]

Why Can Machines Learn? [為什麼機器可以學習] -- Training versus Testing [訓練與測試] -- Theory of Generalization [舉一反三的一般化理論] -- The VC Dimension [VC 維度] -- Noise and Error [雜訊一錯誤]

How Can Machines Learn? [機器可以怎麼樣學習] -- Linear Regression [線性迴歸] -- Linear `Soft" Classification [軟性的線性分類] -- Linear Classification beyond Yes/No [二元分類以外的分類問題] -- Nonlinear Transformation [非線性轉換]

How Can Machines Learn Better? [機器可以怎麼樣學得更好] -- Hazard of Overfitting [過度訓練的危險] -- Preventing Overfitting I: Regularization [避免過度訓練一:控制調適] -- Preventing Overfitting II: Validation [避免過度訓練二:自我檢測] -- Three Learning Principles [三個機器學習的重要原則]

機器學習入門資源不完全匯總更多選擇

2008年Andrew Ng CS229 機器學習 -- 這組視頻有些年頭了,主講人這兩年也高大上了.當然基本方法沒有太大變化,所以課件PDF可下載是優點。 中文字幕視頻@網易公開課 | 英文版視頻@youtube |課件PDF@Stanford

第1集.機器學習的動機與應用 第2集.監督學習應用.梯度下降 第3集.欠擬合與過擬合的概念 第4集.牛頓方法 第5集.生成學習演算法 第6集.樸素貝葉斯演算法 第7集.最優間隔分類器問題 第8集.順序最小優化演算法 第9集.經驗風險最小化 第10集.特徵選擇 第11集.貝葉斯統計正則化 第12集.K-means演算法 第13集.高斯混合模型 第14集.主成分分析法 第15集.奇異值分解 第16集.馬爾可夫決策過程 第17集.離散與維數災難 第18集.線性二次型調節控制 第19集.微分動態規劃 第20集.策略搜索

2012年余凱(百度)張潼(Rutgers) 機器學習公開課 -- 內容更適合進階 課程主頁@百度文庫 | 課件PDF@龍星計劃

第1節Introduction to ML and review of linear algebra, probability, statistics (kai) 第2節linear model (tong) 第3節overfitting and regularization(tong) 第4節linear classification (kai) 第5節basis expansion and kernelmethods (kai) 第6節model selection and evaluation(kai) 第7節model combination (tong) 第8節boosting and bagging (tong) 第9節overview of learning theory(tong) 第10節optimization in machinelearning (tong) 第11節online learning (tong) 第12節sparsity models (tong) 第13節introduction to graphicalmodels (kai) 第14節structured learning (kai) 第15節feature learning and deeplearning (kai) 第16節transfer learning and semi supervised learning (kai) 第17節matrix factorization and recommendations (kai) 第18節learning on images (kai) 第19節learning on the web (tong)

機器學習入門資源不完全匯總論壇網站機器學習入門資源不完全匯總中文

我愛機器學習 我愛機器學習

http://www.mitbbs.com/bbsdoc/DataSciences.html MITBBS- 電腦網路 - 數據科學版

機器學習小組 果殼 &> 機器學習小組

http://cos.name/cn/forum/22 統計之都 ? 統計學世界 ? 數據挖掘和機器學習

北郵人論壇-北郵人的溫馨家園 北郵人論壇?&>&>?學術科技?&>&>?機器學習與數據挖掘

機器學習入門資源不完全匯總英文

josephmisiti/awesome-machine-learning · GitHub 機器學習資源大全

Machine Learning Video Library Caltech 機器學習視頻教程庫,每個課題一個視頻

Analytics, Data Mining, and Data Science 數據挖掘名站

http://www.datasciencecentral.com/ 數據科學中心網站

機器學習入門資源不完全匯總東拉西扯

一些好東西,入門前未必看得懂,要等學有小成時再看才能體會。

機器學習與數據挖掘的區別

  • 機器學習關注從訓練數據中學到已知屬性進行預測
  • 數據挖掘側重從數據中發現未知屬性

Dan Levin, What is the difference between statistics, machine learning, AI and data mining?

  • If there are up to 3 variables, it is statistics.
  • If the problem is NP-complete, it is machine learning.
  • If the problem is PSPACE-complete, it is AI.
  • If you don"t know what is PSPACE-complete, it is data mining.

幾篇高屋建瓴的機器學習領域概論, 參見原文

  • The Discipline of Machine LearningTom Mitchell 當年為在CMU建立機器學習系給校長寫的東西。
  • A Few Useful Things to Know about Machine Learning Pedro Domingos教授的大道理,也許入門時很多概念還不明白,上完公開課後一定要再讀一遍。

幾本好書

  • 李航博士的《統計學習方法》一書前段也推薦過,給個豆瓣的鏈接

看到沒有人提到Metacademy,推薦一發作為入門工具:Metacademy,以及我個人的一點粗淺看法。

上面有很多答案說得太龐雜了,固然機器學習這個領域有很多的經典資料值得我們花大塊時間去研讀,但對於一個入門的新人來說如果在一開始就一頭扎進這樣深不見底的知識海洋之中,難免產生一些挫敗感,這樣的挫敗感對深入學習是不利的,也是不必要的。事實上,在機器學習這個領域裡,我們可以說出諸如「演化計算」,「統計關係學習」等上百個關鍵詞,每一個關鍵詞都代表著一個子領域,無論多麼優秀的機器學習學家,也不敢說自己對每一個子領域都有相當的了解。

如果對機器學習有興趣,當擁有最基礎的知識之後,就可以嘗試對某個感興趣的子領域展開一些研究,利用問題驅動自己,逐漸形成self-motivation。在解決問題的過程中不斷提升自己的視野,提升自己對問題的洞察力和對研究的自信可能是更為重要的。
但在這樣的過程中,基礎薄弱所帶來的問題可能就會浮現:每每你讀論文,會遇到許多聞所未聞的概念,這時為了弄清整個論文邏輯,你不得不跑回去先了解這些知識。這樣你又一頭扎進了知識海洋,在幾十個搜出來的網頁之間切來切去,嘗試弄明白一個個預備知識的預備知識,卻不知道這一塊塊拼圖何時才能拼完你最初想讀懂的論文。
如果你有一個足夠強大又足夠耐心的導師,可能會很大程度地幫到你,但大部分的導師不會如此體貼入微——他們只會在大的方向上引導你。這時候我們需要的是一個知識結構上的貼心「導師」,告訴你為了看懂這個概念,哪些知識你需要學,為什麼這些知識重要,怎樣快速了解這些知識。我們需要一副清晰的知識圖譜,以幫助我們最快速地解決我們需要解決的問題。
這是Metacademy的建設初衷。Metacademy會把各個知識點聯繫起來,就像遊戲里的技能樹一樣。每個知識點有個簡介,而且會鏈接到那些優質的學習資源上,最重要的是,它會畫出通向這個知識點的知識圖譜。Metacademy的建設目標是「your package manager for knowledge」,但現在上面暫時只集成了一些機器學習和相關的數學知識。
例如我們想了解CNN(convolutional neural nets)這個概念,直接在Metacademy上搜索它:

可以看到這個概念相關的介紹:

其中這門課Coursera: Neural Networks for Machine Learning 想必有很多前輩都會推薦,授課人是深度學習大師Geoffrey Hinton。
我們還可以點擊左上角的樹狀圖標查看知識圖譜:

一層一層知識間的關係變得清晰起來。再怎麼新手,vectors,dot product也是知道的。這樣雖然要學的知識量客觀上沒有改變,但不再是淹沒在知識海洋里,而是面對知識的階梯一步一步向上走。這樣的感覺是截然不同的,而在研究過程中,感覺是非常重要的一環。當然這個Metacademy還很初步,我只是拿它做了個例子。總的來說,機器學習該怎麼入門,怎麼算入門,各家有各家的說法,我還沒有評論的資格。我的想法是,在科技如此發達,知識如此豐富的現代,我們不應感到迷茫,而應換個角度看到道路更寬廣,世界更多彩。也許可以把一些冗雜的既有知識暫且放下,多將精力放在那些更值得我們思考的問題上來,或許這樣更能不斷地在學習和研究中獲得正向反饋。


我看到有人在問,Andrew Ng的視頻,還有代碼這些的資料。再次整理一下:

1、機器學習實戰的書:《機器學習實戰 (圖靈程序設計叢書 72)》 [美]Peter Harrington, 李銳, 李鵬, 曲亞東, 王斌 書評 簡介 電子書下載 Kindle電子書

2、Andrew Ng老師的視頻教程:Machine Learning:斯坦福大學機器學習個人筆記完整版(附所有視頻和字幕) (現在Andrew Ng老師沒開新課了,這是一個同學自己下載的所有視頻和相關資料,大家可以自行下載)

3、Andrew Ng老師早期的一個機器學習公開課:斯坦福大學公開課 :機器學習課程

4、Andrew Ng老師機器學習課的代碼。Python版本:icrtiou/Coursera-ML-AndrewNg

Matlab版本:vugsus/coursera-machine-learning

另外,鑒於現在深度學習這麼的火熱,而且現在做機器學習也避免不了了解及應用深度學習,我這裡也加入一些深度學習的內容。

1、入門的數學和編程基礎和機器學習的要求是一樣的。

2、入門讀物還是推薦Andrew Ng老師組織的一個WIKI,UFLDL Tutorial - Ufldl , 非常建議大家老老實實花兩個星期的時間把這個wiki的內容和相關程序自己實現一次。而且,這個wiki是有中文版本的,在每個頁面的最下面都可以點擊查看中文版本。(PS:我還很榮幸的當時參與了當時的翻譯工作,為內容的中文化做了一點點微小的工作。)。

3、現在的深度學習應用最為廣泛的就是卷積神經網路(Convolutional neural network, CNN),所以建議大家可以多看看這個方面的內容。正好這幾天Fei Fei Li老師的CNN課程又開課了,大家有興趣可以去看看。這個網站會同步更新,而且有中文翻譯。【中文字幕】2017春季CS231n 斯坦福深度視覺識別課。

4、做深度學習避免不了的要選擇一個平台,Tensorflow,Caffe,Torch,MxNet等等都是選擇。如果是新手,尤其是基於Windows平台的新手,我還是比較建議用Tensorflow。具體的內容可以參見這個莫煩系列教程 - Tensorflow教程。

5、最後,就是勤聯繫、勤聯繫、勤聯繫啦。

6、最後的最後,如果沒有項目參與,那麼最好的檢驗自己的學習成果的手段就是參加比賽啦。國外的Kaggle,KDD CUP,...。國內的天池大數據競賽,...。

  • https://www.kaggle.com/
  • http://www.kdd.org/kdd-cup
  • https://tianchi.shuju.aliyun.com/

這幾年,機器學習絕對是計算機領域最熱門的話題和方向。筆者不屬於專門研究機器學習,但是平時的工作會經常用到一些相關的演算法。因此,對於機器學習也僅僅是入門的水平。但是我想也正是因為我只是一個入門漢,所以能夠從我們入門者的角度來總結如何入門,希望對還在門外的同學有一些幫助。

數 學

很多人翻看任何一本機器學習的書,看到一推的數學公式就開始打退堂鼓了。開始搜索,提問「機器學習需要哪些數學知識?」然後得到的結果可能會是「矩陣分析,概率論,優化設計……」而且還會有大量的人推薦一些例如「All of Statistics」,「Convex Optimation」等等外文教材。至少我當時面對的情況就是這樣的。這種情況很可能後面會朝以下畫風發展。

看到上述推薦的那些經典教材,你像看待聖經一樣看待他們。抱著一種學會了那些課,我再看機器學習的書簡直就會是探囊取物的想法,你下載了巨多相關材料。但是,慢慢你會發現,除了把他們下載了下來,你並沒有任何的進步。你並沒有完完整整的看完一本,你並沒有在機器學習方面卓越超群。

入門階段真的需要這麼多的數學儲備嗎?未必。

入門階段我感覺你只要有普通工科專業大一大二那幾門基礎數學課「線性代數」,「高數」,「概率論與數理統計」就可以讓你入門了。

所以,千萬別被機器學習中的數學所嚇倒而不知道該如何下手。

只要有上述的幾門課的基礎,你完全可以看懂很大一部分機器學習演算法。

程序語言

機器學習入門最佳的方法其實就是理論和代碼一起學習。一邊看相應的理論推導,一邊看並且實踐經典代碼。所以,為了更快入門,我推薦你最好能夠懂點MATLAB或者是Python語言。

Matlab和Python說實話做高端的機器學習肯定是不推薦的,但是如果你想的是機器學習快速入門,那這兩門語言絕對是絕佳選擇。

第一步

有了上述基礎後,你可以開始看點機器學習的相關內容了。我看很多人推薦elements of machine learning。我想說,你想讓一個基礎為零的人去看這本書,真的合適嗎???

所以,我推薦的是Machine Learning in action,(這裡面的完成語言為Python)這是英文版本的。當然如果你覺得英文對你是一個完全過不去的坎,(雖然我建議做技術的人都必須至少要看得懂英文)現在有中文版本,叫「機器學習實踐」。

這本書用盡量少的公式把機器學習的基本演算法都過了一遍,而且還講得很清楚,更為重要的是他將公式和代碼結合了起來。因此,你的機器學習並沒有那麼的抽象了,你知道演算法里的公式如何的轉化為代碼。

所以,第一步,你可以耐著性子將這本書看完。反正我當時,把書中的代碼自己敲了一次,雖然代碼有的下載,你也可以選擇只是把代碼看懂完事。但我還是建議,自己敲一次,運行運行,這樣你會得到不一樣的體會。

第二步

學習Coursera上面Andrew Ng老師的machine learning的課程。這門課造福了眾多機器學習的入門者,不僅僅是因為課程全面,內容由淺入深。更加重要的是這門課程每次課都有課堂作業,作業不需要你寫出來所有的代碼,但是關鍵代碼要你寫出來,而且還會教你如何調試代碼。

初學者學這門課的時候很可能會買有耐心,又是英文的,又有進度要求,又有作業。沒關係,你可以把視頻下載下來(很多網盤裡都有下載好的視頻),然後慢慢的去啃。作業也是,可能你自己不能一口氣寫出來,沒關係,在自己做了大量嘗試後,去Github上面下載一些別人寫好的代碼看一看,找找自己的問題到底出在了哪裡。

總之,一定要耐著性子過一遍甚至是幾面這個課程。

第三步

這時候你已經對機器學習很多簡單的演算法比較清楚了,但是可能還沒有一種大的全局觀。所以,我建議大家可以看看這兩本中文教材。周志華老師的西瓜書《機器學習》和李航老師的《統計學習方法》,這兩本書都是作者花了大量心思編寫的,也是在中國眾多科技書籍中難得的兩本佳作。

英文書籍,可以推薦《Patten Recognition and Machine Learning》,《Elements
of Statistical Learning》
(但是這本書難度比較大,如果你有足夠的耐心,可以慢慢啃,多次的啃。相信每次都會有不同的收穫。我自己已經看了好幾次,但是確實每次都沒有完全看完,但是目前我遇到很多問題,我去翻這本書,還是能找到很多答案,尤其是我做稀疏相關的工作,裡面的相關內容講解非常清楚。)

第四步

這時候,機器學習你已經可以說大概入門了。後面的事情,就得根據你的需求來制定相關的學習路線。

比如,做大數據分析的,得去學學spark,Hadoop等計算框架;

另外,圖模型,深度學習……等等內容,都是一些方向。

自然語言處理、圖像識別、語音識別等等也是一些應用方向,更有大量的領域知識需要結合。

在前沿部分和第一到第三步的內容,如果你能按照這幾步走下來,入門是肯定可以的。至於後面的機器學習精通部分,我也只能說:Good Luck and Have Fun

廣告時間:機器學習、未來智能、機器人相關話題,可關注公眾號:

工業大數據與PHM研究

http://weixin.qq.com/r/A0wDG77E9uOJrfp49xkR (二維碼自動識別)


原來寫過一個段子:ML派坐落美利堅合眾山中,百年來武學奇才輩出,隱然成江湖第一大名門正派,門內有三套入門武功,曰:圖模型加圈,神經網加層,優化目標加正則。有童謠為證:熟練ML入門功,不會作文也會謅。

供參考,哈哈。


入門分兩種:1. 應用的級別 2. 科研的級別。

第一種門檻非常低,跟一門公開課,讀一本書,用Python的SK-Learn解決一些問題。多做編程實現和練習,很快就能用機器學習的方法解決問題。

第二種是research-level,入門比較難。當然,你把機器學習入門定義為在1.5流會議上灌水,其實倒也不難,比如劉知遠寫的那個段子。然而找到真正的前沿領域,能推進這個領域的發展,做一些微小的貢獻,難度是很大的,而且很難在沒有人指導的情況下做到。真正靠譜的方法只有一個:找個靠譜的導師。


20161121更新: 如果你想看的Coursera課程沒有了,推薦使用一款神奇的插件,可以批量下載課程,Github傳送門:coursera-dl/coursera-dl


使用說明在Readme上。


------

剛好是一名小菜正在入門,日學習時間&>8h/d,與樓主共勉,基礎課程學習完了之後,動手實踐吧!


2015/07/01: 根據自己上過的課程,更新課程列表


1. 數學基礎

機器學習必要的數學基礎主要包括:多元微積分,線性代數

  1. Calculus: Single Variable | Calculus One (可選)
  2. Multivariable Calculus
  3. Linear Algebra

2. 統計基礎

  1. Introduction to Statistics: Descriptive Statistics
  2. Probabilistic Systems Analysis and Applied Probability | 概率 ( 可選)
  3. Introduction to Statistics: Inference

3. 編程基礎

  1. Programming for Everybody (Python)
  2. DataCamp: Learn R with R tutorials and coding challenges(R)
  3. Introduction to Computer Science:Build a Search Engine a Social Network

4. 機器學習

  1. Statistical Learning(R)
  2. Machine Learning
  3. 機器學習基石
  4. 機器學習技法

下面是近期的給外行人讀的泛數學科普書籍,由淺至深,作用除了感受數學之美之外,更重要的是可以作用每天學習的雞血,因為這些書都比較好讀……

1.《數學之美》作者:吳軍
2.《 Mathematician"s Lament | 數學家的嘆息》作者:by Paul Lockhart
3.《 Think Stats: Probability and Statistics for Programmers | 統計思維:程序員數學之概率統計 》 作者:Allen B. Downey
4.《 A History of Mathematics | 數學史 》作者:Carl B. Boyer
5.《 Journeys Through Genius | 天才引導的歷程:數學中的偉大定理 》作者:William Dunham
6.《 The Mathematical Experience | 數學經驗 》作者 Philip J.Davis、Reuben Hersh
7.《 Proofs from the Book | 數學天書中的證明 》作者:Martin Aigner、Günter M. Ziegler
8.《 Proofs and Refutations | 證明與反駁-數學發現的邏輯 》作者:Imre Lakatos


本文源《我的數據挖掘學習圖譜》:http://blog.bpteach.com/my-discovery-of-dataming


二〇一七年十一月二十一日更新。

本答案所有的鏈接已全部更新,鏈接見文末。

二〇一七年九月二十九日更新。

距離上次更新這篇回答已經過去兩年多了,當時我還只是個馬上大四的學生,我是電子專業,對於機器學習也是剛剛入門,現在也不知道哪裡來的勇氣回答這個問題,畢竟也是剛入門一個月。後來隨著贊越來越多(這裡要吐槽一下,我這個回答被收藏了2000+次,感覺和贊同數不在一個水平線上。。。),也有很多人給我私信,問我各種相關問題,要資料的還好(畢竟兩年多沒維護,有些鏈接已經失效),還有一些上來就和我討論演算法,甚至有些要我幫忙調參數的.......終於意識到裝X過分了。

好了,回到正題,這次更新是因為看到這幾天又有人開始點贊同,自己接觸機器學習已經兩年多了,項目也做過一些,碩士階段也學了一些理論計算機科學的知識,不管從理論水平還是從實戰經驗來說,都比當年裝逼的時候強多了。現在我剛畢業,回到老家一家語音系統提供商做音頻演算法,工作中暫時還沒接觸到很多機器學習的東西,現在還主要還是搞一些傳統方法。

兩年過去了,從當時對於機器學習的狂熱推崇到現在的理性判斷,即使現在人工智慧被吹的無所不能,我想不管是業內人士還是吃瓜群眾都對這玩意冷靜一點了吧,畢竟市場上還沒有一款真正的人工智慧產品(阿法狗可能算,但它不是產品,再說也和真正的人工智慧差很遠,這個後面會說)。

隨著接觸更多的機器學習演算法,也和很多老師聊過,我漸漸地對AI開始持悲觀態度,甚至認為在我可以看到的將來,還不可能出現一款真的和人一樣智能的產品。

人工智慧,先有人工,再有智能。

首先我想談一下所謂的深度學習,這個詞可能算近幾年EECS領域最火的名詞,各大實驗室瘋狂的採購GPU,演算法研究人員不斷地加深網路層數,計算資源消耗的越來越大(以至於學校實驗室的PhD要用微信調參數,可能是因為久坐腰不行了吧。。。)。然而,你的網路加到一萬層,你也是人工神經網路啊,你依舊和大腦差的遠啊。可能大家都在追求Performance,可是你看看真正智能的東西,比如人腦,根本不追求這個,人經常犯錯,而且真正統計下來,人腦的Robustness可以說是非常的差,睡不好腦子根本不轉,喝酒喝大了又開始瘋轉,既不穩定又不擼棒,而且行為屬於未定義。如果人類只是想創造一個性能爆表的分類器或是自動控制器,那麼現有的機器學習演算法似乎很適合的,但如果非要吹噓這是"人工智慧",這就純屬裝逼或是在炒作概念了。人的智能很多時候來自於靈光一閃(一休那種),跳躍性思維,或者是不按套路出牌。這些事情,不是說可以用一個複雜的非線性函數(神經網路好像最早就是個線性函數加上非線性映射吧)來表達的。最簡單的例子,同一個問題,人可能今天有個點子,明天又有新點子,但是現在的模型,對於同一個輸入輸出都是相同的吧(可能會有隨機的,我只是說我學過的)。人的智能很多都來自於偶然的發現,和隨機過程很類似,也就是這些不確定性的加入,人才有了豐富的情感與理智,而這些,阿法狗能做到嗎?

阿法狗是打贏了柯潔(也可以說是干翻了),不過在線的阿法狗下一盤棋要多少計算資源,多少能源消耗(貌似電費很嚇人,畢竟不是吃狗糧),而柯潔和阿法狗下一盤,估計早上就吃了籠小籠包吧。。。阿法狗下棋這麼牛,估計主要還是得益於硬體的提升,演算法真的有用,但沒有谷歌的強大機房,參數都沒法訓練出來。

人之所以為人,因為人就是人,是智能,而不是人工智慧,就算人士上帝女媧造的,那也的算上帝的手工智能。神經網路看起來好像真的和人腦的拓撲結構很像耶,連每個Node都叫做Neuron哎。不過,工作方式和人腦一樣嗎?完全不一樣吧,人腦的學習,大多數是非結構化的數據,既沒有規則,也沒有邏輯,但就算是嬰兒,也能知道花花草草是不會走路的,人的身體上有無數的感覺器官(感測器),這些數據不像JSON一樣,可以機械的解析,人就是要從無序中找到規律,從一團亂麻中找出邏輯。現在的神經網路,深度學習,深度強化學習,還是生成式對抗網路,不論性能,就論智能,可能都比不上一個嬰兒。

不過以上的觀點,屬於本人的小看法,我也很久沒有追最新的研究成果了,可能很多看法已經過時。說到現在發現已經跑偏了,題在問怎麼入門,而我的回答貌似在勸大家放棄(畢竟是從入門到出家嘛),現在回歸正題。

正題就是,很簡單,剛學的時候要搞清楚一些演算法細節,要自己去推公式,自己動手實現以下,但真正實踐中,絕大多數問題可能線性回歸(分類的話就Logistic回歸)就已經很好用,大多數現實問題的解決方法都很簡單,固然追求炫酷的演算法,神級的性能是有用的,但再牛逼的演算法,不與業務聯繫結合,都是垃圾,真正的機器學習演算法工程師或是數據分析師是必須要對公司業務有深刻的理解的,老闆不會去看你的性能或準確率有多高演算法有多炫,老闆(或是現實問題)要求的是你能解釋數據,從數據中找出邏輯,並且做個Presentaion能讓老闆理解這種邏輯,然後指導領導做決定。這才是數據挖掘(或者叫機器學習)的初衷(當然從照片中找出一隻狗或者理解自然語言也是一種非常好的應用,但我覺得通過分析數據來指導人類的行為才是機器學習最開始的目的吧)。

總的來說,從一開始就有這種意識是有必要的。從實際問題出發,而不是從一個理論假設問題(比如Binary Classification)來看,這樣有助於你提高對數據的敏感性。

不懂業務的數據分析師不是好的演算法程序員。

下面來談一下演算法,深度學習大家可以去深入了解(畢竟準確率完爆傳統演算法),不過個人來說並不喜歡這種簡單粗暴沒有多少理論價值的東西。

機器學習真正吸引我的是看起來很弱的傳統演算法還有理論。

從Hoeffding不等式到VC Bound,學完你覺得真尼瑪牛逼,這才叫學術,具體大家去找林軒田。

從線性回歸到SVM,貌似沒什麼關係,不過兩者可以結合起來做Support Vector Regression,有了Kernel,基本上所有的傳統演算法都能套上去,Polynomial/Gaussian/Mercer Kernel再做一做結合,會出來Kernel Logistic Regression, Probabilistic SVM這種神奇的東西,可能還會有Kernal k-Means這種東西。再來說說Aggregation,所謂的Ensemble方法,學完又打開新世界的後門。你可以用一個Decision Stump(就是一刀切兩瓣)做一下Bagging,Blending,Boosting,然後發現模型複雜度差不多和神經網路差不多了,然而並不怎麼Overffiting,如果再加上RBF Kernel,然後又出現了一個新玩意。個人最喜歡的方法就是Ensemble Learning,什麼Adaptive Boosting(AdaBoost),Gradient Boosted Decision Tree(GBDT)完全是神級發明。其他一些特徵提取的方法也很有用, 比如Matrix Factorization,Autoencoder,PCA,ICA。最後就是優化方法(Stochastic Gradient Descent,Convex Optimization)和一些Regularization(L1/2-Norm)。一口氣說了很多方法,你會發現,只要有最簡單的方法,配合一些技巧(集成或者Kernel)就會衍生出很多強大演算法,而且這些演算法都可以用VC的理論來解釋,再加上理解業務,很多問題基本都可以下手了。

最後,給想入門的一點小建議,學好線性代數,學好線性代數,學好線性代數!最好高數也許的好,不過基本會求偏微分就行了。先學機器學習,學到各種矩陣運算蒙逼了,再回去翻線代課本,特別提這一點是因為原來看到很多人為了學物理然後先去學數學(大家應該知道我的意思,想學啥就上,別等到所有材料都準備好了才下鍋)。

今天先更新到這,有空再把底下的鏈接更新一下。


本人原來是學EE的,現在馬上大四選了個機器學習方向的畢業論文,準備畢業後讀機器學習方面的研究生了。現在正是暑假,在家自學機器學習,我就按照我的學習步驟腳要說一下吧。這裡推薦的都是一些很容易得到的資源,也是推薦的人比較多的。

1.我讀的第一本書是大名鼎鼎的ESL作者寫的另外一本簡略版ESL:Introduction to Statistical Learning。這本書刪去了複雜的數學推導,以應用的形式把機器學習的基本演算法介紹出來,好像常規的演算法除了神經網路其他都涉及了,並且更好的是,每一章後面都有Lab,而且是用R語言來做的,對於想學習R語言的童鞋來說又是一大福利。這本書我正在看第二遍。

2.Andrew Ng的機器學習公開課,這裡推薦的不是C站上的,而是斯坦福現場上課的錄像,網易公開課上有(斯坦福大學公開課 :機器學習課程),原始的課程地址(CS 229: Machine Learning (Course handouts))可以下到講義和作業以及答案,這裡推薦好好研究一下講義和作業,很有收穫。這門課我正在看第二遍,也在研究作業作業題。

3.來自多倫多大學的機器學習與數據挖掘課程,講義寫的非常好,不過很難找到,這裡給出網盤地址(Machine Learning and Data Mining Lecture Notes.pdf_免費高速下載),原始課程地址(Professor Richard Zemel)上有PPT,作業和考試一些內容。

4.巨多人推薦的MIT線性代數公開課(麻省理工公開課:線性代數),來自Gilbert Strang,在這裡廢話不多說, 機器學習書籍里常見到很多矩陣運算還有SVD什麼的,看完這個就不怕啦。

5.來自Sam Roweis的機器學習課程,很多人推薦他的PPT(CSC2515F : lectures),寫的超級詳細和精緻,適合列印出來沒事的時候翻翻。

6.同樣是機器學習的數學基礎,統計學也是要學一學的,機器學習中常見的極大似然法就是一個統計學的基礎理論,在這裡推薦國立交大的陳鄰安老師主講的統計學(國立交通大學開放式課程(OpenCourseWare, OCW))和高等統計學(國立交通大學開放式課程(OpenCourseWare, OCW)),講的好懂但不淺顯。

GitHub上有個很好的關於機器學習和深度學習的合集(Qix/dl.md at master · ty4z2008/Qix · GitHub),資料很多,慢慢淘會找到一些好東西的。

暫時我看的資料就這麼多,又補充會隨時回來更新的。


更新列表:

  1. Introduction to Statistical Learning (Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani)
  2. Machine Learning (Andrew Ng)
  3. Machine Learning and Data Mining (="http://http://www.cs.toronto.edu/~zemel/inquiry/home.php">Richard Zemel)
  4. Linear Algebra (Gilbert Strang):
  5. Machine Learning (Geoff Hinton and ="http://http://www.cs.toronto.edu/~zemel/inquiry/home.php">Richard Zemel):
  6. 統計學, 高等統計學 (陳鄰安)

機器學慣用到的數學並不難,很多較難的數學(如抽象代數、微分幾何)目前在ML問題上也沒有用武之地。相比數學,我覺得更重要的一點是對問題和數據的insight。很多經典漂亮的模型,如HMM、CRF、LDA都是建立在良好的motivation和insight之上,數學並不是瓶頸。至於怎麼培養insight 恐怕很難說,目前能做的就是多讀、多想、多試。


我也談談自己的經驗。

機器學習說簡單就簡單,說難就難,但如果一個人不夠聰明的話,他大概很難知道機器學習哪裡難。基本上要學習機器學習,先修課程是algebra, calculus, probability theory, linear regression。這幾門科學好了再學Machine learning是事半功倍的。此外近代數學的東西也要懂, functional analysis啥的。其實不懂也行,只是現在文獻總是喜歡引用裡面的概念,懂一些讀起來方便。(我就很討厭manifold learning這個名字,把許多人都嚇跑了)real analysis最好用心學,對序列或函數的收斂性的理解很能幫助你了解這些模型的精髓。Optimization theory (ref. Convex optimization by Boyd)也是重中之重,在前面幾門課學好並有一定python基礎的時候可以仔細讀一讀。

其實機器學習需要看的書不多,必讀的是elements of statistical learning。這本書涵蓋範圍很廣,且深入淺出,習題也有一定難度,適合自學。你看過這本之後就知道其他什麼書可以看什麼書不需要看了。

再下來就是練習,這個是重中之重。我覺得做kaggle的比賽最有效。可以仿照別人寫寫code,也可以自己想想辦法,但最主要的是要能夠迅速完成編程並給出結果。我見過許多人光討論就可以幾天,但真正動起手來就萎了。

最後就是讀source code並自己實現幾個model from scratch。這個比較難,但是確是最鍛煉人的。具體語言應該是越基礎越好,比如C/C++什麼的。等你自己寫完了一兩個model,再去用別人的package就會覺得得心應手許多了。我真心覺得這個比上coursera那些課強多了。上coursera最大的缺點就是容易變得似懂非懂紙上談兵。我自己program過ensemble trees(C++)和deep learning solver(Python),受益頗多。至於讀source code,我覺得libsvm寫得很好啊,不過演算法對大一大二新生是難了點。此外,基於python的工具包scikit-learn的sourcecode很好讀,建議大家多看看。

我看回答中有提到Matlab,我覺的matlab處理字元很麻煩,現在很多dataset都需要處理字元,所以並不是好的選擇。

補充一點就是要學會發散思維,學會如何從data中找feature。關於這個的教程很缺,需要大量練習及一些天賦。

說實話machine learning雖然門檻不高,但真心是聰明人的遊戲。

-------------------------------------------------------

很久之前寫的東西了,不過感覺文字打擊了很多人的積極性。

-------------------------------------------------------
[2017年2月7日]沒想到直到今天還有人點贊。我發幾頁自己之前寫的notes吧。看起來是笨鳥笨著飛的辦法,但是效果真的很好。(再加上投行那幾年把MS Word能力練得很強,寫起來比Latex快多了)


2014/10/23更新:

這兩天看到李航老師的《統計學習方法》,感覺寫的非常好,適合入門,機器學習的基本概念都有,但是不太深入,中文書寫,所有專業名詞給出英文翻譯。適合給初學者建立概念,可以系統的了解機器學習。

原答案:
強烈推薦這個UFLDL教程 - Ufldl。這是Andrew Ng寫的關於非監督特徵學習與深度學習的教程,關鍵是有一批無私且專業的網友,將其翻譯成中文,並有中英文對照,與Andrew Ng商量後貼在了原網址上。非常感謝這些人啊。
對於一個初學者,如果單純從英文教材(視頻)入手的話,會比較吃力,很多概念都沒建立起來,很多術語都沒有掌握,而這個教程設計機器學習很多的基本概念,並附有matlab習題,通過循序漸進的練習,可以更快掌握基本概念。
另外這個的好處是不像一般教材,面面俱到,很多追究的太深,不利於初學者建立概念!有了這個的基礎之後,再去看相關著作或者論文,肯定得心應手。


我要翻譯一把quora了,再加點我的理解,我相信會是一個好答案,鏈接我都放到一起了,沒插入到正文中,要求其實比較高了,我覺得我自己都差很遠很遠~~~我盡量持續更新翻譯質量以及自己理解

1. Python/C++/R/Java - you will probably want to learn all of these languages at some point if you want a job in machine-learning. Python"s Numpy and Scipy libraries [2] are awesome because they have similar functionality to MATLAB, but can be easily integrated into a web service and also used in Hadoop (see below). C++ will be needed to speed code up. R [3] is great for statistics and plots, and Hadoop [4] is written in Java, so you may need to implement mappers and reducers in Java (although you could use a scripting language via Hadoop streaming [5])

首先,你要熟悉這四種語言。Python因為開源的庫比較多,可以看看Numpy和Scipy這兩個庫,這兩個都可以很好的融入網站開發以及Hadoop。C++可以讓你的代碼跑的更快,R則是一個很好地統計工具。而你想很好地使用Hadoop你也必須懂得java,以及如何實現map reduce

2. Probability and Statistics: A good portion of learning algorithms are based on this theory. Naive Bayes [6], Gaussian Mixture Models [7], Hidden Markov Models [8], to name a few. You need to have a firm understanding of Probability and Stats to understand these models. Go nuts and study measure theory [9]. Use statistics as an model evaluation metric: confusion matrices, receiver-operator curves, p-values, etc.

我推薦統計學習方法 李航寫的,這算的上我mentor的mentor了。理解一些概率的理論,比如貝葉斯,SVM,CRF,HMM,決策樹,AdaBoost,邏輯斯蒂回歸,然後再稍微看看怎麼做evaluation 比如P R F。也可以再看看假設檢驗的一些東西。

3. Applied Math + Algorithms: For discriminate models like SVMs [10], you need to have a firm understanding of algorithm theory. Even though you will probably never need to implement an SVM from scratch, it helps to understand how the algorithm works. You will need to understand subjects like convex optimization [11], gradient decent [12], quadratic programming [13], lagrange [14], partial differential equations [15], etc. Get used to looking at summations [16].

機器學習畢竟是需要極強極強數學基礎的。我希望開始可以深入的了解一些演算法的本質,SVM是個很好的下手點。可以從此入手,看看拉格朗日,凸優化都是些什麼

4. Distributed Computing: Most machine learning jobs require working with large data sets these days (see Data Science) [17]. You cannot process this data on a single machine, you will have to distribute it across an entire cluster. Projects like Apache Hadoop [4] and cloud services like Amazon"s EC2 [18] makes this very easy and cost-effective. Although Hadoop abstracts away a lot of the hard-core, distributed computing problems, you still need to have a firm understanding of map-reduce [22], distribute-file systems [19], etc. You will most likely want to check out Apache Mahout [20] and Apache Whirr [21].

熟悉分布計算,機器學習當今必須是多台機器跑大數據,要不然沒啥意義。請熟悉Hadoop,這對找工作有很大很大的意義。百度等公司都需要hadoop基礎。

5. Expertise in Unix Tools: Unless you are very fortunate, you are going to need to modify the format of your data sets so they can be loaded into R,Hadoop,HBase [23],etc. You can use a scripting language like python (using re) to do this but the best approach is probably just master all of the awesome unix tools that were designed for this: cat [24], grep [25], find [26], awk [27], sed [28], sort [29], cut [30], tr [31], and many more. Since all of the processing will most likely be on linux-based machine (Hadoop doesnt run on Window I believe), you will have access to these tools. You should learn to love them and use them as much as possible. They certainly have made my life a lot easier. A great example can be found here [1].

熟悉Unix的Tool以及命令。百度等公司都是依靠Linux工作的,可能現在依靠Windows的Service公司已經比較少了。所以怎麼也要熟悉Unix操作系統的這些指令吧。我記得有個百度的面試題就是問文件複製的事情。

6. Become familiar with the Hadoop sub-projects: HBase, Zookeeper [32], Hive [33], Mahout, etc. These projects can help you store/access your data, and they scale.

機器學習終究和大數據息息相關,所以Hadoop的子項目要關注,比如HBase Zookeeper Hive等等

7. Learn about advanced signal processing techniques: feature extraction is one of the most important parts of machine-learning. If your features suck, no matter which algorithm you choose, your going to see horrible performance. Depending on the type of problem you are trying to solve, you may be able to utilize really cool advance signal processing algorithms like: wavelets [42], shearlets [43], curvelets [44], contourlets [45], bandlets [46]. Learn about time-frequency analysis [47], and try to apply it to your problems. If you have not read about Fourier Analysis[48] and Convolution[49], you will need to learn about this stuff too. The ladder is signal processing 101 stuff though.

這裡主要是在講特徵的提取問題。無論是分類(classification)還是回歸(regression)問題,都要解決特徵選擇和抽取(extraction)的問題。他給出了一些基礎的特徵抽取的工具如小波等,同時說需要掌握傅里葉分析和卷積等等。這部分我不大了解,大概就是說信號處理你要懂,比如傅里葉這些。。。

Finally, practice and read as much as you can. In your free time, read papers like Google Map-Reduce [34], Google File System [35], Google Big Table [36], The Unreasonable Effectiveness of Data [37],etc There are great free machine learning books online and you should read those also. [38][39][40]. Here is an awesome course I found and re-posted on github [41]. Instead of using open source packages, code up your own, and compare the results. If you can code an SVM from scratch, you will understand the concept of support vectors, gamma, cost, hyperplanes, etc. It"s easy to just load some data up and start training, the hard part is making sense of it all.

總之機器學習如果想要入門分為兩方面:
一方面是去看演算法,需要極強的數理基礎(真的是極強的),從SVM入手,一點點理解。
另一方面是學工具,比如分散式的一些工具以及Unix~

Good luck.
祝好

[1] http://radar.oreilly.com/2011/04...

[2] NumPy — Numpy

[3] The R Project for Statistical Computing

[4] Welcome to Apache? Hadoop?!

[5] http://hadoop.apache.org/common/...

[6] http://en.wikipedia.org/wiki/Nai...

[7] http://en.wikipedia.org/wiki/Mix...

[8] http://en.wikipedia.org/wiki/Hid...

[9] http://en.wikipedia.org/wiki/Mea...

[10] http://en.wikipedia.org/wiki/Sup...

[11] http://en.wikipedia.org/wiki/Con...

[12] http://en.wikipedia.org/wiki/Gra...

[13] http://en.wikipedia.org/wiki/Qua...

[14] http://en.wikipedia.org/wiki/Lag...

[15] http://en.wikipedia.org/wiki/Par...

[16] http://en.wikipedia.org/wiki/Sum...

[17] http://radar.oreilly.com/2010/06...

[18] AWS | Amazon Elastic Compute Cloud (EC2)

[19] http://en.wikipedia.org/wiki/Goo...

[20] Apache Mahout: Scalable machine learning and data mining

[21] http://incubator.apache.org/whirr/

[22] http://en.wikipedia.org/wiki/Map...

[23] HBase -
Apache HBase? Home

[24] http://en.wikipedia.org/wiki/Cat...

[25] grep

[26] http://en.wikipedia.org/wiki/Find

[27] AWK

[28] sed

[29] http://en.wikipedia.org/wiki/Sor...

[30] http://en.wikipedia.org/wiki/Cut...

[31] http://en.wikipedia.org/wiki/Tr_...

[32] Apache ZooKeeper

[33] Apache Hive TM

[34] http://static.googleusercontent....

[35]http://static.googleusercontent....

[36]http://static.googleusercontent....

[37]http://static.googleusercontent....

[38] http://www.ics.uci.edu/~welling/...

[39] http://www.stanford.edu/~hastie/...

[40] http://infolab.stanford.edu/~ull...

[41] https://github.com/josephmisiti/...

[42] http://en.wikipedia.org/wiki/Wav...

[43] http://www.shearlet.uni-osnabrue...

[44] http://math.mit.edu/icg/papers/F...

[45] http://www.ifp.illinois.edu/~min...

[46] http://www.cmap.polytechnique.fr...

[47 ]http://en.wikipedia.org/wiki/Tim...

[48] http://en.wikipedia.org/wiki/Fou...

[49 ]http://en.wikipedia.org/wiki/Con...


不同意第一名的答案。

知乎一直這樣,精英主義太嚴重,好像不表現得專業點、不長點就不是好答案。說白了就是裝b。知乎不是wikipedia(wikipedia適合查資料,不適合從零開始學習)。

題主的問題是這樣的:

本人大學本科,對機器學習很感興趣,想從事這方面的研究。在網上看到機器學習有一些經典書如Bishop的PRML, Tom Mitchell的machine learning,還有pattern classification,不知該如何入門?那本書比較容易理解?

注意題主是本科,現在感興趣,希望能入門。讓一個想要入門機器學習的本科生上來就學Hadoop,這靠譜嗎?估計等題主熟練掌握了Hadoop、MapReduce、HBase,本科也快結束了。這種問題天生就不適合長答案。對一個初學者,無重點地給出很多資料,除了能打擊學習興趣、擾亂學習目標之外沒有任何作用。


同意 @Darkscope@苗憶南 等人的答案。

題主既然是初學者,就要從簡單入手。而大學本科的概率論線性代數對於基本的入手已經足夠了。Andrew Ng的課很適合入門,值得看一看,網上的相關資料也很多,例如這個:Machine Learning,寫得很詳細。如果題主英文水平有限,那可以看一些中文書籍入門。

入門之後,對常用演算法有了基本了解之後,就可以多學一些原理性知識了,比如統計理論、矩陣理論、信號處理、分散式計算等等。這時排名第一的答案才比較有用。


最近在學teradata的aster數據挖掘工具,果然商業的框架跟hadoop的易學性易用性可拓展性都有天壤之別啊。建議有興趣的同學自查資料,軟體貴的驚人,但是對於自身維護團隊水平一般的企業還是值得買的

-----------

不邀自來,結合我現在的工作以及當年機器學習的經驗來講一下自己的一些感受。
首先從機器學習的全流程說起。
輸入:機器學習按輸入數據分可以分結構化數據(表),半結構化數據(文本,日誌等),非結構化數據(圖片,錄像),後兩者對應的分支中比較出名分別是文本挖掘和圖像挖掘,其實就是通過提取特徵的方式 把半結構化數據 非結構化數據轉化為結構化數據,然後進行機器學習。
按輸入數據是否預測狀態分,可以分為有監督學習數據及無監督學習數據,直接決定後續模型是使用分類模型還是聚類模型。
同時如果數據量到達了T級,就要考慮時候hadoop框架了,這裡要說明的是,hadoop框架只是解決大數據處理效率瓶頸的工具,除非你志向是做架構師,不然不用深究,掌握hadoop家族的sql處理工具hive和機器學習工具mahout就可以了,需要掌握java和sql,這是基礎。
下一步,數據清洗和數據降維,在數據清洗方面不是學術界研究的重點,清洗方法有很多,主要通過描述性統計量填補缺失值和極端值,數據降維方面有較多比較出名的演算法,如主成分分析,lasso,LDA線性判別分析,變數聚類等,數據降維是重點,因為維度過大容易產生維度災難和過度擬合問題。
然後是數據分區(有監督學習才需要做),分成訓練集,驗證集,測試集,分別用於訓練模型,模型內修正,多模型效果對比用。不展開討論。
接著建模,分為分類演算法,聚類演算法,規則關聯演算法,分類演算法是大頭,建議分別拜讀支持向量機,概率圖模型,神經網路(雖然我不喜歡但是google的深度學習就是用的神經網路),決策樹(C4.5),邏輯回歸(吐槽:線性回歸什麼的看不看得看個人水平),混合高斯模型等,聚類演算法有KNN,LDA潛在迪力克雷分析(做文本挖掘效果一流),聚類演算法研究不多,大多機器學習演算法都是基於有監督學習的,即分類演算法。規則關聯演算法有最簡單的規則關聯,路徑關聯分析,及協同過濾(推薦系統首選,輸入數據量太大數據太稀疏跑數效率很低一般需要hadoop支持),模型是機器學習的核心,還有一些優化模型,如EM模型等,建議閱讀增加知識廣度,要求學習人員要懂以下課程:概率論,高數,線性優化,線性代數還有英文,也可以邊看論文邊學。書籍的話推薦數據挖掘十大演算法作為入門索引,然後根據每章節的參考文獻找原文閱讀,記得把公式推導一遍。
結果評估:本來不應該是重點,但是從個人學習和工作經歷發現,有很多人不是很會看模型結果,甚至包括一些專業人士。所以如果有志做機器學習的千萬要學會看結果,不然就丟人丟大了。
最直接的兩個指標準確度percision和召回度recall,分別描述模型的精度和泛化性的,模型結果應在兩者取得均衡。最小平方誤差也是描述準確度的,演算法不一樣,大家更喜歡用這個評估模型精度。還有一些K-S值,基尼值,ROC值也是描述準確度和擬合度的,不同的軟體會使用不同的指標,注意一下。還有就是提升度,事件捕獲率這些就是描述分類預測下前百分之幾數據的預測準確性情況的,不展開討論。最直接的學法就是認真讀論文的實驗部分,看看它的指標評價量。
最後是工具和語言,按現在數據挖掘與機器學習的趨勢,必須掌握java,python,原因是hadoop是處理大數據的框架,已成趨勢,hadoop是java寫的,挖掘工具mahout是java寫的。python的好處在於底層基於C,語法簡單,效率高,而且有很多開源的演算法可以直接用,支持mapreduce。可以選擇掌握R,同python,但是R效率木有python高,如果是針對商業分析建議學習SAS,因為它集成了一套專業的數據可視化及數據分析方案,大大方便了數據展示功能,這是作為商業分析所必須的。
最後補充一點,很多做數據挖掘和機器學習的人最後都走火入魔執著技術忽略了業務的重要性,忽略了模型可解釋性的重要性,埋頭苦幹做出業務人員不能理解的黑箱模型,無法說服業務使用,最終淪為雞肋的存在,所以在學習過程中要時刻設想技術適應的業務場景,在演算法效果接近時選擇高可解釋性演算法,做好結果的圖形化展示,讓業務理解,這才是王道。
補充,andrew ng的公開課不錯,但還是建議先看論文。


資源一個比一個多,反而連點開的慾望都沒有了。

就怕存了那麼多資源,依舊學不完一個。(有的還有大量拾人牙慧的二手垃圾,還有人讓看csapp和計算機網路的,和機器學習有什麼關係。。莫名幾百贊。。。不是你寫的長就有道理啊老哥。。。知乎變成騙乎了要。。。。黑人問號)

入門的難度就被你們這些低信噪比的信息引導到難於上青天了,拜託,只是想入個門而已。。。

我提供一個新的角度:亂拳打死老師傅。直接就操練起來,缺啥補啥。後面演算法不行補演算法,數學不行補數學,Python不熟補Python。

語言首選Python(這個原因就不用多說了),直接操練起來一些實際的項目。

這塊不熟的話可以看一本三百到五百頁的Python語法書,比如《Python基礎教程 第二版》《Python Cookbook》之類的。

《機器學習實戰》這門書恰好能給你一個籠統入門的概念(如果演算法像我一樣稀爛的話)。然後就找個合手的庫寫具體的項目吧。要被吹上天的西瓜書反正我看起來挺有難度的,數學忘得一乾二淨。

想找個課程逼著自己操練做個入門的話,可以來景略集智(https://jizhi.im)(簡稱集智)看看這門課:深度學習之Hello World - 集智課堂 。當然這個是深度學習的,跟機器學習還是有一些區別,不過道理相通,寫著寫著你就發現,還是得對著某些庫的官方文檔擼課程里的代碼(項目框架和官方doc的互補)。

如果本身基礎不錯的話,深度學習的理論基礎 - 集智課堂 這個看過了都說好,而且信息密度比較大。

社區還有一些免費的資源(入門指南、數據集之類的):深度學習資源帖 - 集智社區。

有問題還可以發帖提問。

行了,行動吧。


coursera上的andrew ng教授的公開課,妥妥的,絕對靠譜 https://class.coursera.org/ml/class/index


之前寫過一篇轉行的文章,希望對樓主有幫助~

轉行數據挖掘和機器學習 - 知乎專欄

原文來自微信公眾號「數學人生」,鏈接是:轉行到數據挖掘與機器學習(三)

回頭看一下,目前已經從純數學專業轉行到數據挖掘和機器學習領域有一年半了,又到了該總結轉行經驗的時候。還是那句老話,大牛們請主動忽視以下內容,初學者可以用作參考。

[1]編程語言

目前工業界的機器學習編程語言很多,基於個人的一些淺顯的工作經驗,發現目前比較常用的編程語言是 Python 和 HIVE。

通常來說,HIVE 是為了從資料庫中提取數據,然後進行必要的數據過濾,數據分析,數據提取。對於 HIVE,需要掌握的內容有以下幾點:聚合函數,數學函數,字元串函數,表格的連接函數,條件語句等。HIVE 的經典教材有兩本,分別是:

《HIVE編程指南》,作者 Edward Capriolo

《SQL基礎教程》,作者 Mick

PS:個人特別喜歡《SQL基礎教程》,極易上手,易學易通。之前寫過一篇文章總結 HIVE 的使用細節,提供給大家做參考:《HIVE基礎介紹》

對於編程語言 Python 來說,目前深度學習的框架 Tensorflow 等,都可以使用 Python 進行編程。除此之外,Python 還有各種各樣的數值計算庫和機器學習庫等著大家去使用,例如 Numpy,Scipy,ScikitLearn,matplotlib 等。其中,Scikitlearn 的文檔是非常詳細的,特別適合初學者入門學習。至於 Python 教材的話,其實有很多,例如:《Python基礎教程》,作者是 Magnus Lie Hetland,這本書特別適合初學者看。如果是網路教材的話,推薦參考 廖雪峰 的官方網站,地址是:Home - 廖雪峰的官方網站

至於開發環境的話,一般來說公司都會使用Linux,有一本書可以提供給大家做參考:《Linux命令行與Shell腳本編程大全》,作者 Richard Blum/ Christine Bresnahan

既然是處理大數據,那麼 MapReduce,Hadoop,Spark 等內容需要了解。參考文章:《一文看懂大數據的生態技術圈,Hadoop,Hive,Spark都有了》

[2]機器學習

既然是做數據挖掘和機器學習的工作,那每個人都需要了解這方面的內容。在這裡筆者推薦教材《機器學習實戰》,作者是 Peter Harrington。閱讀這本書需要讀者掌握 Python 語言,加上 Numpy,Scipy,matplotlib 函數庫的一些基礎內容。源代碼的話可以在網上找到,然後根據書本的章節逐步學習即可。

除了《機器學習實戰》之外,周志華老師所寫的《機器學習》西瓜書也是不錯的選擇。建議初學者結合這兩本書一起學習,周志華老師的《機器學習》介紹了多種機器學習演算法,並有簡單的例子和數學原理進行描述。

既然提到了機器學習,那就簡單地總結一下裡面的一些演算法吧。

如果是做推薦業務的團隊,那麼使用地最多的還是邏輯回歸演算法(Logistic Regression),ItemCF 和 UserCF,物質擴散和熱傳導演算法(Heat Spreading) 演算法。由於 LR 是使用線性的方法來處理非線性的問題,並且實際的環境中會有物品的特徵和用戶的特徵,因此會導致特徵工程比較複雜,交叉項多(二維或者三維的交叉)。因此,在實際的工作中,特徵工程的作用就顯得十分重要。工程師和業務人員要根據物品和用戶進行必要的特徵構造,形成物品特徵,用戶特徵,交叉特徵等。之前也寫過一篇文章《特徵工程簡介》,供大家參考。

除此之外,涉及到在線優化的問題,Google 在幾年前提出了一個 FTRL 演算法。論文是 Ad Click Prediction a View from the Trenches,裡面會涉及 SGD 演算法,Truncated Gradient 演算法,RDA 演算法,FOBOS 演算法,以及最終的 FTRL 演算法等。

比邏輯回歸演算法還要簡單的那就是線性回歸演算法了,目的都是針對連續型的數據進行預測,結果都十分容易解釋。除了直接的線性回歸之外,還有局部加權線性回歸,嶺回歸,Lasso 和前向逐步線性回歸等演算法。這些細節可以參考文章《線性回歸》。

如果是針對轉行的同學的話,那麼大家肯定關心的是如何把之前的技能平滑地切入到新的領域中。如果學過數理統計的話,那麼《最大似然估計》就是一個不錯的切入點。

除了上面所說的演算法,支持向量機演算法(Support Vector Machine),GBDT 演算法,隨機森林演算法,XgBoost 演算法都是在工業界比較常見的演算法。目前個人還沒有對這類演算法進行過總結,不過還是強烈建議大家去學習一下。2017年筆者應該會對這些演算法進行一些個人的總結。

無監督學習演算法也是整個機器學習領域的一大方向。提到無監督學習演算法,就不得不提到聚類演算法,其中最經典的還是 Kmeans 演算法。這個可以參見文章《聚類演算法(一)》。聚類演算法的反面就是異常點檢測演算法,之前在異常點檢測演算法上面研究過一陣,也寫過不少的文章。例如:

《異常點檢測演算法(一)》,《異常點檢測演算法(二)》,《異常點檢測演算法(三)》,《異常點檢測演算法綜述》。

除此之外,強化學習也是機器學習的一個研究方向。隨著 DeepMind 公司的 AlphaGo 打敗圍棋頂尖選手,能夠自動玩遊戲的智能 AI,強化學習已經成為了一個比較熱門的研究方向。之前寫過一篇關於強化學習和泛函分析的小文章《當強化學習遇見泛函分析》,供大家參考。

目前深度學習已經成為了機器學習的熱門研究方向,無論是卷積神經網路 CNN 還是循環神經網路 RNN,都是研究的主流。之前在學習反向傳播演算法的時候,寫過一篇如何基於 BP 演算法訓練 RNN 網路的文章《循環神經網路-Reccurent Neural Networks》。

[3]數理統計

數理統計方面還是有一些東西是蠻常用的。例如時間序列模型 ARMA 模型等。一些數據的指標,例如均值,方差,標準差,變異係數,相關係數,ROC曲線和AUC,召回率和正確率,交叉驗證等。

[4]業務場景

在實際的工作中,最重要的一個因素就是理解業務,只有理解了業務的需求,才能夠更好的完成領導所布置的任務。在做事情的時候,一定要形成閉環。那就是:了解業務需求-》調研業界方案-》查看是否適用-》上線效果。通過最終的效果和我們要做成的目標,來反推當前需要做的事情。一些學生時代的思維方式需要逐漸拋棄,參考文章:《開公眾號之後的一些感想》。


強烈推薦台大的這門《機器學習基石》。我感覺這門比Andrew Ng的講得更深入更透徹更直觀,而且作業題也需要更多的思考。給個coursera的鏈接:https://class.coursera.org/ntumlone-001


我怎麼覺得《統計學習方法》不適合入門呢?有點像中國的教科書,一上來就列很多公式,然後開始一通推導,有些還不如PRML講得通俗。

如果是工程師的話,我覺得Logistic Regression是一個比較適合入門的東西,通過它可以搞懂:
1、分類和回歸,在這一個演算法中都得到了體現;
2、正則,從貝葉斯觀點理解最大似然和最大後驗的區別;
3、最優化,最好搞懂如何通過梯度下降或者隨機梯度下降得到LR模型參數;
4、特徵選擇,特徵轉換等特徵工程;
5、模型評價。

從它入手,可以繼續深入指數族;
通過SGD,可以對不同損失函數去嘗試一下優化過程;
另外,LR模型應用很廣,廣告系統和推薦系統都喜歡用這玩意兒。


分聽課和看書兩個部分來說:
入門:
視頻可以看coursera上Andrew Ng的machine learning課
書國內的可以看李航的統計學習方法,綜合了老外的基本ML經典,寫得淺顯易懂,書也比較薄,好讀,學習曲線不會太陡。國外的建議先看pattern classification,較其他的簡單一些。

進階:
視頻的話可以看看coursera上的一些數值計算和最優化課程
書老外的大部頭多了,經典的比如PRML(patten recognition and machine learning),elements fo statistical learning(此書雖名叫基礎,實則十分艱深難讀,不推薦初學者學習)。這兩本都能讀完且讀懂了,那是看最前沿的ml的paper也不會發怵了


分享機器學習學習資料(需要的自己拿去):

鏈接: http://pan.baidu.com/s/1c2iCrM4 密碼: f3fa

鏈接: http://pan.baidu.com/s/1c1TdmSg 密碼: 4rb4

鏈接: http://pan.baidu.com/s/1kVjJVaZ 密碼: 47dc
以上所有文件解壓密碼:
鏈接: http://pan.baidu.com/s/1o8MT194 密碼: tya2需要更多其它學習資料可以私信我,有空就回。歡迎關注我,別光顧著收藏。
歡迎關注我的專欄:https://zhuanlan.zhihu.com/passer


推薦閱讀:

有哪些你看了以後大呼過癮的數據分析書?
吳恩達 (Andrew Ng) 是一個怎樣的人?
偏差和方差有什麼區別?
微軟識花是怎麼實現的?
機器學習&數據挖掘方向的計算機研究生該如何整體提升自己的技術水平?

TAG:機器學習 |