《統(tǒng)計(jì)學(xué)習(xí)方法》買了就吃灰?來看正確的打開方式
《統(tǒng)計(jì)學(xué)習(xí)方法》從入手到完整啃完前前后后花了不少時(shí)間,主要是因?yàn)椴冗^的坑比較多,浪費(fèi)了很多時(shí)間。所以寫了這篇避坑指南,希望能幫正在啃這本書或者剛?cè)肟拥耐瑢W(xué)節(jié)約點(diǎn)時(shí)間,提高學(xué)習(xí)的效率。要獲取本書pdf版關(guān)注公眾號(hào)【學(xué)姐帶你玩AI】回復(fù)“統(tǒng)計(jì)”。
事半功倍的讀書姿勢內(nèi)容分以下五個(gè)部分:
一. 我的學(xué)習(xí)歷程(不喜歡聽啰嗦的可以從第二部分開始)
二. 學(xué)習(xí)《統(tǒng)計(jì)學(xué)習(xí)方法》遇到的困難
三. 在學(xué)習(xí)過程中碰過的壁
四. 最后解決問題的方法
五. 學(xué)習(xí)心得以及對(duì)后來的學(xué)習(xí)者的建議
六. 學(xué)習(xí)資料分享
正餐開始!
一. 我的學(xué)習(xí)歷程
簡單介紹一下我的學(xué)習(xí)路程,一開始入門機(jī)器學(xué)習(xí),覺得大多數(shù)入門的通病都是漫天的去網(wǎng)上找貼吧找資源,然后網(wǎng)盤保存了一大堆資料,每個(gè)吃一點(diǎn)不斷的遴選符合自己口味,但又茫然不確定自己選的資料好不好,這段時(shí)間費(fèi)時(shí)費(fèi)神,后來也是看多了發(fā)現(xiàn)基本機(jī)器學(xué)習(xí)入門繞不開的兩本書就是李航的《統(tǒng)計(jì)學(xué)習(xí)方法》和周志華的《機(jī)器學(xué)習(xí)》,一本小藍(lán)書和一本西瓜書。
我覺得兩本是相互補(bǔ)充的,西瓜書概括性比價(jià)好,但是公式推導(dǎo)稍微缺一點(diǎn),統(tǒng)計(jì)學(xué)習(xí)方法有比較詳盡的公式,但有些內(nèi)容也不夠全面,兩本總得先看一本,就看個(gè)人選擇。不過還得有時(shí)間去“磨”了。
為什么用“磨”這個(gè)字,因?yàn)檫@種基礎(chǔ)性的理論和公式推導(dǎo)只能磨,沒什么取巧,其實(shí)相對(duì)于現(xiàn)在編程生態(tài)庫,大把數(shù)據(jù)科學(xué)的計(jì)算庫可以直接計(jì)算,學(xué)習(xí)基本的調(diào)用接口和一些基礎(chǔ)概念,對(duì)于數(shù)據(jù)科學(xué)的大多數(shù)方法的確是可以使用的了。
那為什么這么費(fèi)力從基礎(chǔ)理論去熟悉這些公式呢?那就見仁見智了,個(gè)人觀點(diǎn),暫時(shí)也不講職場、課題需要啊之類,公式理論不過一遍,你不虛嗎?
李航的《統(tǒng)計(jì)學(xué)習(xí)方法》作為機(jī)器學(xué)習(xí)的入門書籍,第一版是2012年出版的,只是包含了主要的監(jiān)督學(xué)習(xí)算法, 2019年出了第二版,增加了無監(jiān)督學(xué)習(xí)的主要算法,每一個(gè)算法模型背后都有深刻的理論和不同的應(yīng)用場景,但有時(shí)候不經(jīng)意之間又發(fā)現(xiàn)他們相通的地方,可能這就是數(shù)學(xué)有意思的地方吧。
二. 學(xué)習(xí)《統(tǒng)計(jì)學(xué)習(xí)方法》遇到的困難
1.知識(shí)涉及面
高等數(shù)學(xué)、線性代數(shù)那些不談,統(tǒng)計(jì)學(xué)習(xí)方法基本都會(huì)涉及到相關(guān)知識(shí)和概念,還會(huì)涉及到數(shù)值分析、凸優(yōu)化理論以及矩陣論部分知識(shí),當(dāng)然不指望具備所有的知識(shí)儲(chǔ)備,大部分人還是在學(xué)習(xí)過程中,缺啥補(bǔ)啥,而這個(gè)缺啥補(bǔ)啥的過程,有時(shí)候可能都忘記一開始本來要解決的問題。
打個(gè)比方,例如在學(xué)習(xí)支持向量機(jī)的時(shí)候遇到的小場景。

