機器學習,數據挖掘在研究生階段大概要學些什麼?

機器學習,數據挖掘在研究生階段大概要學些什麼?能給一個梗概或者方向么? 最好可以列出主要的課程或者相關資源,謝謝


三個字:勤動手~~

其實機器學習和數據挖掘是兩個相差的比較多的領域,機器學習比較偏向數學問題的推導, 所以在頂會上的很多paper更看重idea,不是很看重實驗是否來源於真實數據(有一些實驗數據會自己構造,比如Andrew Ng的譜聚類自己構造了一個圖,圖裡面的點組成了四個英文字母NIPS,他證明他的譜聚類比之前的聚類方法好) 來讓我們感受一下這個飄逸的圖

而數據挖掘說土點就是老子就是會抽feature~的領域,比如Kaggle上的入門題Titanic,我們都知道善良的美帝人民喜愛拯救小孩子(快!讓小孩先走),所以年齡對於生還人員預測很重要,可是有些人的Age缺失了在給定的數據中。咱們這種土人只會給缺失的人扔個年齡平均數,然而那些有洞察力的人,認為他的姓名中暗示了年齡,Mrs與Miss,Mr與Master分別對應了年齡的某個區間,然後他們刁刁的可以用邏輯斯蒂回歸模型就拿到很好的分數。

對於找工作解決實際問題而言~數據(代表著分散式系統領域)&>特徵(數據挖掘與自然語言處理與圖像)&>模型(機器學習)。這並不是說模型不重要,而是一定要對具體問題做模型的Adaptation,你直接把圖像領域的CNN拍到自然領域處理領域可能效果還不如一些傳統方法,然而你把模型改吧改吧改成了DCNN,你就超越了Baseline,所以一定要能看懂模型,然後結合你的具體問題,把問題給解決了!

所以,對於你的問題,大家推薦了那麼多理論學習資料,我覺得肯定夠了,我的忠告是不要沉迷於數學公式的推導,一定要理解他是如何運用數據的,比如SVM他的分類決策是根據和分類面最接近的那些點的支持向量決定的,貝葉斯的分類決策是根據大量先驗知識決定的。所以在解決實際問題時候,貝葉斯會特別特別對先驗和後驗的同分布特別敏感,而SVM的魯棒性會好很多。千萬不要最後只知道SVM利用了拉格朗日乘子,對偶問題,極小極大與極大極小的轉換做的分類器,而忽略了他怎麼利用數據的特徵~

最後想說的是:學好Python,掌握好開源的Tool。在工作解決實際問題的過程中,往往是這個邏輯:這個問題我們需要這個數據我們去crawl吧!!!(爬蟲能力)-&> 這些數據應該抽取ABCD這些特徵(對數據的感覺)-&>這種數據特徵的擬合用這個模型好!!!我記得這個開源Tool實現了(對開源機器學習模型的了解)-&> 還是不work,我們寫Rule吧(有多少人工就有多少智能的步驟)。當然最後一步十分重要,尤其對於自然語言處理問題(攤手臉)


這是一個很難回答的問題,每個人的基礎不同起點也不同,需要學的東西也完全不一樣。先說我的觀點:不要想一下子吃成一個胖子;很多時候,想吃的越多反而什麼也消化不了。

讓我們先看一道面試題(非原創):一條路上有N棵樹,每棵樹都有兩個指標,一個是位置a_i(是整數),一個是體積w_i(是整數),現在要把這些樹砍下來,運到K個倉庫,我該如何選擇這些倉庫的位置(也是整數),使得搬運的成本盡量小呢?假設理想情況下,每棵樹的搬運成本為樹的體積 x 搬運的位移^2。

如果你看完這個題目,不能條件反射的告訴我你的思路,你其實並沒有真正懂什麼是聚類演算法(K-means)。每個機器學習演算法,猶如這道題一樣具有兩面性,一面是演算法,也就是怎麼算;一面是優化目標,為什麼這麼算。不能區分的看待機器學習的兩面性,就不能明白為什麼一群號稱做機器學習研究的人整天卻在玩數學。

