最近會面試一些“做過機(jī)器學(xué)習(xí)”的人。但是經(jīng)常遇到的很讓我無語的一種情況是,在問他們一些機(jī)器學(xué)習(xí)的相關(guān)知識的時候,對話往往是這樣的:
-- 呃, 你用過 logistic 回歸?
-- 嗯,是的。
-- 能跟我說說 logistic 回歸是怎么回事么?
-- 我不知道,我用的是 XX 包,把數(shù)據(jù)整理成一個什么樣的格式丟進(jìn)去,然后它就出結(jié)果了……
確實,現(xiàn)在 Machine Learning 的 toolkit 非常多,基本上可以想得到的,都能找到對應(yīng)的開源項目。如果你在BAT這些公司,說不定這些 toolkit 連圖形化界面都給你提供了。這大大降低了我們的使用成本。但是,如果你認(rèn)為自己“做過”機(jī)器學(xué)習(xí)的話,只會調(diào)用別人的工具顯然是不夠的。一直都一帆風(fēng)順還好,如果你的數(shù)據(jù)扔進(jìn)去,吐出的模型文件并不能像你預(yù)想的那樣 work 的很好的時候,如果你只會調(diào)用別人的工具,你怎么知道問題出在了哪兒呢?
所以其實我覺得如果做機(jī)器學(xué)習(xí)的話,一些基礎(chǔ)還是要打好的。就像不了解對象模型的人,仍然可以很歡暢地寫 C++ 代碼(也許都寫成了C),但是恐怕不能說自己熟悉 C++。而機(jī)器學(xué)習(xí)是建立在數(shù)理統(tǒng)計、線性代數(shù)、信息論和決策論上的,打基礎(chǔ)的話,應(yīng)該也從這些知識開始。尤其是機(jī)器學(xué)習(xí)這個領(lǐng)域發(fā)展到今天,各種算法及這些算法的種種變體非常之多,很少有人能夠把這些算法全都摸得門兒清。但是,在有了一定的基礎(chǔ)知識之后,看懂一個算法應(yīng)該不會成為太困擾你的事兒,看懂了之后,這個算法的優(yōu)劣、使用范圍等也應(yīng)該會有大致的了解了。
如果要入門機(jī)器學(xué)習(xí)的話,有兩本書推薦一下。一本是Mitchell的《機(jī)器學(xué)習(xí)》,這本書現(xiàn)在機(jī)器學(xué)習(xí)中一些最常用的、經(jīng)典的算法,包括 Regression,Classification,Cluster,EM,簡單的神經(jīng)網(wǎng)絡(luò)等等,順帶穿插講述了一些基本概念,如最大似然估計、誤差函數(shù)、梯度下降、后向傳播算法等,Andrew Ng 在 MIT 的機(jī)器學(xué)習(xí)課程,也是以這本書為藍(lán)本的;另外一本書是《數(shù)據(jù)挖掘:實用機(jī)器學(xué)習(xí)技術(shù)》,這本書有意思的地方是搭配了一個開源的、帶GUI界面的機(jī)器學(xué)習(xí)工具Weka,并且?guī)б恍?shù)據(jù)集合,可以親自動手試一下,避免入門的時候太過枯燥而產(chǎn)生畏難情緒。這兩本書大致看過之后,可以看看Bishop的神書《Pattern Recognition And Machine Learning》……的前兩章,嘗試弄清下面的幾個問題:
- 統(tǒng)計學(xué)的基礎(chǔ):先驗,后驗,大數(shù)定理,bayes rule,marginal probability,等等;
- 如何度量信息的有用程度:信息熵,交叉熵和互信息都是什么?
- 什么是點估計?什么是區(qū)間估計?
- 最大似然估計,最大后驗估計,Bayesian估計之間有什么樣的聯(lián)系和區(qū)別?
- 什么是過擬合?如何避免過擬合?什么是正則化?試著使用MLE和MAP分別推一下曲線擬合中沒有正則化(不帶懲罰項)和L2正則化(帶有針對參數(shù)平方和的懲罰項)的error function。
……等等。
然后呢?然后你就可以愉快地玩弄各種 toolkit,擼各種 paper 去了。(至于要發(fā)各種paper的童鞋……對不起哪不在我的知識范圍之內(nèi)了T.T)