帶你讀機器學習經典(二): An Introduction to Statistical Learning (Chapter 3.1 線性回歸)

強烈建議閱讀該系列的第一篇文章:

帶你讀機器學習經典(一): An Introduction to Statistical Learning (Chapter 1&2)

0. 前言 - 我為什麼要寫這一系列文章?

自從上個月回答了【如何看待「機器學習不需要數學,很多演算法封裝好了,調個包就行」這種說法?】以後,我收到了很多朋友的評論和私信,希望我能談談新手如何快速入門機器學習。

為了給大家一個比較客觀公正的建議,我特地去買了幾本廣受好評的機器學習入門書籍:

  1. An Introduction to Statistical Learning with Applications in R - Gareth J. et al.
  2. Python Machine Learning - Sebastian Raschka
  3. Programming Collective Intelligence (集體編程智慧) - Toby Segaran
  4. 機器學習 - 周志華
  5. 統計學習方法 - 李航

最近我閱讀了上面的書籍,想和大家分享一下我的主觀評價。在每本書的總評後,我會對每一本書分章節進行一個梳理,並提供一些自己的感悟,希望能對大家的入門帶來一些幫助。

這一系列的文章形式為閱讀筆記,需要結合教材一起閱讀。我對知識點的順序進行了一些調整,將相關的內容合併到了一起。有疑問的小夥伴可以評論或者私信我。

在上一篇系列文章 帶你讀機器學習經典(一): An Introduction to Statistical Learning (Chapter 1&2)中,我分享了對ISL這本書的評價,以及對ISL前兩章的內容梳理。再次建議小夥伴們可以先行閱讀第一篇文章:)

隨著知識點的深入,越來越多的知識點交叉了在一起。每個章節也不得越寫越長或拆分成更小的部分。筆者力有未逮卻總想為大家提供儘可能多的拓展知識,不免有懶婆娘的裹腳布之嫌。

作為系列文章的第二篇,我會帶著大家梳理 ISL的第3章的第一部分。

1. 書籍導讀 - Chapter 3 - Linear Regression

相信大家還記得我們在上一篇文章中區分了回歸(Regression)與分類(Classification)之間的區別。簡單來說,回歸是用於預測連續值的,而分類的預測對象只能是有限個數的離散值。

本章的開篇(59-60頁)作者首先拿出了第二章的用過的數據集作為例子,即電視廣告(TV),報紙廣告(Newspaper),和廣播廣告(Radio)對於產品銷量的影響。具體來說,一個公司同時通過這三種廣告媒介進行宣傳,在不同的廣告預算下,產品銷量也不同。我們希望通過數據分析了解不同的廣告渠道對銷量有什麼影響,並最大化廣告對於銷量的增益。

上圖的數據(不完全)截取自ISL的數據集。以第一行為例,在電視廣告=230.1,廣播廣告=37.8,和報紙廣告=69.2的情況下,銷量等於22.1。

如上圖所示,如果單獨繪出每一種廣告渠道和銷量之間的關係,我們得到電視廣告投入和銷量之間的關係[左圖],廣播廣告[中圖]、報紙廣告對於單獨作用於銷量的影響[右圖]。似乎看起來TV和Radio對銷量上漲都有貢獻,而Newspaper沒那麼明顯。但等等,這種直覺對嗎?

通過學習這一章,我們會通過廣告投入和銷量變化的例子回答以下幾個問題:

  1. 廣告投入和銷量之間有沒有關係?也就是用統計學方法我們是否可以知道「花錢在電視,廣播,和報紙廣告」上是否能對銷量造成明顯影響,即輸入值和輸出值之間是否有顯著的映射關係?
  2. 如果存在這種關係,如何量化這種關係的強度?是否可以找到一個準確的映射使得我們可以通過廣告投入精確的求得對應的預期銷量?
  3. 如果存在這種關係,這種關係是否是線性的?注: 稍後我們會給出線性和非線性的定義。
  4. 如果存在這種關係,是否三種廣告手段都可以促進銷量的上升?每一種廣告手段對銷量有多大的貢獻是否可以量化
  5. 如果存在這種關係,不同的廣告渠道之間是否會相互作用?例如電視廣告是否加強人們對廣播廣告的熟悉度,從而間接的促進銷量?還是三種廣告渠道對銷量的影響是獨立的?