先挖個坑,以下是《理論篇》,《實踐篇》以後在寫了 = =

我自己是本科數學出身,本科畢業的時候,我並不知道什麼是機器學習,也沒有寫過大型程序,更不要說去搞一個機器學習的演算法和實踐了。但是回頭看,真是因為本科時代打下的堅實數學基礎,讓我畢業後學習這些相關知識變得輕車熟路。這些本科時代就應該熟練掌握的東西包括

  • 線性代數(線性空間,矩陣計算,張量)
  • 數值數學(數值代數,數值分析,線性規劃,二次規劃,凸優化理論,常見的數值優化演算法)
  • 概率論和統計(沒有這個基礎,後面學概率圖模型,統計計算都無從談起)
  • 實分析和泛函的基礎(這塊內容有助於提升抽線思維的能力,一些經典結論對之後一些理論的理解很有幫助,比如RKHS)

有了這個基礎,我們再來看機器學習都有哪些東西,其實真心不多,看我用一個知乎回答就告訴你,

最簡單的當然是從分類器(classification)談起了。總結一下,學習這些東西要先知道哪些數學內容呢?

  • Naive Bayes:真的只需要懂一點概率論就行了。
  • Linear Discriminant Analysis:這個你只需要知道什麼是多變數Gaussian分布。
  • Logistic Regression:如果知道線性回歸和廣義線性回歸,LR也不是什麼特別的東西。如果知道最大熵原理,並能從它推導出LR那說明你對LR的理解又更深入了。
  • Linear SVM:這個稍微複雜一點,因為問題的formulation需要先理解max-margin原理。而具體的演算法實際上就只是經典的二次規劃和凸優化內容。
  • Kernel SVM:要真正理解這個或許需要先明白什麼是RKHS。然後其他演算法部分只是仿照Linear SVM的簡單推廣。RKHS相關內容可以參照http://www.umiacs.umd.edu/~hal/docs/daume04rkhs.pdf
  • Adaboost:這個東西如果只需要知道演算法過程,是很簡單的東西。但是如果你能明白為什麼這麼做,在什麼假設下這麼做會收斂到最優解,那你的理解也非常不錯了。
  • Decision Tree:有兩個需要了解CART 和 c4.5。這個很簡單,沒什麼好說的,但是你能不能高效的實現它們呢?
  • Neural network:這個是我見過最傻的模型,你要知道怎麼做優化,乃至怎麼做隨機優化,結果看天吃飯。

再來看一些非監督模型,比如經典的有

  • 數據處理與可視化:PCA,LDA,MDS,以及其他「高大上」但不一定work的manifold learning演算法
  • 聚類演算法,以及如何評價聚類結果
  • 稀疏編碼:如何把一個帶LASSO的問題轉化成線性約束?有哪些別的更快的方法求解LASSO。

以上這些東西,算是入門性質的。本科畢業後大概一年左右,這些東西我就基本熟悉了。要學習這些東西,看一些教材自然是好的,但是書里廢話比較多呢,而且一本書的作者知道的東西畢竟有限,我都是傾向直接從維基出發找資料看的。說實話,現在很少會自己去實現這些演算法了,這些經典演算法都有現成的開源工具。事實上要寫一個高效的Linear SVM也不是很容易的事情。

我主要講講學完這些,應該怎麼學更高級的內容,當然還是結合我自己的經歷。授人以魚不如授人以漁,要學習前沿的內容就要掌握基礎的工具。書分為兩種,一種書看完了就是看完了,你學到了一堆技能,但卻不能用這些技能產生新的知識,面對問題也不能因地制宜,如果是這樣學估計只能用來應付找工作面試吧;另一種書看完了才是學習新東西的開始,你學到了如何讀懂別人的論文,如何開發新的知識,如何根據情況選擇和調整演算法。

實戰分類模型(Advanced classification):在掌握了Decision Tree和Adaboost後可以進階了解Random Forest 和 Gradient Boosting兩個模型,和他們的調參策略。推薦參加一些機器學習的比賽來強化這方面的使用熟練度。