在推導(dǎo)支持向量機(jī)的間隔最大化問題時(shí),其實(shí)就相當(dāng)于求解約束最優(yōu)化問題,而常常這類問題采用拉格朗日對(duì)偶性來將原始問題轉(zhuǎn)換為對(duì)偶問題,引入廣義拉格朗日函數(shù)并加以條件約束才能等價(jià)于原始問題。

等整理筆記,弄清楚了什么是約束優(yōu)化問題,什么是對(duì)偶問題,什么是廣義拉格朗日函數(shù)后,得到了最后原始問題的對(duì)偶問題,我發(fā)現(xiàn)仍然并沒有知道怎么求解對(duì)偶問題,有點(diǎn)尷尬。進(jìn)一步,為了搞明白原始問題和對(duì)偶問題的關(guān)系,就需要補(bǔ)充最優(yōu)化方法的知識(shí),所以繼續(xù)……

到最后大致理解KKT條件后,算是對(duì)凸優(yōu)化的求解過程有了初步的了解,那回到原本的原始問題,我本來要干啥來著……
所以如果有提前的知識(shí)儲(chǔ)備,那么學(xué)習(xí)小藍(lán)書是相對(duì)水到渠成的過程,若功課欠缺,那么知識(shí)的廣度就需要花一定時(shí)間去補(bǔ)課了。不幸的是,個(gè)人知識(shí)儲(chǔ)備也一般,也是在縫縫補(bǔ)補(bǔ)中過來的,這個(gè)過程的確比較頭疼。
2. 公式推導(dǎo)
公式推導(dǎo)是小藍(lán)書的一大“特色”,基本第一次翻小藍(lán)書都容易被冗長的公式勸退,并且在書本上很多公式并沒有提供很詳盡的推導(dǎo)公式,稍微省略一下就找不到北,有時(shí)候每個(gè)小標(biāo)識(shí)符號(hào)代表涵義也易弄混,簡單看一下多元正態(tài)分布參數(shù)的極大似然估計(jì)。

公式推導(dǎo)有時(shí)候消除或者合并就直接變形了,看不出來就卡住,不懂的時(shí)候瘋狂查,才能理順整個(gè)過程。大部分公式推導(dǎo)在深度之眼的課程老師還是都推了一遍,這的確是省了很多時(shí)間,不過具體推導(dǎo)過程還是得自己過一遍。
個(gè)人認(rèn)為公式多是多,但有別以前的應(yīng)試模式,我們不需要把公式背下來,最主要是通過推導(dǎo)公式的過程,理解和掌握算法的基本原理,以此鞏固對(duì)算法的印象。雖然不可否認(rèn),要推導(dǎo)的公式還是挺多的。
3. 學(xué)以致用
學(xué)習(xí)統(tǒng)計(jì)學(xué)習(xí)方法還有一個(gè)很重要的問題,就是怎么轉(zhuǎn)換為工程能力,畢竟理論是理論的,弄懂了理論問題,主要是為了解決應(yīng)用問題,實(shí)現(xiàn)代碼復(fù)現(xiàn)。一般的基礎(chǔ)公式還能進(jìn)行直接代碼復(fù)現(xiàn),但是有些復(fù)雜的公式就很考驗(yàn)代碼復(fù)現(xiàn)能力了。舉個(gè)代表的例子,感知機(jī)模型。

感知機(jī)模型是二分類的線性分類模型,公式也相對(duì)簡單,寫好代價(jià)和損失函數(shù)基本就可以直接迭代計(jì)算。但是感知機(jī)是神經(jīng)網(wǎng)絡(luò)的基礎(chǔ),如果拓展到了BP算法上,就會(huì)顯得復(fù)雜。

