聖元哥的新書《快樂機器學習》,全綵印,講解體系化、有趣、多圖展示。前段時間聖元哥還特意送我一本,真的很不錯,目前正在認真研讀,在這裏特此推薦給我的讀者朋友們。
下面是聖元對這本書的一個基本介紹。
題圖是書的封面(大陸和臺灣)
讀過我文章或聽過我課的朋友也應該知道我喜歡按以下四個理念講東西:
體系化,故事化,可視化,抽象化
體系化(systematize)可以把握全局
故事化(dramatize)可以引人入迷
可視化(visualize)可以增強記憶
抽象化(generalize)可以認清本質
下面配着「快樂機器學習」一書,來講講上面“四個化”。
體系化
將零碎的知識點體系化真的很重要,機器學習的基本要點都總結在一張思維腦圖裏了。
機器學習包含四個元素:
數據 (Data)
任務 (Task)
性能度量 (Quality Metric)
模型 (Model)
數據包括結構化和非結構化數據:
前者類似二維的數據表,每一行是一個實例,每一列是一個特徵。
後者包括圖片,文字,語音和視頻等,它們都可以轉換成結構化前者。
根據學習的任務模式 (訓練數據是否有標籤),機器學習可分爲四大類:
有監督學習 (有標籤)
無監督學習 (無標籤)
半監督學習 (有部分標籤)
增強學習 (有評級標籤)
高度概括一下:
有監督學習的目標是推廣 (generalize)
無監督學習的目標是壓縮 (compress)
半監督學習是前兩者的混合
增強學習的目標是反應 (act)
深度學習只是一種方法,而不是任務模式,因此與上面四類不屬於同一個維度,但是深度學習與它們可以疊加成:深度有監督學習、深度非監督學習、深度半監督學習和深度增強學習。遷移學習也是一種方法,也可以分類爲有監督遷移學習、非監督遷移學習、半監督遷移學習和增強遷移學習。
本書主要講監督式學習,其下的迴歸和分類任務裏最常見的誤差函數以及一些有用的性能度量如下。
模型見下圖的下半部分。
學習並精通一門學科無外乎要經過四個步驟:它是什麼?它可行嗎?怎麼學它?如何學好它?學習機器學習也不例外,本書就以這四個步驟來解讀機器學習。
第 1 章介紹“機器學習是什麼”,即從定義開始,詳細介紹機器學習涉及的知識、數據和性能度量。
第 2 章介紹“機器學習可行嗎”,即機器具備學習樣本以外的數據的能力。本章從概率的角度證明樣本內誤差和樣本外誤差的關係。
第 3 章介紹“機器學習怎麼學”,即機器如何選出最優模型。本章介紹機器學習版本的樣本內誤差(訓練誤差)和樣本外誤差(測試誤差),再通過驗證誤差來選擇模型。
前 3 章屬於機器學習的概述:第 1 章介紹機器學習的概念,爲了讓讀者打好基礎;第 2 章爲證明機器學習是可行的,讓讀者做到心中有數;第 3 章運用機器學習性能指標而構建框架,看懂它們不需要精通任何機器學習的算法。作者在這 3 章的寫作上花費的時間最多,光這 3 章的內容就絕對讓讀者有所收穫。
第 4 ~14 章介紹“如何學好機器學習”,重點介紹機器學習的各類算法和調參技巧。在本書中,機器學習模型分爲線性模型、非線性模型和集成模型。
第 4 ~ 8 章 介紹線性模型,包括線性迴歸模型、對率迴歸模型、正則化迴歸模型、支持向量機模型。
第 9 ~11 章介紹非線性模型,包括樸素貝葉斯模型、決策樹模型、人工神經網絡模型、正向/反向傳播模型。
第 12 ~14 章介紹集成模型,包括隨機森林模型、提升樹模型、極度梯度提升模型。
第 15 章介紹機器學習中一些非常實用的經驗,包括學習策略、目標設定、誤差分析、偏差和方差分析。
體系化可以把握全局
故事化
生動的故事總是比枯燥的陳述更能讓人感興趣,下面拿隨機森林來舉例。
故事開始
挑剔的王妮梅搞砸了媽媽給她安排的與 40 位不同男士的約會,媽媽又給她介紹了 20 位男士。妮梅很苦惱,失敗了這麼多次,她開始懷疑自己對男士做出“見或不見”的判斷標準不準確了。這時,她向她的好朋友劉舒求助。
劉舒(柳樹)是判斷妮梅應該見誰的一棵決策樹(Decision Tree)。但劉舒並不能總是很好地概括妮梅的喜好,並且提的問題不全面。爲了獲得更準確的建議,妮梅去詢問其他朋友自己應該見哪一位?結果,所有人都認爲妮梅應該見 X 先生。妮梅的朋友叫宋舒(松樹)、楊舒(楊樹)和佰舒(柏樹),他們組成了判斷妮梅應該見誰的一片森林(Forest)。
現在,妮梅不想讓她的每個朋友都做同樣的事情,給出一樣的答案,所以,妮梅決定給宋舒、楊舒和佰舒的數據與給劉舒的數據不一樣,她在數據中隨機加一些輕微的干擾項。而且有時候,妮梅也並不完全確定自己的喜好。
妮梅不會改變自己的喜好,只會加一些“很”“超級”“非常”之類的感情色彩詞。這時,妮梅給每個朋友的是原始數據的自助採樣(Bootstrap)版本。妮梅希望朋友們能給她一些相互獨立的建議。比如,劉舒覺得妮梅喜歡 X 和 Z 先生,宋舒覺得妮梅喜歡 X 和 Y 先生,而楊舒覺得妮梅討厭所有人。其中可能產生的誤判會在他們一起投票時相互抵消。現在他們組成了判斷妮梅應該見誰的一片隨機森林(Random Forest)。
雖然妮梅喜歡 X 和 Y 先生,但並不是因爲他們都是對沖基金經理,也許另有原因。因此,妮梅不希望她的朋友們都根據“收入”這個條件而提出建議,她限制每個朋友提的問題。
以前妮梅在數據層面注入隨機性(輕微改變自己對男生的喜好),現在她在問題層面注入隨機性(讓她的朋友們提出不同的問題)。現在她的朋友們組成了判斷妮梅應該見誰的一片更爲隨機的隨機森林。
最終,妮梅拿到所有人對這 20 位男士的建議,再根據自己對這些朋友的信任度和品位,在他們的建議上加一個權重。例如妮梅信任劉舒多一些,就多注重他的建議,信任楊舒少一些,就少注重他的建議。這種結合方式類似於提升法裏的非均勻結合法。
上式中權重越大,字體越大
故事結束
現在我相信即便你還不太懂隨機森林模型,但也能大概瞭解它是做什麼的了 - 它能夠降低預測的方差。
這樣你們學起來會很輕鬆,但對我而言就要下很大功夫,但是我願意。
故事化可以引人入迷
可視化
一圖勝千言,人是感官動物,從圖表中接收的信息速度絕對比從文字快。
在學習集成模型時,有裝袋法(bagging)、提升法(boosting)和堆積法(stacking)。
看着上面的文字是不是感覺一頭霧水,但如果配着下面的圖呢?
裝袋法概念圖
要點:並聯結合
提升法概念圖
要點:串聯結合
堆積法概念圖
要點:分堆結合
具體而言,與裝袋法“最後通過投票或者求平均值來結合所有學習器的預測”不同,堆積法通過訓練一個學習器(元學習器,Meta Learner)來完成這個結合。
堆積法有三個核心步驟
訓練一級分類器:首先將訓練數據分爲 3 份:D1, D2, D3。h1 在 D1 和 D2 上訓練,h2 在 D1 和 D3 上訓練,h3 在 D2 和 D3 上訓練。
新訓練數據:包含 h1 在 D3 上的輸出,h2 在 D2 上的輸出,h3 在 D1 上的輸出。
訓練二級分類器:通過新訓練數據和對應的標籤,訓練出第二級分類器 。
通過這樣的可視化過程,你會發現集成模型也不難。
可視化可以增強記憶
抽象化
從具體問題能抽出本質是一種很重要的能力,人一旦會舉一反三才算會學習。
拿支持向量機(SVM)舉例
光看類型有三種:線性可分、線性輕度不可分、線性重度不可分
光看錶達形式有四種:硬間隔(軟間隔)原始(對偶)問題
這些知識點都是零散的,但拉格朗日方法連接着原始問題和對偶問題,空間轉換通過提升維度將線性重度不可分轉成線性輕度不可分,然後高維空間的計算量太大,又需要核技巧來提高效率。
通過抽象化總結出下圖,將所有 SVM 的知識點連起來,融會貫通。
抽象化可以認清本質
我就喜歡用框架總結,抓住重點
我就喜歡用故事類比,妙趣橫生
我就喜歡用圖表剖析,簡單易懂
我就喜歡用通式歸納,舉一反三
如果你同意我上面說的「體系化、故事化、可視化、抽象化」理念,看過並喜歡我的文章,那麼可以買一本看看,現在京東上有活動,掃以下二維碼去買書滿 100 返 50。
最後獻上本書的前言,饗你