概率圖模型(Probabilistic graphical model):我是在Coursera上學習概率圖模型這門課的,講得真的非常好,正打算過二周目。學完這個課,掌握了圖模型的設計,推斷,和採樣方法之後,就可以開始學習兩個核心的機器學習模型,一個是Latent Dirichlet Allocation(LDA),常用於文本處理;一個是Probabilistic Matrix Factorization(PMF),常用於推薦系統。

這類圖模型都在研究兩個基本的問題:如何採樣;如何inference隱含變數,是用EM、MCMC、還是Variational Bayes,從而用來估算參數。為了搞清楚這些,學習下面這門課就非常必要了。

統計計算(Statistical computing):這個課系統的介紹了數值積分方法,Monte Carlo方法(importance sampling, MCMC,Sequential/Particle MCMC,bootstrap),EM/MM。學完這門課,你能對這個領域的工具有個全局性的了解,明白每個工具的利弊,它們產生的歷史來源,從而在具體問題中正確的選擇使用它們。

有了這些工具,你會發現大部分research的工作都是在這些細分領域做一些簡單的擴展。比如Bayesian PMF(ICML"08)這篇文章幾乎就完全是MCMC在PMF的應用。話說回來,Research大部分時候就是以這樣一種循序漸進的方式進行的,把一些現成的idea排列組合。

深度學習(Deep learning):說實話我剛開始接觸這塊內容發現,這尼瑪就是傳說中的黑科技啊。你不知道模型裡面發生了什麼,好壞都是看天吃飯的感覺。為了搞清楚這個,我決定重頭開始實現神經網路。(代碼在bobye/neuron · GitHub )前前後後花了近半年的時間,在實現的過程中,我學習了構造和訓練神經網路的各個細節。我是從Stanford這個Tutorial開始學習的UFLDL Tutorial 課程資料里提供了Matlab的源碼,不過我喜歡重新造輪子,那個時候恰好在學習Scala,就用Scala重寫了一個神經網路的庫(這個語言的特性非常適合寫神經網路的演算法)。
近幾年深度學習的主流被深度卷積網路代替,這種監督學習的演算法雖然對某些問題十分有效,但是數學上並不是特別神奇的東西,我還是比較關注那些非監督的神經網路。

優化(optimization):沒有優化演算法,任何機器學習模型都是空中樓閣,如何用更高效的優化演算法,如何trade-off 計算時間和準確度,如何把已有問題scale到更高規模的數據上一直都是「優化大師們」做不完的工作。這也是一個非常大的分支,我覺得現在比較流行的兩個大類是隨機梯度優化和ADMM。前者用來解決大規模非約束優化問題,現實情景用的很多,但我們對它知道的很少;後者用來解決帶約束問題,有很多變體。此外,優化大家庭也又有很多別的成員,這時候我要推薦的資料包括J Nocedal的numerical optimization這本書,講的內容非常充實。此外ADMM的內容當然看Boyd巨牛11年的Tutorial paper。

話說「概率圖模型畫圈,神經網路調參數,優化問題加正則」,不會科研也會胡謅了。。。最後說說答主最近在看的東西

PAC學習理論(PAC Learning):這個理論已經相對古老了,它的歷史價值很大,應用價值很有爭議,但是一直有人在繼續這個方向的工作,並試圖用它來構造新的模型,所以還是有必要知道的。推薦一下最近的新書:Understanding Machine Learning: From Theory To Algorithms.

非參數貝葉斯統計(Non-parametric Bayesian statistics):這個方向還非常年輕,有很多需要挖掘的東西,(划去)也是我PhD的一個重要課題(划去)。

我覺得如果你開始看這些東西了,我已經沒資格給你指路了,哈哈


有一次我聽了Eric Xing的一個報告,講machine learning綜述和展望的,非常引人入勝,事後我郵件他要slides,他說"sure" 等他回去以後給我,然後...就沒有然後了...

--------------------- 正經回答分割線 ---------------------------

machine learning綜述的話,推薦這篇:A Few Useful Things to Know about Machine Learning
中文版在這裡:機器學習那些事
還有好心人做了圖片版:

數據挖掘方面,有好心人寫了一篇:大數據工程人員知識圖譜ps 樓上說到的Andrew Ng在Coursera上的課,我覺得最好的一點是講了怎麼去科學地"debugging a learning algorithm",以及要設計一個machine learning system的時候,你該怎麼判斷哪些事情需要花時間哪些事情暫時還不重要(而不是沒頭蒼蠅到處亂來)

X. Advice for Applying Machine Learning (Week 6)
XI. Machine Learning System Design (Week 6)

這是太多的其他課程/教學資料里沒有講或者一筆帶過的東西,但卻是最基本需要掌握的地方,I wish I knew ....

=========
看到評論有求圖的,見@祝銘嘉 的回答


The Open Source Data Science Masters by datasciencemasters
看到一個不錯的網站,是一個Stanford的CS學生維護的,上面列出了這個方向相關的課程和相應的資源,我覺得很不錯。


機器學習是一門集計算機、統計和優化於一體的學科,也是數據挖掘、自然語言處理和計算機視覺等學科的基礎。機器學習同時也是演算法工程師 (數據挖掘、自然語言處理、圖像等) 面試必問的題目。因此在研究生階段學好機器學習,既可以打好基礎,又可以為將來找工作做好準備。

首先,學好機器學習需要一定的優化和統計基礎,你可以參考以下這幾本書:

  1. 線性代數 : 這個是最低的要求了,理工科本科的時候應該都學過。
  2. 矩陣分析 :研究生的矩陣分析課一般就用這本書。
  3. Optimization by Stephen Boyd :由凸優化大神Stephen Boyd所寫,絕對經典。

你也可以參考Stanford CS229課上的notes:

  1. Linear Algebra
  2. Review of Probability Theory
  3. Optimization Overview1
  4. Optimization Overview2

然後,你可以開始學習機器學習的內容,我覺得你可以分為以下幾個部分來看:

  1. Introduction : 了解下 What『s machine learning and why machine learning.
  2. Statics and Optimization in Machine Learning : 機器學習中常用到的統計和優化方法:SVD分解,矩陣求導,優化和 Dirichlet prior等。
  3. Model Selection and Evaluation : 如何劃分數據集,如何evaluate模型的好壞。
  4. Linear Models for Regression : 線性回歸,Gradient Descent, Newton Method, BFGS,L-BFGS, Ridge Regression and Lasso.
  5. Linear Models for Classification : Logistic Regression, Softmax Regression.
  6. Exercises : you need an exercise here to exam what you have learned: 坐標下降法 (Coordinate Descent), 迭代軟閾值演算法(IST), Stochastic Gradient Descent.
  7. Support Vector Machines : SVM, Dual Problem of SVM, Kernel Function, Soft-margin SVM.
  8. Clustering : K-means, Mixtures of Gaussians, Expectation Maximization (EM), Spectral Clustering, Normalized Cut, Hierarchical Clustering (層次聚類), Density-based Clustering, Learning Vector Quantization (LVQ).
  9. Ensemble Learning : Boosting, Bagging, Random Forest, KNN, Decision Tree.
  10. Reinforcement Learning
  11. Probabilistic Graphical Model: Bayesian Network, Markov Network, CRF, HMM, LDA
  12. Principle Component Analysis (PCA)
  13. Machine Learning Theory: VC Dimension, Learning Principles.
  14. Neural Network and Deep Learning: AutoEncoder, CNN, RNN, LSTM, Restricted Boltzmann Machine.

以上帶鏈接的部分為答主總結在博客中的內容,可以作為參考。未帶鏈接的部分是答主接下來準備寫在博客中的內容。博客內容持續更新,歡迎關注和交流:Frank Chu 。

關於機器學習的書籍,你可以參考以下幾本書:

  1. 機器學習 by 周志華: 周志華老師的這本書非常適合作為機器學習入門的書籍,書中的例子十分形象且簡單易懂。
  2. 統計機器學習 by 李航:李航老師的這本書偏優化和推倒,推倒相應演算法的時候可以參考這本書。
  3. PRML by Christopher Bishop: PRML這本書有點偏Bayesian了,初學者看起來可能有些困難,可以和前兩本結合起來看。
  4. Machine Learning A Probabilistic Perspective Learning by Kevin P. Murphy: MLAPP這本書也是一本比較經典的機器學習書,可以和PRML互相補充著來看。

關於機器學習的資料,可以參考的有:

  1. CS 229: Machine Learning (Course handouts) : Stanford Machine Learning 課程, 裡面的notes很不錯。
  2. ML by Andrew Ng in coursera : 這個比較適入門的時候看。
  3. Machine Learning Notes in cousera : 如果沒有時間看2中的視頻的話,可以直接看這個博客,作者將2中所有內容都記錄了下來。
  4. 台大機器學習基石
  5. Frank Chu : 當然你也可以參考我的博客 ^_^

機器學習是需要動手去推倒和實現的,如果你只是看看書和資料,不會理解得很好。如果你不僅推倒、實現了,還把它寫成了博客,那麼你就理解得比較透徹了。

關於數據挖掘,在有了一定的機器學習基礎之後,可以去參加阿里天池,kaggle等數據挖掘比賽來提高數據挖掘水平。


樓主問的其實是兩個相關(很多人分不清)但其實差不少的領域。現在排名第一的 @安岩 在推薦閱讀上回答非常詳盡,就不在這個方面多廢話了,只是簡單按照自己的經驗說一下這兩個的區別和聯繫:

機器學習的終極目標是讓計算機完成一些被我們認為是「智能」的工作,一開始的研究是從邏輯學方向入手的,之後幾十年一直是統計機器學習的天下(說是「統計」,但其實更多是概率方向的知識),而近幾年沉睡很久的神經網路也在得到更多甚至說是狂熱的重視(神經網路可以認為是統計模型,但相比傳統統計機器學習(statistical/probabilistic)而言,它更多時候更接近一個確定性(deterministic)模型)。

另一方面,數據挖掘更側重於實際應用,而且也和統計學(注意,這和概率有很大的區別)的關聯更加顯著。傳統的應用包括購物籃分析(常購買商品、常共同購買商品),和比較新的一些社交網路、UGC分析(User Generated Contents, 用戶生成的內容)等等。

一個簡單的數據挖掘和機器學習的區分就是,數據挖掘並不那麼關心演算法的細節,而相對更重視結果的解釋及其統計意義;而相反,機器學習似乎更在乎演算法的設計、優化,在分類、聚類、或者一些既定問題上的效果,而較少關心統計意義方面的考量。具體來說,一個數據挖掘專家可能會用線性回歸甚至關聯分析,這些被機器學習學者認為是上世紀初產物的模型完成一些非常有趣的實際工作,並得到確定的統計意義(比如95%置信區間、某個事件是否具有「突發」統計意義等),也就是說這些結果最終還是服務於人,需要人去理解;而機器學習學者會盡量設計模型來自動別難過完成相對「智能、複雜」的任務,比如圖像識別、語音識別、自然語言理解等,提高演算法在這些問題上的準確性,但通常會被統計學家吐槽很多模型的效果提升其實統計意義不明。

最後簡單總結一些兩者分別(有些其實界限不是很清晰了,我只是列在了被研究得更多的那邊)和公共的搜索詞:

數據挖掘(不熟,輕拍):Data Analysis, (Social) Network Analysis, UGC Analysis, Market Segmentation, Recommendation/Ads Systems
機器學習:Computer Vision, Speech Recognition, Natural Language Processing/Understanding, Pattern Recognition, Statistical Learning Theory (Convergence, Error Analysis), Probabilistic Graphical Models, Neural Networks
公共:Linear Algebra, Parallelization/Large-Scale/Distributed Computation, Optimization, Probability/Statistics


這個方面數學要求較高。
建議,概率論統計學,代數好好學學,以及探討各種優化問題。是數學,你都讀讀吧,沒有壞處的。基礎是數學,這是真的,沒有紮實的基本功,這方面的東西看起來會很費勁。

給你推薦一個系列的課程?只推薦個機器學習的課程吧,其他很多相關的學科大多都要用到機器學習的思想。

stanford的機器學習課程,很有名了。
斯坦福大學公開課 :機器學習課程
Coursera.org
以及這方面的筆記
Coursera公開課筆記: 斯坦福大學機器學習第一課「引言(Introduction)」
JerryLead的很牛翻譯過來的筆記(全套,可以研讀下)
Machine Learning
一些博客推薦
Free Mind(pluskid寫的一系列很厲害)
Free Mind
機器學習 - 標籤(leftnoeasy)
Rachel Zhang的專欄
http://dahuasky.wordpress.com/page/2/
Tutorials by Avi Kak
Statistical Data Mining Tutorials

這本書很有名,忘了說
Pattern Recognition and Machine Learning/Christopher M. Bishop-圖書


與這方面相關的其他課程
模式識別
數據挖掘
機器視覺
自然語言
推薦系統
神經網路
概率圖論
人工智慧等等
有相通的內容,很多都在用機器學習的方法,都可以看看。。。
隨便搜索就知道,這方面大多都是在搞統計學習方法之類。。。

所以,就一句話,數學在這個方向很重要。


給你推薦我們用的課本,把其中一本仔細讀完都會有很大的收穫。
Kevin P. Murphy Machine Learning: a Probabilistic Perspective, the MIT Press (2012)
David Barber Bayesian Reasoning and Machine Learning, Cambridge University Press (2012)
Christopher M. Bishop Pattern Recognition and Machine Learning. Springer (2006)
David J.C. MacKay Information Theory, Inference, and Learning Algorithms, Cambridge University Press (2003)
第二和第四本在作者主頁有 pdf 版本,個人比較喜歡 MacKay 的書,不過比較老了。


剛回答過這個問題,如有興趣建議抽出時間看一看。

  • 如何系統地學習數據挖掘?

研究生的重點是做學術研究發論文,建議前期多看一些核心會議和期刊近三年來的發表和獲獎論文(會議和期刊推薦在上面的介紹里有)找到自己感興趣的方向,然後開始找數據做實驗(數據來源可參考:數據分析和挖掘有哪些公開的數據來源?)發paper。

祝多發paper,挖掘快樂:)


