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