[ML] Bayesian Linear Regression

熱身預覽


1.1.10. Bayesian Regressionhtml

 

From: scikit-learn 線性迴歸算法庫小結算法

17. BayesianRidge

使用場景:網絡

若是咱們的數據有不少缺失或者矛盾的病態數據,能夠考慮BayesianRidge類,它對病態數據魯棒性很高,也不用交叉驗證選擇超參數。可是極大化似然函數的推斷過程比較耗時,通常狀況不推薦使用。框架

 

18. ARDRegression

ARDRegression和BayesianRidge很像,惟一的區別在於對迴歸系θ的先驗分佈假設機器學習

    • BayesianRidge假設θ的先驗分佈規律爲球形正態分佈,BayesianRidge中球形分佈的θ對應的λ只有一個。
    • ARDRegression丟掉了BayesianRidge中的球形高斯的假設,採用與座標軸平行的橢圓形高斯分佈。這樣對應的超參數λ有n個維度,各不相同。

ARDRegression也是經過最大化邊際似然函數來估計超參數α和λ向量,以及迴歸係數θ。函數

使用場景:工具

若是咱們的數據有不少缺失或者矛盾的病態數據,能夠考慮BayesianRidge類,若是發現擬合很差,能夠換ARDRegression試一試。post

由於ARDRegression對迴歸係數先驗分佈的假設沒有BayesianRidge嚴格,某些時候會比BayesianRidge產生更好的後驗結果。學習

 

 

 

貝葉斯線性擬合


1、解題思路

總感受 貝葉斯迴歸能更好的「擬合」,真的嚒?url

整體思路依然是:(1) 找到最大似然 (2) 經過EM找到漸近解,或者經過「增量學習」進行「training"。

Ref: 貝葉斯線性迴歸(Bayesian Linear Regression)

 

2、貝葉斯估計的增量學習(在線學習方法)

詳見連接:貝葉斯線性迴歸(Bayesian Linear Regression)

增量方法:基於貝葉斯推斷的迴歸模型(代碼篇): 機器學習你會遇到的「坑」 

貝葉斯線性估計,它的基本思想是經過增量學習,將上一個數據點的後驗機率做爲下一次的先驗機率,並使用所有的數據點經過極大後驗估計來估計參數值。

 

3、貝葉斯線性估計示範

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import timefrom sklearn.linear_model import BayesianRidge, LinearRegression

X = [[1,1], [1,2], [1,3], [1,4], [1,5], [1,6]]
y = [25, 36, 45, 54, 72, 83]

print(X)
print(y)

###############################################################################
# 使用貝葉斯脊迴歸擬合數據
clf = BayesianRidge(compute_score=True)
clf.fit(X, y)

print(clf.predict([[1,7]]))
print(clf.coef_)

X_test=[[1, 1],  [1, 2],  [1, 3],  [1, 4],  [1, 5],  [1, 6], [1, 7]]
y_pred = clf.predict(X_test)
# Plot outputs plt.scatter([1,2,3,4,5,6], y, color='black') plt.plot([1,2,3,4,5,6,7], y_pred, color='blue', linewidth=3) plt.xticks(()) plt.yticks(())plt.show()

 

 

 

增量在線學習


 

1、參數估計方法論

經常使用的參數估計方法有:極大似然估計 ----> 最大後驗估計 ----> 貝葉斯估計 ----> 最大熵估計 ----> 混合模型估計

他們之間是有遞進關係的,想要理解後一個參數估計方法,最好對前一個參數估計有足夠的理解。

極大似然估計

θ看作是未知的參數

最大後驗估計

參數θ 當作一個隨機變量

貝葉斯估計

參數θ的後驗分佈的指望

 

2、增量學習過程

這個式子也算是 「高維線性可分」 的最簡單的版本。

重點理解第二行的由來,先認可一個重要的認知:

    • x, y是樣本,天然是肯定的數據。
    • w是參數,咱們理解爲是「隨機變量」,是須要估計的東西;先假設是標準的二維高斯分佈。

  