想學所有的知識永遠也學不完, 最重要的是專一。 與其翻閱不同的教材,我覺得還不如去嘗試去解決實際問題,在這個過程當中根據需要適當的補充知識(假設你已經大概了解了機器學習的領域) 去kaggle嘗試一下實際的問題吧, 之後你自己就會有方向感了, http://www.kaggle.com/competitions


以下內容都是進入公司之後才開始學習的,其實後來覺得可以在讀書期間就學一下相關的內容,也方便自己找工作。

知乎專欄寫過一篇文章:《轉行到數據挖掘與機器學習(三)》。

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

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

[1]編程語言

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

通常來說,SQL 是為了從資料庫中提取數據,然後進行必要的數據過濾,數據分析,數據提取。對於 SQL,需要掌握的內容有以下幾點:聚合函數,數學函數,字元串函數,表格的連接函數,條件語句等。SQL 與 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]業務場景

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


學習挑一個合適的導師以及逼格夠高, 但是不至於難到你的項目.....


高票答案說的都很好。數學真的很重要!
如果你還是研一階段,推薦你去聽一聽數學學院的課程。樓上關於機器學習方面的資料推薦已經很詳細了,我就補充一些推薦的數學資料吧。有些數學課程真的不適合自學,有老師講一下就馬上不一樣了。有用的數學知識有:
最優化。推薦《Numerical Optimization 2ed - Nocedal》,機器學習里到處都是優化,如神經網路權值的計算等。學最優化的好處是學的時候順便也能把矩陣給複習一下。
泛函分析。推薦《泛函分析》張恭慶著。這門課能極大擴寬視野,有些數學上的證明,比如三層神經網路能逼近任意函數,就是需要有泛函的知識才能看懂的。再往深有Soblev空間和調和分析,就更加數學一些,對做信號處理方向會有很大幫助。
概率論。暫無推薦。機器學習實際上就是統計學習,PRML的書幾乎把每種模型都貝葉斯化了。入了機器學習的坑,就離不開概率。
測度論。推薦《測度論》嚴加安著。測度論是概率論的基礎,能夠讓你對概率有更深入的了解。
隨機過程。暫無推薦。在數學院里,隨機過程是在測度論之後開的,涉及了大量的測度論知識。沒學測度論也沒關係,可以看針對工科寫的應用隨機過程。
多元統計分析。推薦《實用多元統計分析_第四版》Richard A. Johnson等著。機器學習統計學習不分家,也是大量的數據矩陣表達,矩陣運算,這門課最大的好處就是把眼花繚亂的積分號矩陣化,更加簡潔。
抽象代數。這門課對機器學習的直接作用不大,有時間學一學也能夠擴寬視野。比如知道矩陣及矩陣乘法實際是一個非阿貝爾群(乘法不可交換)。
表示論。我對表示論了解不多,只是零星學過一點群表示論。表示論也是數學一個重要部分。在機器學習中的應用不詳。

