1. 程式人生 > >入門 | 貝葉斯線性迴歸方法的解釋和優點

入門 | 貝葉斯線性迴歸方法的解釋和優點

本文對比了頻率線性迴歸和貝葉斯線性迴歸兩種方法,並對後者進行了詳細的介紹,分析了貝葉斯線性迴歸的優點和直觀特徵。

我認為貝葉斯學派和頻率學派之間的紛爭是「可遠觀而不可褻玩」的學術爭論之一。與其熱衷於站隊,我認為同時學習這兩種統計推斷方法並且將它們應用到恰當的場景之下會更加富有成效。出於這種考慮,最近我努力學習和應用貝葉斯推斷方法,補充學校課程所學的頻率統計方法。

貝葉斯線性模型是我最早對應用貝葉斯推斷的關注點之一。在我們學習的過程中,最重要的部分也許就是將一個概念介紹給別人。本文是我介紹貝葉斯線性迴歸的一次嘗試。我會對線性迴歸的頻率派方法做一個簡要的回顧,介紹貝葉斯解釋(Bayesian interpretation),並檢視將其應用於簡單資料集的結果。

程式碼地址:https://github.com/WillKoehrsen/Data-Analysis/blob/master/bayesian_lr/Bayesian%20Linear%20Regression%20Demonstration.ipynbRecap of Frequentist Linear Regression

回顧頻率派線性迴歸

線性迴歸的頻率派視角可能是你所熟悉的、從學校學到的版本:模型假設反應變數(y,也稱因變數)是一組權重和預測變數(x,也稱自變數)乘積的線性組合。完整的公式還包含一個代表隨機取樣噪聲的誤差項。例如,如果我們有兩個預測變數,公式可以寫成:

640?wx_fmt=png&wxfrom=5&wx_lazy=1

其中,y 是反應變數(也被稱為因變數),β 為權重(也被稱為模型引數),x 為預測變數,ε 為代表隨機取樣噪聲的誤差項或者沒有被包含在模型中的變數的影響。