讓我們帶著以上疑問進入今天的正片環節。

2. 書籍導讀 - Section 3.1 - Simple Linear Regression

簡單線性回歸(Simple Linear Regression)也叫做一元線性回歸,此處的 「簡單」和「一元」都是指只有一個變數和因變數。公式:Y approx eta_0 + eta_1X是統計學的寫法,機器學習領域我們比較常見的寫法是f(x) = wx+b。這倆公式說的是同一函數在不同學科中的不同表達,而且一眼可以看出這兩個公式其實就是定義了一條直線

在這兩個式子中都只有一個變數即X(或小寫x),而受到變數X影響的因變數就是Y(也是機器學習領域的f(x))。eta _0b叫做截距(intercept),eta _1w即斜率(slope)。所以一元線性回歸就是找一個描述X和Y之間關係的一次函數...說白了就是熟悉的高中數學知識。唯一的變化就是高中的時候會給你兩個線上的點來求斜率和截距,而現在我們是通過一堆分布在該直線上以及該線附近的樣本數據來估算這個一次函數。

一元線性回歸假設樣本數據點可以被一條直線所描述。當然,這只是一種假設!以電視廣告和銷售額為例,我們假設不考慮其他因素(報紙廣告等),電視廣告和銷售額的關係可以近似的看做是一次函數,也就是一條直線。如下圖所示,TV=0時Sales約等於6,TV=100時Sales約等於12。

因此一元線性回歸的本質就是將通過樣本數據點(x_1,y_1),>(x_2,y_2),...,>(x_n,y_n),找到一個一次函數(直線)來儘可能描述這些數據點的分布規律。以ISL的例子為例,(x_k,y_k)即代表在電視廣告上投入的錢為x_k時所對應的銷量的y_k

1. 如何通過數據點來估算函數? - 61-63頁

因為我們已經確定了使用一元線性回歸,那麼只有兩個參數需要估計,截距eta _0,和斜率eta _1。在我們的例子中,好像可以把所有點畫出來,看看哪條線穿過了最多的點,因此得到(eta_0,eta_1)。一元線性回歸的本質上是估算(eta_0,eta_1),如果靠猜,我們可以有無數個(eta_0,eta_1)的組合。這當然是一種思考方向,機器學習中怎樣選擇最優往往取決於實踐者對問題的思考深度。明顯,我們有 更精確的做法。

ISL中給出的估算方法叫做最小均方誤差(MSE),在上一篇文章中有所介紹。數學上的演算法是Least Square Methods,即最小二乘法。即找到一組斜率和截距,使得其對應的函數在輸入X時得到的Y,與真實Y值的差方和最小。在換句話說,就是找到一條直線,使得所有樣本數據點到這條直線的歐式距離(Euclidean Distance)之和最短。歐式距離在上圖中用黑色直線直觀的表示了出來。這是一句很拗口的話,讓我們先通過公式來明確優化目標,即尋找一組最優的(eta_0,eta_1)使得均方誤差之和最小:

egin{split}(eta_0^*, eta_1^*)&=argmin_{(eta_0,eta_1)}sum_{i=1}^n(hat{f}(x_i)-y_i)^2 qquad qquad(1.1)\&= argmin_{(eta_0,eta_1)}sum_{i=1}^n(eta_1x_i+eta_0-y_i)^2end{split}

