本文對比了頻率線性回歸和貝葉斯線性回歸兩種方法,並對後者進行了詳細的介紹,分析了貝葉斯線性回歸的優點和直觀特徵。
我認為貝葉斯學派和頻率學派之間的紛爭是「可遠觀而不可褻玩」的學術爭論之一。與其熱衷於站隊,我認為同時學習這兩種統計推斷方法並且將它們應用到恰當的場景之下會更加富有成效。出於這種考慮,最近我努力學習和應用貝葉斯推斷方法,補充學校課程所學的頻率統計方法。
貝葉斯線性模型是我最早對應用貝葉斯推斷的關注點之一。在我們學習的過程中,最重要的部分也許就是將一個概念介紹給別人。本文是我介紹貝葉斯線性回歸的一次嘗試。我會對線性回歸的頻率派方法做一個簡要的回顧,介紹貝葉斯解釋(Bayesian interpretation),並查看將其應用於簡單數據集的結果。
回顧頻率派線性回歸
線性回歸的頻率派視角可能是你所熟悉的、從學校學到的版本:模型假設反應變量(y,也稱因變量)是一組權重和預測變量(x,也稱自變量)乘積的線性組合。完整的公式還包含一個代表隨機採樣噪聲的誤差項。例如,如果我們有兩個預測變量,公式可以寫成:
其中,y 是反應變量(也被稱為因變量),β 為權重(也被稱為模型參數),x 為預測變量,ε 為代表隨機採樣噪聲的誤差項或者沒有被包含在模型中的變量的影響。
線性回歸是一個易於解釋的簡單模型: β_0 是截距項,其它的權重(β's)表示預測變量的增加對反應變量的影響。例如:如果 β_1 為 1.2,那麼 x_1 每增加一個單位,反應變量就會增加 1.2。
我們可以通過矩陣方程將線性模型泛化到有任意數量預測變量的情況。將一個值為 1 的常量項添加到預測變量矩陣中代表截距,這樣我們就可以將矩陣公式寫成:
從訓練數據中學習線性模型的目標是找出係數 β,該係數能夠最好地解釋數據。在頻率派線性回歸中,對數據最好的解釋指的是係數 β 能夠最小化殘差平方和(RSS)。RSS 是已知的真實值(y)和預測模型的輸出(,讀作「y—hat」,表示一個估計值)之間差的平方的總和。殘差平方和是關於模型參數的函數:
這個求和涵蓋了訓練集中的 N 個數據點。我們在此並不深究細節(參考資料:http://www.stat.cmu.edu/~cshalizi/mreg/15/lectures/13/lecture-13.pdf),不過該方程具備模型參數β的封閉解,能夠最小化誤差。這就是對參數 β 的最大似然估計,因為它是在給定輸入 X 和輸出 y 的條件下最有可能的 β 值。矩陣形式表達的封閉解如下:
(同樣地,我們必須給 β 加一個「帽子」,因為它代表對模型參數的估計值。)別被這裡的矩陣數學嚇倒了!得益於像 Python 中的 Scikit-learn 這樣的庫,我們通常不需要對其進行手動的計算(儘管自己編寫一個線性回歸的代碼是很好的做法)。這種通過最小化 RSS 來擬合模型參數的方法被稱為普通最小二乘法(OLS)。
我們從頻率線性回歸中得到的是僅僅基於訓練數據的對模型參數的單次估計。我們的模型是完全通過數據訓練出來的:這樣看來,我們所需要的所有關於模型的信息都被編碼在了訓練數據中。
當得到了 β hat 後,我們可以通過使用模型的等式來估計任意新數據點的輸出值:
舉一個最小二乘法的例子,我們可以對真實世界中的數據進行線性回歸,數據中包含對 15,000 次運動的持續時間和燃燒的卡路裡的觀測值。
通過最小二乘法,我們得到了對模型參數的單次估計。在這個例子中,參數是直線的截距和斜率。我們可以寫出通過 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 不是被估計的單個值,而是假設從一個正態分布中提取而來。貝葉斯線性回歸模型如下:
輸出 y 是從一個由均值和方差兩種特徵刻畫的正態(高斯)分布生成的。線性回歸的均值是權重矩陣的轉置和預測變量矩陣之積。方差是標準差 σ 的平方(乘以單位矩陣,因為這是模型的多維表示)。
貝葉斯線性回歸的目的不是找到模型參數的單一「最佳」值,而是確定模型參數的後驗分布。不僅響應變量是從概率分布中生成的,而且假設模型參數也來自於概率分布。模型參數的後驗分布是以訓練的輸入和輸出作為條件的。
其中,P(β|y, X) 是給定輸入和輸出時的模型參數的後驗概率分布。它等於輸出的似然 P(y|β, X) 乘以給定輸入的參數 β 的先驗概率 P(β|X) 並且除以歸一化常數。這是貝葉斯定理的一個簡單表達形式,是支撐貝葉斯推斷的基礎。
讓我們稍微停下腳步,想想這意味著什麼。與 OLS 相比,我們有一個模型參數的後驗分布,它與數據的似然和參數的先驗概率的乘積成正比。在此,我們可以看到貝葉斯線性回歸主要的兩個好處。
先驗分布:如果具備領域知識或者對於模型參數的猜測,我們可以在模型中將它們包含進來,而不是像在線性回歸的頻率方法那樣:假設所有關於參數的所需信息都來自於數據。如果事先沒有沒有任何的預估,我們可以為參數使用無信息先驗,比如一個正態分布。後驗分布:使用貝葉斯線性回歸的結果是一個基於訓練數據和先驗概率的模型參數的分布。這使得我們能夠量化對模型的不確定性:如果我們擁有較少的數據點,後驗分布將更加分散。
隨著數據點的增加,似然會降低先驗的影響,當我們有無限的數據時,輸出的參數會收斂到從 OLS 方法獲得的值。
將模型參數作為概率分布的公式反映了貝葉斯學派的世界觀:我們從最初的估計和先驗分布開始,並隨著收集到更多的證據,模型會變得更少犯錯。貝葉斯推理是我們直覺的自然延伸。通常,我們有一個初始的假設,並且隨著收集到那些或支持、或否定想法的數據越來越多,我們對於世界的模型將會發生改變(理想情況下,這就是我們進行推理的方式)。
實現貝葉斯線性回歸
實際上,對於連續變量來說,估算模型參數的後驗分布是很困難的。因此我們採用抽樣方法從後驗分布中抽取樣本,用來對後驗分布取近似。從分布中抽取隨機樣本來近似估計分布的技術是蒙特卡洛方法的應用之一。我們有許多蒙特卡洛抽樣的算法,其中最常用的是馬爾可夫鏈蒙特卡洛的變體。
貝葉斯線性模型的應用
我將跳過本文的代碼部分(請參閱 PyMC3 中的代碼實現),但是實現貝葉斯回歸的基本流程是:指定模型參數的先驗(在這個例子中我使用正態分布),創建將訓練數據中的輸入映射到輸出的模型,接著用一個馬爾可夫鏈蒙特卡洛(MCMC)算法從模型參數的後驗分布中抽取樣本。最終的結果是參數的後驗分布。我們可以查看這些得到的分布,看看究竟發生了什麼!
第一張圖展示了模型參數後驗分布的近似。這些是 MCMC 進行了 1000 步的結果,表示算法從後驗分布中採樣了 1000 步。
如果我們將斜率和結局的平均值和通過 OLS 得到的相比(OLS 得到的截距為 -21.83 且斜率為 7.17),我們看到這二者得到的結果極為相似。然而,儘管可以使用均值作為一個單次的點估計,但我們還擁有一系列模型參數可能的值。隨著數據點數量的增加,這個範圍將會縮小並且收斂到一個確切的值,表示對模型參數有更大的置信度(在貝葉斯推斷中,一個變量的範圍被稱為可信區間,這與頻率推斷中的置信區間的解釋稍稍有些不同)。
當我們想要展示從貝葉斯模型中得到的線性擬合效果時,我們可以畫出一系列的直線,每條線代表對於模型參數的不同的估計,而並非僅僅顯示估計值。隨著數據點的數目增加,這些直線開始重疊在一起,因為模型參數的不確定性降低了。
為了顯示數據點的數目在模型中的影響,我使用了兩個模型。第一個模型的結果顯示在左邊,它使用了 500 個數據點;而右圖所示的模型使用了 15,000 個數據點。每張圖都顯示了從模型參數的後驗概率中抽樣得到的 100 個可能的模型。
使用 500 個(左圖)觀測值和 15,000 個(右圖)觀測值的貝葉斯線性回歸模型的結果
在使用更少的數據點時,線性擬合的變化更大,這代表著模型中更大的不確定性。有了所有的數據點,OLS 和貝葉斯模型的擬合結果幾乎是一樣的,因為先驗的影響被數據中的似然降低了。
當使用我們的貝葉斯線性模型預測單個數據點的輸出時,我們仍然不是得到單一的值,而是一個分布。下面是 15.5 分鐘的運動所消耗的卡路裡的概率密度圖。紅色的垂直線代表 OLS 的估計值。
從貝葉斯模型中得到的消耗卡路裡的後驗概率密度
我們看到,消耗掉的卡路裡在 89.3 左右的達到概率的峰值,但是完整的估計是一系列的可能值。
結論
與其在貝葉斯學派和頻率學派的討論(或者爭論)中站在任何一方,同時學習這兩種方法才是更加有益的。這樣的話,我們就可以在正確的情況下應用它們。
在擁有有限的數據或者想要在模型中使用先驗知識的問題中,貝葉斯線性回歸方法可以同時引入先驗信息並且顯示不確定性。貝葉斯線性回歸反映了貝葉斯學派處理問題的框架:我們先構造一個初始的估計,並且隨著收集到更多的數據,不斷改進估計。貝葉斯觀點是一種直觀的看待世界的方法,並且貝葉斯推斷可以成為相應的頻率推斷的實用的替代方法。數據科學並不是選邊站,而是要找出最適合這份工作的工具,並且掌握更多的技能只會讓你更有效率!