【贝叶斯岭回归】

文章介绍了贝叶斯岭回归,一种概率线性模型,适用于处理高偏差数据。在sklearn库中,通过设置不同的初始参数alpha_init和lambda_init可以调整模型。示例展示了如何用Python随机生成数据,拟合贝叶斯岭回归模型,并绘制预测曲线。代码中展示了默认参数与自定义参数对模型预测的影响。

贝叶斯岭回归Bayesian Ridge Regression


贝叶斯岭回归是回归模型中的一种概率模型,是机器学习中的一种线性模型。系数 w w w的先验分布是一种球形正态分布:

p ( w ∣ λ ) = N ( w ∣ 0 , λ − 1 I p ) p(w|\lambda)=N(w|0,\lambda^{-1}I_p) p(wλ)=N(w∣0,λ1Ip)

α \alpha α γ \gamma γ的先验分布是伽马分别,和 y i y_i yi的共轭先验是正态分布,所以其结果就是贝叶斯岭回归模型。

其中正则化系数 α \alpha α γ \gamma γ由极大似然法估计。相比普通最小二乘法,贝叶斯岭回归更适合于表现比较差的数据。在sklearn中一般表示为alpha_initlambda_init

一般情况下,lambda_init相对小(1.e-3/0.001)。

代码实现:

随机生成数据

import numpy as np


def func(x):
    return np.sin(2 * np.pi * x)


size = 25
rng = np.random.RandomState(1234)
x_train = rng.uniform(0.0, 1.0, size)
y_train = func(x_train) + rng.normal(scale=0.1, size=size)
x_test = np.linspace(0.0, 1.0, 100)

拟合模型

from sklearn.linear_model import BayesianRidge

n_order = 3
X_train = np.vander(x_train, n_order + 1, increasing=True)
X_test = np.vander(x_test, n_order + 1, increasing=True)
reg = BayesianRidge(tol=1e-6, fit_intercept=False, compute_score=True)

画预测曲线

import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 2, figsize=(8, 4))
for i, ax in enumerate(axes):
    # Bayesian ridge regression with different initial value pairs
    if i == 0:
        init = [1 / np.var(y_train), 1.0]  # Default values
    elif i == 1:
        init = [1.0, 1e-3]
        reg.set_params(alpha_init=init[0], lambda_init=init[1])
    reg.fit(X_train, y_train)
    ymean, ystd = reg.predict(X_test, return_std=True)

    ax.plot(x_test, func(x_test), color="blue", label="sin($2\\pi x$)")
    ax.scatter(x_train, y_train, s=50, alpha=0.5, label="observation")
    ax.plot(x_test, ymean, color="red", label="predict mean")
    ax.fill_between(
        x_test, ymean - ystd, ymean + ystd, color="pink", alpha=0.5, label="predict std"
    )
    ax.set_ylim(-1.3, 1.3)
    ax.legend()
    title = "$\\alpha$_init$={:.2f},\\ \\lambda$_init$={}$".format(init[0], init[1])
    if i == 0:
        title += " (Default)"
    ax.set_title(title, fontsize=12)
    text = "$\\alpha={:.1f}$\n$\\lambda={:.3f}$\n$L={:.1f}$".format(
        reg.alpha_, reg.lambda_, reg.scores_[-1]
    )
    ax.text(0.05, -1.0, text, fontsize=12)

plt.tight_layout()
plt.show()

结果为:

在这里插入图片描述

### 贝叶斯岭回归与XGBoost算法对比 #### 1. 基本原理差异 贝叶斯岭回归是一种基于概率论框架下的线性回归方法,通过引入先验分布来估计权重参数及其不确定性。这种方法不仅能够提供预测值,还能给出预测的置信区间[^3]。 相比之下,XGBoost是一个梯度提升决策树(Gradient Boosting Decision Tree, GBDT)家族中的高效实现版本。其核心在于构建一系列弱分类器——通常是浅层决策树,并将这些模型组合起来形成强预测器。为了提高效率和性能,XGBoost采用了诸如近似分裂查找、直方图加速等技术手段[^4]。 #### 2. 应用场景区别 对于数据量较小且特征维度较低的情况,如果希望得到具有统计意义的结果并理解各个自变量的影响程度,则可以选择贝叶斯岭回归作为建模工具。这类问题往往出现在社会科学领域研究中,在那里研究人员更关注因果关系而非单纯的预测准确性[^5]。 然而当面对大规模高维稀疏矩阵时,比如互联网广告点击率预估等问题,XGBoost凭借快速训练速度以及良好泛化能力成为首选方案之一。特别是在处理非结构化文本或图像输入方面表现出色,因为可以很容易地与其他类型的嵌入向量相结合使用[^6]。 #### 3. 训练过程特点 贝叶斯岭回归利用马尔科夫链蒙特卡洛采样(Markov Chain Monte Carlo Sampling,MCMC) 或者变分推断(Variational Inference,VBI) 来求解复杂的后验分布,这使得计算成本相对较高,尤其是在样本数量庞大时可能会遇到收敛缓慢的问题[^7]。 相反的是,XGBoost采用了一种称为正则化的损失函数最小化策略来进行迭代更新节点分裂条件直至达到最优解为止; 同时支持多核并行运算从而大大缩短了整体耗时时长[^8]. ```python from sklearn.linear_model import BayesianRidge import xgboost as xgb # 定义贝叶斯岭回归模型 bayesian_ridge = BayesianRidge() # 定义XGBoost模型 xgboost_regressor = xgb.XGBRegressor(objective="reg:squarederror", n_estimators=100) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值