===================================
至於機器學習的書籍,上面高票答得都很好!


研究生階段都是跟著導師做課題,從中抽出來一個題目做。即使不是這樣,論文的題目也會非常具體到一個很細小的問題,所涉及的方法也不會很多。
課程看學校安排了,如果學校安排課程也是一門大課,講述各種方法,不過這樣光說不練是掌握不了的。研究生階段有的是時間,找你想學的方法自己動手實現一下才好。
我覺得課程和書都是帶你入門的,結合題目細緻研究一個領域才是正道。
手機上寫的,比較簡略。


Coursera上有個5門UIUIC的課拿一個certificate的data mining program,我覺得課程的選擇和漸進都是非常接近實際的data mining碩士program的(實際研究生program可能會多一些基礎統計和CS課程,和一些輔助理論和演算法課程,另外多一些選修方向)。這個program的幾位教授都是data mining學術界的大牛 (有位是我研究生時期data mining教授讀書時期的博士導師,還有位連我這樣的門外漢也聽說過他的大名)。

附上鏈接:
Coursera - Specializations

課程組成:
1. Pattern Discovery in Data Mining
2. Text Retrieval and Search Engines
3. Cluster Analysis in Data Mining
4. Text Mining and Analytics
5. Data Visualization

如果非要讓我選的話,Data Visualization可能不是必須的,但是非常有趣而且實用,是很有益處的「bonus」。另外如果統計的基礎知識不太記得清楚的話很推薦去上一門基礎統計科或者refresh一下統計知識…因為對理解這些課程的幫助很大。


