Scikit Learn - 贝叶斯岭回归

贝叶斯回归通过使用概率分布而非点估计来构建线性回归,提供了一种自然机制,能够处理数据不足或数据分布不均的情况。输出或响应"y"被假定为来自概率分布,而不是估计为单个值。

从数学上讲,为了获得完全概率模型,响应 y 被假定为围绕 $X_{w}$𝑋 的高斯分布,如下所示

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

最有用的贝叶斯回归类型之一是贝叶斯岭回归,它可以估计回归问题的概率模型。这里,系数 w 的先验由球面高斯分布给出,如下所示 −

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

由此产生的模型称为贝叶斯岭回归,在 scikit-learn 中,sklearn.linear_model.BeyesianRidge 模块用于贝叶斯岭回归。

参数

下表列出了 BayesianRidge 模块使用的参数 −

Sr.No 参数及说明
1

n_iter − int,可选

表示最大迭代次数。默认值为 300,但用户自定义的值必须大于或等于 1。

2

fit_intercept − 布尔值,可选,默认为 True

决定是否计算此模型的截距。如果设置为 false,则计算中不会使用截距。

3

tol − 浮点型,可选,默认值 = 1.e-3

它表示解的精度,如果 w 收敛,则算法将停止。

4

alpha_1 −浮点型,可选,默认值:1.e-6

它是第一个超参数,是 Gamma 分布先验相对于 alpha 参数的形状参数。

5

alpha_2 − 浮点型,可选,默认值:1.e-6

它是第二个超参数,是 Gamma 分布先验相对于 alpha 参数的逆尺度参数。

6

lambda_1 −浮点型,可选,默认值为 1.e-6

它是第一个超参数,是 Gamma 分布先验相对于 lambda 参数的形状参数。

7

lambda_2 − 浮点型,可选,默认值为 1.e-6

它是第二个超参数,是 Gamma 分布先验相对于 lambda 参数的逆尺度参数。

8

copy_X −布尔值,可选,默认值 = True

默认情况下,该值为 True,表示将复制 X。但如果设置为 false,则 X 可能会被覆盖。

9

compute_score − 布尔值,可选,默认值 = False

如果设置为 true,则在优化的每次迭代中计算对数边际似然。

10

verbose −布尔值,可选,默认值为 False

默认情况下,该值为 false,但如果设置为 true,则在拟合模型时将启用详细模式。

属性

下表列出了 BayesianRidge 模块使用的属性 −

Sr.No 属性和说明
1

coef_ − 数组,shape = n_features

此属性提供权重向量。

2

intercept_ − 浮点型

它表示决策函数中的独立项。

3

alpha_ −浮点型

此属性提供噪声的估计精度。

4

lambda_ − 浮点型

此属性提供权重的估计精度。

5

n_iter_ − int

它提供算法达到停止标准所需的实际迭代次数。

6

sigma_ −数组,形状 = (n_features, n_features)

它提供了权重的估计方差-协方差矩阵。

7

scores_ − 数组,形状 = (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])