用人話說,過程如下...:

  1. 對於待評價函數hat{f}(x) = eta_0+eta_1x
  2. [x_1,x_2,...,x_i]帶入到當前函數中hat{f}(x) = eta_0+eta_1x得到一系列的估算值[hat{y}_1,hat{y}_2,...,hat{y}_i]
  3. x_i對應的真實的y_i減去估算出來的hat{y}_i,求得差值並對其取平方,即(y_i-hat{y}_i)^2
  4. 因為我們有不只有一個xy,而是(x_1,y_1),>(x_2,y_2),...,>(x_n,y_n)。因此對1-n所有的樣本數據重複步驟2-3,並把所有的差值平方加起來,即可得到對於(x_1,y_1),>(x_2,y_2),...,>(x_n,y_n)的均方差值sum_{i=1}^n(eta_1x_i+eta_0-y_i)^2
  5. 本質上,我們是在求估算值[hat{y}_1,hat{y}_2,...,hat{y}_i]和真實值[y_1,y_2,...,y_i]之間的歐氏距離,後文(第3小節)會給出更多的分析。

因為存在無數(eta_0,eta_1)的組合,我們需要優先選取可以使均方誤差最小的那一組(eta_0,eta_1),這代表了這個函數對數據的擬合程度高:)

那麼問題來了,到底怎麼求(eta_0,eta_1)的最優解....?So easy!對上面的公式(1.1)求偏微分即可求出最優的(eta_0,eta_1),也就得到了這個問題的解。詳見ISL第62頁。

2. 最小二乘法和均方誤差在一元線性回歸中的意義

從統計學觀點上看,使用最小二乘來對參數(eta_0,eta_1)進行估計是有道理的。但需要對樣本數據有一定的假設,那就是樣本數據點(sample)應該是隨機且獨立的從母體(population)中抽取的。母體也叫總體,本文中統一叫做母體。

我們有各種各樣的參數估計方法,最小二乘法並不是唯一的做法。但做小二乘法,也就是式(1.1)得到的優化函數,是一個凸函數(convex function)。而對於凸函數的優化及求極值已經有了比較充分的研究,因此我們可以得到(eta_0,eta_1)最優閉式解(closed-form solution),也就是說確定的答案--這在大部分機器學習問題中是很難做到的。在後面的學習中,我們會無數次聽到凸優化和非凸優化這兩個詞語,這也是統計學習和機器學習的一個重要研究方向。關於凸優化的討論可以看這裡: 為什麼凸優化這麼重要? - 知乎

「最優解」在機器學習中一直是最高追求,機器學習問題往往可以簡化為優化問題。因為種種原因(如計算能力和模型限制),我們大部分時候只能得到次優解或局部最優解。我們會在後面的章節講述更多優化相關的問題。

3.距離度量方法

這個話題並未在ISL中進行深度討論,但我覺得有必要科普一下常見的做法,因為這解決了為什麼最小二乘法中使用了歐氏距離。

首先什麼是距離度量?簡單暴力的可以理解為測量兩個"向量"之間的相似度,兩個向量間的相似度越高,距離越近。距離度量是非常重要的概念,對於非監督學習中的聚類,以及推薦系統有重要的意義。此處的"向量"是一種廣義的說法,維度可以從1維到N維。先給定幾種常見的距離度量方法:

  • 曼哈頓距離(Manhattan Distance): Dis_{man}(m{x}_i,m{x}_j)=|m{x}_i-m{x}_j|_1=sum_{k=1}^n|x_{ik}-x_{jk}|

  • 歐氏距離(Euclidean Distance):Dis_{euc}(m{x}_i,m{x}_j)=|m{x}_i-m{x}_j|_2=sum_{k=1}^nsqrt{|x_{ik}-x_{jk}|^2}
  • 閔可夫斯基距離(Minkowski Distance): Dis_{min}(m{x}_i,m{x}_j)=|m{x}_i-m{x}_j|_p=(sum_{k=1}^n|x_{ik}-x_{jk}|^p)^{frac{1}{p} }

不難看出歐式距離和曼哈頓距離其實是閔可夫斯基距離在(p=2)和(p=1)時的特例。給出幾個例子大家就可以比較清楚理解什麼是"距離"。