梳理清楚理論的過程,才能明白傳播的過程,不然光是一層層的小標(biāo)點(diǎn)符號(hào),寫了幾個(gè)for循環(huán),人也蒙圈了,更遑論對(duì)計(jì)算過程向量化,提高計(jì)算速度之類的優(yōu)化。所以學(xué)習(xí)過程中,怎么學(xué)以致用實(shí)現(xiàn)代碼復(fù)現(xiàn)也是很重要的一點(diǎn)。
三. 在學(xué)習(xí)過程中碰過哪些壁?
所謂的“壁”就是一堵墻,明知道自己走不對(duì)還死磕,鉆牛角尖。在學(xué)習(xí)過程中,碰得最多的壁就是鉆牛角尖,可是于個(gè)人而言,真沒辦法,并不是人人都是一點(diǎn)通,有一些概念沒接觸過,一開始沒法消化,一知半解然后對(duì)公式進(jìn)行推導(dǎo),就容易覺得矛盾,可是本質(zhì)上還是對(duì)概念的理解不深。還是以SVM支持向量機(jī)作為例子,當(dāng)初有個(gè)問題就是糾結(jié)老長時(shí)間。

課本上也是一帶而過,也有找課程講解,但是繞進(jìn)思維的死胡同,就比較難跳出來,因?yàn)檫€沒引入新的概念,依然采用的是原有知識(shí)概念,資料也查了,可是并不妨礙我依然是一知半解。后來還是繼續(xù)查資料,依然一知半解就還沒找到點(diǎn)醒自己的那個(gè)點(diǎn),重新對(duì)超平面的知識(shí)點(diǎn)查詢和支持向量的理解。

理清楚函數(shù)間隔和幾何間隔的關(guān)系,同時(shí)結(jié)合約束問題的理解,才最后明白:函數(shù)間隔的取值并不影響最優(yōu)化問題的解,它的改變對(duì)最優(yōu)化問題的不等式約束沒有影響,對(duì)目標(biāo)函數(shù)的優(yōu)化也沒有影響,也就是說它產(chǎn)生了一個(gè)等價(jià)的最優(yōu)化問題。(僅作說明用,不理解沒關(guān)系,舉例舉例)
包括這樣的碰壁事情,在我學(xué)習(xí)過程中見怪不怪,如果想比較透徹理解一些原理,包括它的基礎(chǔ)知識(shí)理論,有時(shí)候還是不可忽略的,總的來說,個(gè)人認(rèn)為系統(tǒng)性的學(xué)習(xí)和整理認(rèn)為是必要的,有助于獲得比較清晰的模型建立流程。

總結(jié)下來啊,主要原因:
1、知識(shí)儲(chǔ)備還太少,以前知識(shí)不夠扎實(shí);
2、看得多,寫得少。
四. 最后是如何解決問題的
1、對(duì)于問題的解決,我認(rèn)為就是針對(duì)上面總結(jié)自身原因來入手。
對(duì)于沒辦法解決的問題,鉆牛角尖是非常費(fèi)事費(fèi)力而且沒效率的事情,所以遇到難以解決的問題,還是得靈活一點(diǎn),多咨詢一下大佬肯定是最好的。
其次還是知識(shí)儲(chǔ)備太少,知識(shí)儲(chǔ)備太少,知識(shí)儲(chǔ)備太少,重要事情說三遍。這個(gè)太少意思是理解吸收少,并不是說看到少,就自己而言,有些知識(shí)概念囫圇吞棗,看了到腦子了就沒多少,顯得知識(shí)儲(chǔ)備比較少,對(duì)于不理解問題往往都是我對(duì)問題里面某些概念問題還不透徹,所以我對(duì)解決問題最直接的方法就是查漏補(bǔ)缺,有時(shí)間還是比較推薦的。
其次就是算法的相通性,有些問題一時(shí)的一知半解是沒辦法,需要等到引入某個(gè)新概念的時(shí)候才會(huì)恍然大悟。可是如果你提前去學(xué)習(xí)這些,又容易加大對(duì)現(xiàn)有學(xué)習(xí)模型的難度,并且吃力不討好,畢竟有些算法就是為了后面更復(fù)雜的算法鋪墊的,后面學(xué)習(xí)可能會(huì)顯得更容易。有點(diǎn)像調(diào)參過程,你引入些參數(shù)改良,必定又帶來新的浮動(dòng),所以需要一點(diǎn)經(jīng)驗(yàn)之談和平衡。
學(xué)習(xí)的過程中,我習(xí)慣作筆記記錄學(xué)習(xí)過程,有利于自己梳理,對(duì)于不懂和不理解的也會(huì)記錄下來,在學(xué)習(xí)感知機(jī)的時(shí)候,就對(duì)對(duì)偶算法一頭霧水,干脆就先放著并記錄下來。