額……已經結課的北航大數據在職生來答一個。

首先這個問題應該分為兩個視角來回答:教務視角和學生視角。

對於學校來說,學生的基礎不一,跨專業的比比皆是。所以會分為專業課和選修課,一般來說會上一些通識課程如:資料庫、統計原理、各種數學、演算法、還有必修的英語和政治。另外一部分是各種語言、工具類課程,比如C++、Java、python、R、SAS、SPSS等,然後是一些實用課程,比如社交網路分析、web分析、高級數據挖掘神馬的。

在學生角度,需要根據自身實力好好確定需要提升的點,可以參考數科學家技能樹,挨個點亮。從最基礎的微積分、線性代數、資料庫、各種開發語言(一個專長就夠),到各種機器學習演算法原理、使用、調優,再到整個數據挖掘全流程的數據處理、分析、挖掘等。


我貼一下具體的課程吧,怎麼學,我的經驗是用到什麼學什麼。用以致學。這樣就不會學到後面忘記前面。


KDD的論文及各種reference,KDD的比賽及各種參賽演算法,當然,最優化理論是必學的。


不知道題主說的碩士還是博士。
就以自己的經歷說下吧。
西北某軍工類院校,計算機,實驗室做語音的。
學院沒什麼機器學習的積累,也沒有高質量的課,英語爛,網上的視頻看不下去,就自己看書,純粹自學。


