機器學習中的數學(2)-線性迴歸,偏差、方差權衡

版權聲明:

    本文由LeftNotEasy所有,發佈於http://leftnoteasy.cnblogs.com。如果轉載,請註明出處,在未經作者同意下將本文用於商業用途,將追究其法律責任。如果有問題,請聯繫作者 [email protected]

前言:

    距離上次發文章,也快有半個月的時間了,這半個月的時間裏又在學習機器學習的道路上摸索着前進,積累了一點心得,以後會慢慢的寫寫這些心得。寫文章是促進自己對知識認識的一個好方法,看書的時候往往不是非常細,所以有些公式、知識點什麼的就一帶而過,裏面的一些具體意義就不容易理解了。而寫文章,特別是寫科普性的文章,需要對裏面的具體意義弄明白,甚至還要能舉出更生動的例子,這是一個挑戰。爲了寫文章,往往需要把之前自己認爲看明白的內容重新理解一下。

    機器學習可不是一個完全的技術性的東西,之前和部門老大在outing的時候一直在聊這個問題,機器學習絕對不是一個一個孤立的算法堆砌起來的,想要像看《算法導論》這樣看機器學習是個不可取的方法,機器學習裏面有幾個東西一直貫穿全書,比如說數據的分佈、最大似然(以及求極值的幾個方法,不過這個比較數學了),偏差、方差的權衡,還有特徵選擇,模型選擇,混合模型等等知識,這些知識像磚頭、水泥一樣構成了機器學習裏面的一個個的算法。想要真正學好這些算法,一定要靜下心來將這些基礎知識弄清楚,才能夠真正理解、實現好各種機器學習算法。

    今天的主題是線性迴歸,也會提一下偏差、方差的均衡這個主題。

線性迴歸定義:

    在上一個主題中,也是一個與迴歸相關的,不過上一節更側重於梯度這個概念,這一節更側重於迴歸本身與偏差和方差的概念。

    迴歸最簡單的定義是,給出一個點集D,用一個函數去擬合這個點集,並且使得點集與擬合函數間的誤差最小。

   image    上圖所示,給出一個點集(x,y), 需要用一個函數去擬合這個點集,藍色的點是點集中的點,而紅色的曲線是函數的曲線,第一張圖是一個最簡單的模型,對應的函數爲y = f(x) = ax + b,這個就是一個線性函數,

    第二張圖是二次曲線,對應的函數是y = f(x) = ax^2 + b。

    第三張圖我也不知道是什麼函數,瞎畫的。

    第四張圖可以認爲是一個N次曲線,N = M - 1,M是點集中點的個數,有一個定理是,對於給定的M個點,我們可以用一個M - 1次的函數去完美的經過這個點集。

    真正的線性迴歸,不僅會考慮使得曲線與給定點集的擬合程度最好,還會考慮模型最簡單,這個話題我們將在本章後面的偏差、方差的權衡中深入的說,另外這個話題還可以參考我之前的一篇文章:貝葉斯、概率分佈與機器學習,裏面對模型複雜度的問題也進行了一些討論。

    線性迴歸(linear regression),並非是指的線性函數,也就是

image (爲了方便起見,以後向量我就不在上面加箭頭了)

    x0,x1…表示一個點不同的維度,比如說上一節中提到的,房子的價錢是由包括面積、房間的個數、房屋的朝向等等因素去決定的。而是用廣義的線性函數:

 image    wj是係數,w就是這個係數組成的向量,它影響着不同維度的Φj(x)在迴歸函數中的影響度,比如說對於房屋的售價來說,房間朝向的w一定比房間面積的w更小。Φ(x)是可以換成不同的函數,不一定要求Φ(x)=x,這樣的模型我們認爲是廣義線性模型。

 

最小二乘法與最大似然:

    這個話題在此處有一個很詳細的討論,我這裏主要談談這個問題的理解。最小二乘法是線性迴歸中一個最簡單的方法,它的推導有一個假設,就是迴歸函數的估計值與真實值間的誤差假設是一個高斯分佈。這個用公式來表示是下面的樣子:image ,y(x,w)就是給定了w係數向量下的迴歸函數的估計值,而t就是真實值了,ε表示誤差。我們可以接下來推出下面的式子:

