Scikit Learn - 貝葉斯嶺迴歸



貝葉斯迴歸透過使用機率分佈而不是點估計來制定線性迴歸,提供了一種應對資料不足或資料分佈不佳的自然機制。輸出或響應“y”被假定是從機率分佈中抽取的,而不是估計為單個值。

在數學上,為了獲得一個完全機率模型,響應 y 假定圍繞 $X_{w}$𝑋服從高斯分佈,如下所示

$$p\left(y\arrowvert X,w,\alpha\right)=N\left(y\arrowvert X_{w},\alpha\right)$$

最有用的一種貝葉斯迴歸是貝葉斯嶺迴歸,它估計迴歸問題的機率模型。這裡係數 w 的先驗由球形高斯分佈給出,如下所示:

$$p\left(w\arrowvert \lambda\right)=N\left(w\arrowvert 0,\lambda^{-1}I_{p}\right)$$

這個結果模型稱為貝葉斯嶺迴歸,在 scikit-learn 中,sklearn.linear_model.BayesianRidge 模組用於貝葉斯嶺迴歸。

引數

下表列出了BayesianRidge 模組使用的引數:

序號 引數及描述
1

n_iter − int,可選

它表示最大迭代次數。預設值為 300,但使用者定義的值必須大於或等於 1。

2

fit_intercept − 布林值,可選,預設為 True

它決定是否為該模型計算截距。如果設定為 false,則計算中不會使用截距。

3

tol − float,可選,預設為 1.e-3

它表示解的精度,如果 w 收斂,則會停止演算法。

4

alpha_1 − float,可選,預設為 1.e-6

它是第一個超引數,它是 alpha 引數的 Gamma 分佈先驗的形狀引數。

5

alpha_2 − float,可選,預設為 1.e-6

它是第二個超引數,它是 alpha 引數的 Gamma 分佈先驗的逆尺度引數。

6

lambda_1 − float,可選,預設為 1.e-6

它是第一個超引數,它是 lambda 引數的 Gamma 分佈先驗的形狀引數。

7

lambda_2 − float,可選,預設為 1.e-6

它是第二個超引數,它是 lambda 引數的 Gamma 分佈先驗的逆尺度引數。

8

copy_X − 布林值,可選,預設為 True

預設情況下,它是 true,這意味著 X 將被複制。但是如果設定為 false,X 可能會被覆蓋。

9

compute_score − 布林值,可選,預設為 False

如果設定為 true,它會在最佳化的每次迭代中計算對數邊際似然。

10

verbose − 布林值,可選,預設為 False

預設情況下,它是 false,但如果設定為 true,則在擬合模型時將啟用詳細模式。

屬性

下表列出了BayesianRidge 模組使用的屬性:

序號 屬性及描述
1

coef_ − array,shape = n_features

此屬性提供權重向量。

2

intercept_ − float

它表示決策函式中的獨立項。

3

alpha_ − float

此屬性提供估計的噪聲精度。

4

lambda_ − float

此屬性提供估計的權重精度。

5

n_iter_ − int

它提供演算法達到停止準則的實際迭代次數。

6

sigma_ − array,shape = (n_features, n_features)

它提供估計的權重的方差-協方差矩陣。

7

scores_ − array,shape = (n_iter_+1)

它提供最佳化每次迭代的對數邊際似然值。在結果分數中,陣列以 $a\:and\:\lambda$𝜆 的初始值獲得的對數邊際似然值開始,以估計的 $a\:and\:\lambda$ 獲得的值結束。

實現示例

下面的 Python 指令碼提供了一個使用 sklearn BayesianRidge 模組擬合貝葉斯嶺迴歸模型的簡單示例。

from sklearn import linear_model
X = [[0, 0], [1, 1], [2, 2], [3, 3]]
Y = [0, 1, 2, 3]
BayReg = linear_model.BayesianRidge()
BayReg.fit(X, Y)

輸出

BayesianRidge(alpha_1 = 1e-06, alpha_2 = 1e-06, compute_score = False, copy_X = True,
   fit_intercept = True, lambda_1 = 1e-06, lambda_2 = 1e-06, n_iter = 300,
   normalize = False, tol=0.001, verbose = False)

從上面的輸出中,我們可以檢查模型中使用的引數。

示例

現在,擬合後,模型可以預測新值,如下所示:

BayReg.predict([[1,1]])

輸出

array([1.00000007])

示例

同樣,我們可以訪問模型的係數 w,如下所示:

BayReg.coef_

輸出

array([0.49999993, 0.49999993])
廣告
© . All rights reserved.