假設我有兩個1維的向量[3][5],我們會發現幾種距離度量給出相同的答案:

  • 曼哈頓距離: Dis_{man}(m{x}_i,m{x}_j)=|3-5|_1=sum_{k=1}^1|3-5| = 2
  • 歐氏距離: Dis_{euc}(3,5)=|3-5|_2=sum_{k=1}^nsqrt{|3-5|^2}=2
  • 閔可夫斯基距離也依然等於2,此處略過計算。

那麼聰明的讀者可以發現[3][4]之間的距離更近,僅為1。這代表了向量[3][4]之間的相似度比[3][5]之間的相似度更高,這就是距離度量的意義。

假設我有兩個3維的向量m{x_i}=[1,2,3]m{x_j}=[3,4,5]:

  • 曼哈頓距離: Dis_{man}(m{x}_i,m{x}_j)=|1-3|+|2-4|+|3-5| = 6

    • 歐氏距離: Dis_{euc}(m{x}_i,m{x}_j)=sqrt{|1-3|^2+|2-4|^2+|3-5|^2}=2sqrt{3}

    • 閔可夫斯基距離:Dis_{min}(m{x}_i,m{x}_j)=|m{x}_i-m{x}_j|_{p=3}=(|1-3|^3+|2-4|^3+|3-5|^3)^{frac{1}{3} } = 24^{frac{1}{3} }

    如果求m{x_i}=[1,2,3]m{x_j}=[1,2,3]之間的距離,我們會發現永遠等於0。

    因此,距離度量的作用就是評估兩個向量之間的相似度。此處不難看出歐式距離的幾何意義就是幾何距離的定義。我們在回歸的最小二乘法中求了由hat{y} = hat{f}(x)得到的[hat{y}_1,hat{y}_2,...,hat{y}_n]即我們的估計值,與真實值[y_1,y_2,...,y_n]之間的歐氏距離,也就是相似度。於是最小二乘法就是最小化歐式距離,也就是使得估計值與真實值盡量接近!最小化的歐氏距離保證了回歸函數最優。

    在使用距離度量前,要注意一些重點:

    • 首先,這種測定方法僅當向量中僅含數字時有效。至於離散屬性,如{蘋果,香蕉,西瓜}這種向量需要別的方法來求解,暫時不表。
    • 其次,各種距離度量的測量方法的幾何意義在高維空間往往失去了意義。
    • 多說一點,不同維度直接進行加減乘除往往涉及到「單位不同」,大部分時候我們需要做歸一化處理。此處按下不表。

    更多距離度量的知識我們會以後再展開....

    4. 回歸的準確性及參數相關性 - 3.1.2&3.1.3 - 63-68頁

    通過最小二乘我們找到了找到了最優的hat{f}(x) = eta_0+eta_1x。但只能說找到了一個可能的解,最重要的問題就是這個解有沒有意義。因此我們需要分別討論hat{f}(x),eta_0,eta_1,是否有意義且如何度量:

    • 4.1.從整體上分析了影響回歸表現主要原因
    • 4.2.和4.3.討論了如何評估(eta_0,eta_1)的準確性
    • 4.4. 討論了作為一個整體hat{f}(x) = eta_0+eta_1x的評估方法

    以上圖為例,直觀的看出很難通過一條直線來擬合所有的數據點,甚至擬合大部分數據點都做不到。這個問題的根源在於最小二乘法保證了找到了最低的均方差,而並不是保證均方差一定很小。套用一句諺語,「矮子裡面拔高個」,即使他是小矮人裡面最高的,也很有可能是小矮人...

    4.1. 什麼情況可能會發現最優解的預測能力還是很差?

    • 數據無法被一條直線所擬合,就上上圖那種明顯不是一條直線能做到的,因此我們在第一步就不該用一元線性回歸。錯誤的假設是一條直線導致了全盤皆輸。
    • 數據採樣的時候並非隨機獨立採樣。假設我們的真是數據分布服從f(x) = x^2,但採樣的時候我們專門密集採集了一堆靠近x=0即原點附近的點。我們知道任何函數在足夠小的區間上都可以近似為直線(不準確的說法),因此僅採用這些數據來擬合一元線性回歸結果和真實的數據分布一定相差很大。
    • 數據不足,函數的特徵無法通過有限的數據點來表現。雖然兩個點就可以確定一條直線,但別忘了上篇文章中我們提到的數據中自帶的「噪音」。足夠的數據才可以保證對噪音有魯棒性(Robustness),即對噪音有抵抗力,整體模型有較好的泛化能力。詳見上一篇文章帶你讀機器學習經典(一): An Introduction to Statistical Learning (Chapter 1&2) 第2.1節。

    4.2. 如何度量(eta_0,eta_1)的準確性?- 63-68頁

    首先我們在求出最優的(eta_0,eta_1)時並不知道它們到底有多準確。從統計學觀點上給出兩個假設:

    • 樣本數據中的內在噪音epsilon 的分布是獨立於變數X且均值為0,這一部分誤差無法被降低,也叫做irreducible errors。詳見ISL的16頁和63頁。
    • 當樣本數量足夠大的時候,其分布無限近似於母體的真實分布。相信大部分人都聽過大數定理(不管是強大數還是弱大數),其哲學含義也是一樣的,即樣本數量越大,平均值越接近其期望值。給個不嚴謹的例子,你扔一個公平的篩子200000次,理論上出現1的次數應接近六分之一,但你扔20次時可能得到一些很離譜的數字。

    我們單獨分析第二條假設,如果我們用整個母體(即所有數據)來最回歸,我們可以得到近乎完美的(eta_0,eta_1)(排除內在噪音的部分)。然而現實中我們無法做到這一點,我們的樣本數據(sample)往往遠遠小於母體(population)。

    因此,回歸的準確性一般可以通過幾個標準來測量:

    • 我們先對hat{f}(x) = eta_0+eta_1x中估算出的所有hat{y}求均值hat{mu}和方差hat{sigma} ^2
    • 並分別對估算的(eta_0,eta_1)求標準誤SE(hat{eta_0})^2SE(hat{eta_1})^2(ISL第66頁公式3.7和3.8)。SE(hat{eta_0})^2SE(hat{eta_1})^2代表了我們估算的(hat{eta_0},hat{eta_1})和真實的(eta_0,eta_1)有多麼接近,因此這個值當然越小越好....

    相信大家對於統計學的置信區間(condifence level)還有印象,因此eta_1的95%置信區間就可以估算為: [hat{eta_1}-2cdot SE(hat{eta_1}),>hat{eta_1}+2cdot SE(hat{eta_1})]用大白話解讀就是,我們相信有95%的幾率eta_1的真實取值落在這個區間裡面。同理對於eta_0我們也可以求置信區間。

    一個跨度較寬的置信區間暗示了我們對結果沒那麼有自信,較小的標準誤代表我們的預期誤差比較小。然而,除了檢查準確性,我們求標準差和置信區間等其他指標還有什麼意義?

    4.3. 如何證明X與Y之間的關係並量化其強度?

    這個標題起得並不準確,嚴格的說就是我們一廂情願的相信hat{y} = hat{f}(x) = eta_0+eta_1x中的x和y之間有相關性,即Pr(y|x)