書籍:
大四導師就推薦了本prml,整個研究生階段就反覆看,做題,跟同學分享討論,給同學講解。
模式分類,圖模型(jordan的未發行版),模式分析,統計學習基礎等等這些經典也都刷過。
那些集體智慧,機器學習實戰也都看過。
"數學"方面:線性代數應該這樣學,學校的矩陣論和數理統計課。
這是指我學的覺得有用的,其他我還看了一大堆數學書的第一章或者前兩章,什麼實復泛函分析啦,拓撲學啦,測度論啦。可是因為自己的腦力毅力加之沒人逼我學,實在沒能讀下去。
優化我沒學過,雖然也翻過不少優化書的前兩章,但學習過程中確實沒用到啥複雜的優化演算法,沒需求,而且那東西我覺得一點都不有趣,就沒去學。

2011年.

  • 學nlp的東西,刷了一本jur啥寫的特厚的nlp的書,寫的特別好,把裡面的演算法實現了一遍。
  • 看prml。這時看不懂LDA。

2012年

  • 論文方向是深度學習,那時候也沒找到現成的工具包,自己寫了一個支持cuda的深度神經網路的工具包。(其實代碼很簡單,就花了幾個晚上而已)。
  • 看prml。可以看懂了LDA。

2013年.

  • 實在覺得深度學習沒意思,論文換了題目,開始研究狄利克雷過程。中間去實習,實習完了繼續看,加起來看了有半年。
  • 反覆看prml。純粹應為太閑,這時重新看LDA論文,就非常清晰了。