在后面系統(tǒng)對(duì)拉格朗日對(duì)偶性學(xué)習(xí)后,再來對(duì)感知機(jī)的對(duì)偶形式補(bǔ)課,其實(shí)基本也是一點(diǎn)通,乃至后面模型的對(duì)偶形式也是重新按班就步的推一遍,不會(huì)出現(xiàn)很難的理解問題。所以現(xiàn)在的難題,還是有別于應(yīng)試的難題模式,應(yīng)試思考的是解題模式,現(xiàn)在思考的是模型的邏輯模式。
2、最后提到的解決問題的辦法,也是個(gè)人方法吧。
對(duì)于問題的不理解,書本上的例題多做幾遍,以及課后練習(xí),問題都不難,按步驟計(jì)算一遍,在這個(gè)過程中會(huì)不斷對(duì)正確答案作推理,最后結(jié)果正確,說明思路正確,我遇到的一些問題就是在解題的過程中得到解答。

多寫一點(diǎn)也有助于鞏固,好記性不如爛筆頭。雖然有段時(shí)間沒看后還是遺忘很多,不過再一次去翻閱,都容易有一定印象,按一定思路可以快速復(fù)習(xí)。
五. 學(xué)習(xí)的心得以及對(duì)后來的學(xué)習(xí)者的建議
1.多查多看多記錄
統(tǒng)計(jì)學(xué)習(xí)方法正如之前提的知識(shí)面問題,是大部分人首先要面對(duì)的問題,所以在學(xué)習(xí)過程中還是得多查多看,建立完善的理論流程。
在學(xué)習(xí)小藍(lán)書前,還提前過了一遍吳恩達(dá)老師的機(jī)器學(xué)習(xí),不過學(xué)習(xí)小藍(lán)書過程中,就發(fā)現(xiàn)自己的許多問題,到后來的看完小藍(lán)書后,刷西瓜書還是能繼續(xù)發(fā)現(xiàn)許多遺留問題,光是邏輯回歸的推導(dǎo)版本都更新了三次筆記。
可以應(yīng)用極大似然估計(jì)得到邏輯斯蒂回歸模型。

也可以通過廣義線性模型推導(dǎo)。

所以模型之間可能有相通性,以及相關(guān)概念,有時(shí)候的確很容易混淆的,但是每弄清楚一點(diǎn)后,就能對(duì)模型有更深的理解,所以多看多查是很有必要的,當(dāng)某個(gè)模型不熟悉不理解時(shí),不妨多找些資料去對(duì)同個(gè)多寫的話。就因人而已,個(gè)人喜歡作筆記主要是可以不斷記錄自己學(xué)習(xí)模型的迭代過程。
2. 代碼復(fù)現(xiàn)多琢磨
在學(xué)習(xí)過程中,比較重要的另一個(gè)點(diǎn)還是代碼復(fù)現(xiàn)的練習(xí),代碼復(fù)現(xiàn)的過程不僅考驗(yàn)對(duì)算法的理解,也考驗(yàn)工程能力,前期一些簡單模型還能靠自己手打,后面就放棄了,主要看代碼抄代碼為主了,抄著敲一遍,都可以對(duì)模型流程有更深的印象。
代碼復(fù)現(xiàn),網(wǎng)上有很多資源,Github上大佬都寫得挺詳細(xì)的,可以找個(gè)喜歡風(fēng)格的去學(xué)習(xí),代碼能力個(gè)人以為還是最重要的,理論都是打基礎(chǔ),沒有人是手算一大堆數(shù)據(jù)的吧。
3. 堅(jiān)持
機(jī)器學(xué)習(xí)的入門對(duì)于小白而言并不是一蹴而就的事情,最大的心得就是堅(jiān)持,因?yàn)檫^程的確比較枯燥。
可是要是說有意思的,你可以學(xué)習(xí)到很多有趣的算法,在實(shí)現(xiàn)模型的過程中,每天進(jìn)步一點(diǎn),一周學(xué)習(xí)一個(gè)模型,訂個(gè)小目標(biāo)去完成它就是最好的鼓勵(lì)。多的話不說,堅(jiān)持是學(xué)習(xí)的最大利器。
以上僅是個(gè)人的學(xué)習(xí)心得,有錯(cuò)誤的地方希望大家指正。