e Pr(y) quad w.r.t>Pr(x)
e0。舉例,ISL中的例子希望在不考慮其他因素的前提下來量化 銷量(sales)和電視廣告(TV advertisement)之間的關係,至少知道有沒有關係。

    萬一沒有什麼關係,那求半天不是鬧笑話呢嗎....(黑人問號臉???)

    統計學中的常規方法求兩個變數之間的相關性是t-statistics(t-統計量),是經典的係數顯著性檢驗方法,通過查看p值,即概率,來判斷兩個變數之間的關係。此處不再贅述,請參考ISL第68頁的例子。

    此處的例子表明(hat{eta_0},hat{eta_1})均與y有顯著關係因為p-value非常小。好險,不然我們聊了這麼久就成了尬聊。

    4.4. 如何評價一元回歸模型hat{f}(x)的準確度?68-71頁

    承接4.3.的內容,在得知(hat{eta_0},hat{eta_1})均與y有顯著關係後,我們就想直接來整體評估hat{f}(x)的表現。在ISL中,作者給出兩種量化方法:

    方案一:(標準化)殘差分析(Residual Standard Error, RSE)。RSE可以用來度量一個模型hat{f}(x)對數據的欠擬合度。就像本文4.2.提到的,我們永遠繞不過去的坎就是數據的內在噪音,RSE在度量hat{f}(x)時也肯定會把噪音的影響測量進去,這是不可避免的。具體的計算方法在69頁給出。

    • RSE的一種解釋是hat{f}(x)對內在噪音的平均偏離值,因此是通過RSS計算而來。
    • RSE越小代表hat{f}(x)對數據的擬合程度越好。但是什麼才叫做小?一般而言需要通過和mu_y做比較:p = frac{RSE}{mu_y}  in [0,1]理論上是一個0至1之間的數,越接近0當然越好...

    方案二:R^2>Stastics和RSE不同,提供的是hat{f}(x)對於數據的擬合度。與RSE相同的是,也是通過RSS計算而來的,具體的計算方法在ISL的70頁。

    • R^2>Stastics的取值為[0,1],因為本質是一個比例,比RSE更加直觀。從這個角度說,更容易用於標準化計算。但我們在上面也給出了一個不嚴謹的RSE歸一化的方法p。

    • R^2>Stastics描述了通過hat{f}(x)映射後X對於Y的方差的描述程度。換句話說,我們知道Y是一個分布,那麼Y本身就有有一個方差為Var(y) = sum_{i}^{n}({y_i-ar{y} })^2 。而由hat{f}(x)映射後X,我們得到了由一個RSS即能被hat{f}(x)所解釋的方差: hat{y} =hat{f}(x) > and>RSS=sum_{i=1}^{n}({y_i-hat{y}_i})^2

    • R^2>Stastics相比較RSE,有很多解釋性的優勢,而且還可以被拓展到多元線性回歸。限於篇幅,更多的R^2>Stastics討論會在下一篇文章中進行闡述。

    3. 後記(心靈雞湯)

    錢理群教授在《大學裡絕對精緻的利己主義者》說過,「在中國的大學裡,包括最好的北大、清華,都正在培養一群20幾歲就已經』老奸巨猾』的學生,他們高智商,世俗,老到,善於表演,懂得配合,更善於利用體制達到自己的目的。一旦這些人掌握了權力,擁有了地位,帶來的危害比貪官污吏更大!」

    現在我們大部分人,包括知乎上大部分的「精英分子」,往往都忘了除了金錢、地位、個人發展以外的很多社會責任。我們有很多事情不敢談論,我們只敢埋首故紙堆,推算著公式,假裝周圍什麼都沒有發生。然而越來越多的東西正在從網上和我們身邊慢慢消失,我們真的可以裝作視而不見嗎?

    我們的祖國發生了太多的事情,這時時刻刻提醒著我們曾發生在中華大地上那些人為製造的慘劇。有太多的話想說而不能說,也不敢說。只希望我輩能踏實下來,快速成長,獲得更多的話語權。讓想說話的人有話可說,有話敢說,這也是我們作為知識分子該肩負起的責任。

    周迅在《風聲》中飾演的顧曉夢留下了這樣的訣別語: "我身在煉獄留下這份記錄,只希望家人和玉姐能原諒我此刻的決定,但我堅信你們終會明白我的心情,我親愛的人,我對你們如此無情,只因民族已到存亡之際,我輩只能奮不顧身,挽救於萬一。我的肉體即將隕滅,靈魂卻將與你們同在。敵人不會了解,老鬼、老槍,不是個人,而是一種精神,一種信仰"。

    自由是一種信仰。

    ---與諸君共勉

    推薦閱讀:

    UEFI架構
    數據結構上的堆棧、操作系統上的堆棧,彙編語言的堆棧、還有C語言本身的堆棧,有什麼不同?
    [22] Python函數(三)
    人的平均邏輯遞歸層數是多少?
    MD5是滿射嗎?

    TAG:机器学习 | 人工智能 | 计算机科学 |