論文精讀了百篇以上,除了當時花心思研究的深度學習和DP看了一大堆論文外,其他方面只精讀各種經典論文,也就是各個模型的第一篇,如果論文太多,先看nips,icml之類的。另外,survey也是值讀的。雖然好的survey並不多。
其實大論文比較容易看懂,因為更詳細,學DP時研讀neal,sudderth和eb fox的博士論文,感覺收穫很大,也很佩服這些牛人phd做的工作,不管有沒有用,至少做的特別認真,特別嚴謹。
另外,有一套Foundations and Trends 系列的introduction也是蠻不錯的。

每天拿來學習的時間也就3-4小時。其他時間都在玩。

最後結果:自己連機器學習應用的門檻還沒進,不過感覺跟很多同領域的小碩比起來,還算不差。

感想:我時間都花在概率模型上,或者說貝葉斯模型,對於真的去訓練模型,我不擅長。我尤其厭煩那種把機器學習當個黑盒子,什麼問題非要去套這個黑盒子,更討厭那些明知其理還在鼓吹的人。
研究問題,不靜下來從物理的角度(事物的原理)出發,反而一上來就倒過來,期望靠統計來發現一些表象的規律。由一些基本的原理不斷組合產生出的世界,才體現出美感,而擬合輸入輸出對實在太醜陋。
貝葉斯方法相比某些方法還算有點物理意義,所以自己還感點興趣。
這些年,記憶最深的當屬一篇cvpr的best paper。講的一個去霧演算法,我覺得這篇論文比擬合來擬合去的強上無數倍。

對於phd:phd就不是這節奏了,我的phd師兄就比我學的多多的了,但是要折騰的雜事也比我多。phd的基礎要很紮實,不能像我這樣糊弄了事,而且phd要發論文,必須得時刻了解動向,發現機會,熬夜折騰論文實驗,不像小碩,玩玩混過去即可。

遠離學術圈,儘可能少的發表論文留下污點。


為了了解svm,看了一沓論文然後實現了簡單模型。


推薦閱讀:

反欺詐(Fraud Detection)中所用到的機器學習模型有哪些?
連續特徵的離散化:在什麼情況下將連續的特徵離散化之後可以獲得更好的效果?
參加kaggle競賽是怎樣一種體驗?
怎麼在 Excel 上做數據地圖?

TAG:數據挖掘 | 機器學習 |