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])
广告