線性迴歸是一個易於解釋的簡單模型: β_0 是截距項,其它的權重(β's)表示預測變數的增加對反應變數的影響。例如:如果 β_1 為 1.2,那麼 x_1 每增加一個單位,反應變數就會增加 1.2。

我們可以通過矩陣方程將線性模型泛化到有任意數量預測變數的情況。將一個值為 1 的常量項新增到預測變數矩陣中代表截距,這樣我們就可以將矩陣公式寫成:

640?wx_fmt=png

從訓練資料中學習線性模型的目標是找出係數 β,該係數能夠最好地解釋資料。在頻率派線性迴歸中,對資料最好的解釋指的是係數 β 能夠最小化殘差平方和(RSS)。RSS 是已知的真實值(y)和預測模型的輸出(ŷ,讀作「y—hat」,表示一個估計值)之間差的平方的總和。殘差平方和是關於模型引數的函式:

640?wx_fmt=png

這個求和涵蓋了訓練集中的 N 個數據點。我們在此並不深究細節(參考資料:http://www.stat.cmu.edu/~cshalizi/mreg/15/lectures/13/lecture-13.pdf),不過該方程具備模型引數β的封閉解,能夠最小化誤差。這就是對引數 β 的最大似然估計,因為它是在給定輸入 X 和輸出 y 的條件下最有可能的 β 值。矩陣形式表達的封閉解如下:

640?wx_fmt=png

(同樣地,我們必須給 β 加一個「帽子」,因為它代表對模型引數的估計值。)別被這裡的矩陣數學嚇倒了!得益於像 Python 中的 Scikit-learn 這樣的庫,我們通常不需要對其進行手動的計算(儘管自己編寫一個線性迴歸的程式碼是很好的做法)。這種通過最小化 RSS 來擬合模型引數的方法被稱為普通最小二乘法(OLS)。

我們從頻率線性迴歸中得到的是僅僅基於訓練資料的對模型引數的單次估計。我們的模型是完全通過資料訓練出來的:這樣看來,我們所需要的所有關於模型的資訊都被編碼在了訓練資料中。

當得到了 β hat 後,我們可以通過使用模型的等式來估計任意新資料點的輸出值:

640?wx_fmt=png

舉一個最小二乘法的例子,我們可以對真實世界中的資料進行線性迴歸,資料中包含對 15,000 次運動的持續時間和燃燒的卡路里的觀測值。

640?wx_fmt=png

通過最小二乘法,我們得到了對模型引數的單次估計。在這個例子中,引數是直線的截距和斜率。我們可以寫出通過 OLS 生成的方程:

calories = -21.83 + 7.17 * duration

從斜率上,我們可以看到每多鍛鍊一分鐘就會額外消耗 7.17 卡路里的熱量。這個例子中的截距貌似沒有什麼作用,因為它告訴我們如果運動 0 分鐘,我們會消耗 -21.86 卡路里!這只是一個 OLS 擬合過程的案例,在不考慮它的物理意義是否說得通的情況下,它找到了在訓練資料集上最小化誤差的直線。

如果有一個新的資料點,假設運動持續時間為 15.5 分鐘,我們可以將它帶入到方程中得到消耗的卡路里的點估計:

calories = -21.83 + 7.17 * 15.5 = 89.2

普通最小二乘法給了我們對輸出的單次點估計,我們可以將其解釋為給定資料時可能性最大的估計。然而,如果有一個很小的資料集,我們可能希望將估計表示為一個可能值的分佈。這就是貝葉斯估計起作用的地方。

貝葉斯線性迴歸

從貝葉斯學派的觀點來看,我們使用概率分佈而非點估計來構建線性迴歸。反應變數 y 不是被估計的單個值,而是假設從一個正態分佈中提取而來。貝葉斯線性迴歸模型如下:

640?wx_fmt=png

輸出 y 是從一個由均值和方差兩種特徵刻畫的正態(高斯)分佈生成的。線性迴歸的均值是權重矩陣的轉置和預測變數矩陣之積。方差是標準差 σ 的平方(乘以單位矩陣,因為這是模型的多維表示)。

貝葉斯線性迴歸的目的不是找到模型引數的單一「最佳」值,而是確定模型引數的後驗分佈。不僅響應變數是從概率分佈中生成的,而且假設模型引數也來自於概率分佈。模型引數的後驗分佈是以訓練的輸入和輸出作為條件的。

640?wx_fmt=png

其中,P(β|y, X) 是給定輸入和輸出時的模型引數的後驗概率分佈。它等於輸出的似然 P(y|β, X) 乘以給定輸入的引數 β 的先驗概率 P(β|X) 並且除以歸一化常數。這是貝葉斯定理的一個簡單表達形式,是支撐貝葉斯推斷的基礎。

640?wx_fmt=png

讓我們稍微停下腳步,想想這意味著什麼。與 OLS 相比,我們有一個模型引數的後驗分佈,它與資料的似然和引數的先驗概率的乘積成正比。在此,我們可以看到貝葉斯線性迴歸主要的兩個好處。

  1. 先驗分佈:如果具備領域知識或者對於模型引數的猜測,我們可以在模型中將它們包含進來,而不是像線上性迴歸的頻率方法那樣:假設所有關於引數的所需資訊都來自於資料。如果事先沒有沒有任何的預估,我們可以為引數使用無資訊先驗,比如一個正態分佈。

  2. 後驗分佈:使用貝葉斯線性迴歸的結果是一個基於訓練資料和先驗概率的模型引數的分佈。這使得我們能夠量化對模型的不確定性:如果我們擁有較少的資料點,後驗分佈將更加分散。

隨著資料點的增加,似然會降低先驗的影響,當我們有無限的資料時,輸出的引數會收斂到從 OLS 方法獲得的值。

將模型引數作為概率分佈的公式反映了貝葉斯學派的世界觀:我們從最初的估計和先驗分佈開始,並隨著收集到更多的證據,模型會變得更少犯錯。貝葉斯推理是我們直覺的自然延伸。通常,我們有一個初始的假設,並且隨著收集到那些或支援、或否定想法的資料越來越多,我們對於世界的模型將會發生改變(理想情況下,這就是我們進行推理的方式)。

實現貝葉斯線性迴歸

實際上,對於連續變數來說,估算模型引數的後驗分佈是很困難的。因此我們採用抽樣方法從後驗分佈中抽取樣本,用來對後驗分佈取近似。從分佈中抽取隨機樣本來近似估計分佈的技術是蒙特卡洛方法的應用之一。我們有許多蒙特卡洛抽樣的演算法,其中最常用的是馬爾可夫鏈蒙特卡洛的變體。

貝葉斯線性模型的應用

我將跳過本文的程式碼部分(請參閱 PyMC3 中的程式碼實現),但是實現貝葉斯迴歸的基本流程是:指定模型引數的先驗(在這個例子中我使用正態分佈),建立將訓練資料中的輸入對映到輸出的模型,接著用一個馬爾可夫鏈蒙特卡洛(MCMC)演算法從模型引數的後驗分佈中抽取樣本。最終的結果是引數的後驗分佈。我們可以檢視這些得到的分佈,看看究竟發生了什麼!

第一張圖展示了模型引數後驗分佈的近似。這些是 MCMC 進行了 1000 步的結果,表示演算法從後驗分佈中取樣了 1000 步。

640?wx_fmt=png

如果我們將斜率和結局的平均值和通過 OLS 得到的相比(OLS 得到的截距為 -21.83 且斜率為 7.17),我們看到這二者得到的結果極為相似。然而,儘管可以使用均值作為一個單次的點估計,但我們還擁有一系列模型引數可能的值。隨著資料點數量的增加,這個範圍將會縮小並且收斂到一個確切的值,表示對模型引數有更大的置信度(在貝葉斯推斷中,一個變數的範圍被稱為可信區間,這與頻率推斷中的置信區間的解釋稍稍有些不同)。

當我們想要展示從貝葉斯模型中得到的線性擬合效果時,我們可以畫出一系列的直線,每條線代表對於模型引數的不同的估計,而並非僅僅顯示估計值。隨著資料點的數目增加,這些直線開始重疊在一起,因為模型引數的不確定性降低了。

為了顯示資料點的數目在模型中的影響,我使用了兩個模型。第一個模型的結果顯示在左邊,它使用了 500 個數據點;而右圖所示的模型使用了 15,000 個數據點。每張圖都顯示了從模型引數的後驗概率中抽樣得到的 100 個可能的模型。

640?wx_fmt=png

使用 500 個(左圖)觀測值和 15,000 個(右圖)觀測值的貝葉斯線性迴歸模型的結果

在使用更少的資料點時,線性擬合的變化更大,這代表著模型中更大的不確定性。有了所有的資料點,OLS 和貝葉斯模型的擬合結果幾乎是一樣的,因為先驗的影響被資料中的似然降低了。

當使用我們的貝葉斯線性模型預測單個數據點的輸出時,我們仍然不是得到單一的值,而是一個分佈。下面是 15.5 分鐘的運動所消耗的卡路里的概率密度圖。紅色的垂直線代表 OLS 的估計值。

640?wx_fmt=png

從貝葉斯模型中得到的消耗卡路里的後驗概率密度

我們看到,消耗掉的卡路里在 89.3 左右的達到概率的峰值,但是完整的估計是一系列的可能值。

結論

與其在貝葉斯學派和頻率學派的討論(或者爭論)中站在任何一方,同時學習這兩種方法才是更加有益的。這樣的話,我們就可以在正確的情況下應用它們。

在擁有有限的資料或者想要在模型中使用先驗知識的問題中,貝葉斯線性迴歸方法可以同時引入先驗資訊並且顯示不確定性。貝葉斯線性迴歸反映了貝葉斯學派處理問題的框架:我們先構造一個初始的估計,並且隨著收集到更多的資料,不斷改進估計。貝葉斯觀點是一種直觀的看待世界的方法,並且貝葉斯推斷可以成為相應的頻率推斷的實用的替代方法。資料科學並不是選邊站,而是要找出最適合這份工作的工具,並且掌握更多的技能只會讓你更有效率!

∞∞∞

640?wx_fmt=jpeg&wx_lazy=1

IT派 - {技術青年圈}持續關注網際網路、區塊鏈、人工智慧領域640?wx_fmt=jpeg&wx_lazy=1

公眾號回覆“機器學習”

邀你加入{ IT派AI機器學習群 }