(1)第一個樣本點的座標大概爲:(0.9,0.1) --> 獲得以下式子,也就是「第二行左圖」。【獲得一個樣本,對參數作出調整】

(2)將第二行的第左邊那幅圖和第一行的中間那幅圖相乘,就能夠獲得第二行中間那幅圖。【這是參數的分佈,方差在逐漸減少】

(3)第二行最右邊那幅圖就是從第二行中間那幅圖中隨機抽取一些點(w0,w1),並以(w0,w1)爲參數,畫出來的直線。【這些紅色直線,以後會收斂】

 

優勢: 

1. 貝葉斯迴歸對數據有自適應能力,能夠重複的利用實驗數據,並防止過擬合。
2. 貝葉斯迴歸能夠在估計過程當中引入正則項。


缺點: 

1. 貝葉斯迴歸的學習過程開銷太大。

 

 

 

增量EM算法

Ref: EM算法及其改進

EM的缺點:收斂緩慢;一次迭代遍歷全部樣本,太費事兒。

 

 

online learning的一種,相似"反向傳播算法」的效果。

這跟sampling估產的原理有啥區別? 難道沒有上述缺點?

 

 

 

MCMC採樣估參

Ref: [Bayes] Parameter estimation by Sampling

Ref: 貝葉斯網與吉布斯採樣學習心得(之零,兼引言)

 

貝葉斯網絡 (Baysian Network)

貝葉斯網絡(Baysian Network)是統計推斷中的重要工具。簡單地說,貝葉斯網就是對於由一系列待估計量做爲自變量的聯合分佈的一種描述。即貝葉斯網描述了以下的後驗分 [公式]


其中[公式]表明一個待估計變量構成的向量,[公式]爲一系列的已知測量量。原則上講,若是咱們可以寫出[公式]的具體表達式,咱們就能給出關於[公式]的統計特徵的描述,從而直接求解這一統計推斷問題。

若是必要,在貝葉斯的框架下,咱們能夠將這一後驗機率進一步展開爲:

 [公式]  ----> 即先驗機率[公式]和似然函數[公式]的乘積。

 

問題來了

若是咱們有後驗機率的具體表達式,原則上咱們能夠對待估計變量[公式]的統計特徵進行直接估計。然而現實並不那麼美好!

 

若是[公式]的維度很高,並且後驗機率形式特別複雜,每每致使在對[公式]的某個份量求解邊緣分佈時的積分沒法簡單直接求得。

例如,求某個份量的指望就必然涉及對後驗機率的積分

蒙特卡羅積分法對於高維度的積分問題而言是一種可行的解決方案,基於這一原理,咱們就能用基於抽樣的方法來解決這一問題(這裏的抽樣是指按照給定的聯合分佈產生一個符合該分佈的樣本,而不是指從一個整體中抽取出一個樣本)。
若是咱們可以對後驗機率進行採樣,即根據後驗機率得到一系列 [公式]的實現樣本,咱們就可以對這個樣本進行直接的統計,從而得到對[公式]的估計。

 

那麼如何完成對[公式]的採樣呢?這時候咱們便要請出吉布斯(Gibbs)採樣算法了。

吉布斯採樣算法的基本思想很直接,就是依次對[公式]的各個份量進行採樣,在採樣某一個份量的時候,認爲其餘份量固定。這就將多維採樣問題轉換爲了對一維分佈進行採樣,而這可以用拒絕算法(或者自適應拒絕算法)、切片法等等解決。

 

改善採樣效率

原本故事到這裏已經能夠結束,從而沒有貝葉斯網什麼事情了,可是實踐中,我發現(固然不多是我首先發 現的),直接對後驗機率進行吉布斯採樣,雖然能湊合着用,可是效率有時候堪憂,貝葉斯網的出現能夠顯著改善採樣的效率。

若是咱們可以把後驗機率進行分解, 把各個參量之間的關係捋順,在對某一具體份量進行採集的時候,只須要計算和它相關的量,就能大大下降計算複雜性,從而提升效率。

End.

相關文章
相關標籤/搜索