image     這是一個簡單的條件概率表達式,表示在給定了x,w,β的情況下,得到真實值t的概率,由於ε服從高斯分佈,則從估計值到真實值間的概率也是高斯分佈的,看起來像下面的樣子:

    image     貝葉斯、概率分佈與機器學習這篇文章中對分佈影響結果這個話題討論比較多,可以回過頭去看看,由於最小二乘法有這樣一個假設,則會導致,如果我們給出的估計函數y(x,w)與真實值t不是高斯分佈的,甚至是一個差距很大的分佈,那麼算出來的模型一定是不正確的,當給定一個新的點x’想要求出一個估計值y’,與真實值t’可能就非常的遠了。

     概率分佈是一個可愛又可恨的東西,當我們能夠準確的預知某些數據的分佈時,那我們可以做出一個非常精確的模型去預測它,但是在大多數真實的應用場景中,數據的分佈是不可知的,我們也很難去用一個分佈、甚至多個分佈的混合去表示數據的真實分佈,比如說給定了1億篇網頁,希望用一個現有的分佈(比如說混合高斯分佈)去匹配裏面詞頻的分佈,是不可能的。在這種情況下,我們只能得到詞的出現概率,比如p(的)的概率是0.5,也就是一個網頁有1/2的概率出現“的”。如果一個算法,是對裏面的分佈進行了某些假設,那麼可能這個算法在真實的應用中就會表現欠佳。最小二乘法對於類似的一個複雜問題,就很無力了

 

偏差、方差的權衡(trade-off):

    偏差(bias)和方差(variance)是統計學的概念,剛進公司的時候,看到每個人的嘴裏隨時蹦出這兩個詞,覺得很可怕。首先得明確的,方差是多個模型間的比較,而非對一個模型而言的,對於單獨的一個模型,比如說:

image

    這樣的一個給定了具體系數的估計函數,是不能說f(x)的方差是多少。而偏差可以是單個數據集中的,也可以是多個數據集中的,這個得看具體的定義。

    方差和偏差一般來說,是從同一個數據集中,用科學的採樣方法得到幾個不同的子數據集,用這些子數據集得到的模型,就可以談他們的方差和偏差的情況了。方差和偏差的變化一般是和模型的複雜程度成正比的,就像本文一開始那四張小圖片一樣,當我們一味的追求模型精確匹配,則可能會導致同一組數據訓練出不同的模型,它們之間的差異非常大。這就叫做方差,不過他們的偏差就很小了,如下圖所示:

image     上圖的藍色和綠色的點是表示一個數據集中採樣得到的不同的子數據集,我們有兩個N次的曲線去擬合這些點集,則可以得到兩條曲線(藍色和深綠色),它們的差異就很大,但是他們本是由同一個數據集生成的,這個就是模型複雜造成的方差大。模型越複雜,偏差就越小,而模型越簡單,偏差就越大,方差和偏差是按下面的方式進行變化的:

image     當方差和偏差加起來最優的點,就是我們最佳的模型複雜度。

     用一個很通俗的例子來說,現在咱們國家一味的追求GDP,GDP就像是模型的偏差,國家希望現有的GDP和目標的GDP差異儘量的小,但是其中使用了很多複雜的手段,比如說倒賣土地、強拆等等,這個增加了模型的複雜度,也會使得偏差(居民的收入分配)變大,窮的人越窮(被趕出城市的人與進入城市買不起房的人),富的人越富(倒賣土地的人與賣房子的人)。其實本來模型不需要這麼複雜,能夠讓居民的收入分配與國家的發展取得一個平衡的模型是最好的模型。

    最後還是用數學的語言來描述一下偏差和方差:

image    E(L)是損失函數,h(x)表示真實值的平均,第一部分是與y(模型的估計函數)有關的,這個部分是由於我們選擇不同的估計函數(模型)帶來的差異,而第二部分是與y無關的,這個部分可以認爲是模型的固有噪聲。

    對於上面公式的第一部分,我們可以化成下面的形式:

image    這個部分在PRML的1.5.5推導,前一半是表示偏差,而後一半表示方差,我們可以得出:損失函數=偏差^2+方差+固有噪音。

    下圖也來自PRML:

image

    這是一個曲線擬合的問題,對同分布的不同的數據集進行了多次的曲線擬合,左邊表示方差,右邊表示偏差,綠色是真實值函數。ln lambda表示模型的複雜程度,這個值越小,表示模型的複雜程度越高,在第一行,大家的複雜度都很低(每個人都很窮)的時候,方差是很小的,但是偏差同樣很小(國家也很窮),但是到了最後一幅圖,我們可以得到,每個人的複雜程度都很高的情況下,不同的函數就有着天壤之別了(貧富差異大),但是偏差就很小了(國家很富有)。

發佈了30 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章