online gambling singapore online gambling singapore online slot malaysia online slot malaysia mega888 malaysia slot gacor live casino malaysia online betting malaysia mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 mega888 想入門機器學習、數據挖掘,我該怎麼做?

摘要: 想入門機器學習、數據挖掘,我該怎麼做?我自己是本科數學出身,本科畢業的時候,我並不知道什麼是機器學習,也沒有寫過大型程序,更不要說去搞一個機器學習的算法和實踐了。這些本科時代就應該熟練掌握的東西包括: ...

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

 

讓我們先看一道面試題(非原創):一條路上有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相關內容可以參照umiacs.umd.edu/~hal/doc

 

Adaboost:這個東西如果只需要知道算法過程,是很簡單的東西。但是如果你能明白為什麼這麼做,在什麼假設下這麼做會收斂到最優解,那你的理解也非常不錯了。

 

Decision Tree:有兩個需要了解CART 和c4.5。這個很簡單,沒什麼好說的,但是你能不能高效的實現它們呢?

 

Neural network:這個是我見過最傻的模型,你要知道怎麼做優化,乃至怎麼做隨機優化,結果看天吃飯。

 

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

 

數據處理與可視化:PCA,LDA,MDS,以及其他“高大上”但不一定work的manifold learning算法

 

聚類算法,以及如何評價聚類結果

 

稀疏編碼:如何把一個帶LASSO的問題轉化成線性約束?有哪些別的更快的方法求解LASSO。

 

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

 

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

 

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

 

有個有趣的事情,某年Siggraph上有一篇文章做的是自動生成美麗的圖案上色,這篇文章簡直是我的最愛啊,作者是個華裔姐姐長得也很萌>_< graphics.stanford .edu/~

其實是為了看懂她的工作,我才去學的這門課呢。

 

這類圖模型都在研究兩個基本的問題:如何採樣;如何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的一個重要課題。

資料來源:煉數成金

留下你的回應

以訪客張貼回應

0

在此對話中的人們