回归分析系列15— 贝叶斯回归进阶

18 贝叶斯回归进阶

18.1 简介

贝叶斯回归是通过贝叶斯推断来估计回归模型参数的方法。与经典的最小二乘法不同,贝叶斯回归在估计参数时结合了先验信息。通过贝叶斯方法,可以得到参数的后验分布,而不仅仅是一个点估计。

18.2 贝叶斯回归模型

贝叶斯回归模型将回归系数视为随机变量,假设其服从某个先验分布。然后根据观测数据更新先验分布,得到回归系数的后验分布。贝叶斯回归模型的核心公式如下:

其中,是回归系数的后验分布, 是似然函数,是先验分布。

在Python中,scikit-learn提供了BayesianRidge类来实现贝叶斯回归。

python 复制代码
from sklearn.linear_model import BayesianRidge
import numpy as np
import matplotlib.pyplot as plt

# 生成模拟数据
np.random.seed(42)
X = np.random.rand(100, 1)
y = 3 * X.squeeze() + 2 + np.random.randn(100)

# 构建贝叶斯回归模型
bayes_ridge = BayesianRidge()
bayes_ridge.fit(X, y)

# 预测
X_fit = np.linspace(0, 1, 100).reshape(-1, 1)
y_pred, y_std = bayes_ridge.predict(X_fit, return_std=True)

# 绘图
plt.scatter(X, y, color='blue')
plt.plot(X_fit, y_pred, color='red')
plt.fill_between(X_fit.squeeze(), y_pred - y_std, y_pred + y_std, color='pink', alpha=0.5)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Bayesian Ridge Regression')
plt.show()

18.3 先验选择

贝叶斯回归的结果依赖于先验分布的选择。常用的先验分布有正态分布和拉普拉斯分布。正态分布通常用于岭回归的贝叶斯版本,而拉普拉斯分布则适用于套索回归的贝叶斯版本。

python 复制代码
# 设置不同的先验参数
bayes_ridge = BayesianRidge(alpha_1=1e-6, lambda_1=1e-6)
bayes_ridge.fit(X, y)

# 预测
y_pred, y_std = bayes_ridge.predict(X_fit, return_std=True)

# 绘图
plt.scatter(X, y, color='blue')
plt.plot(X_fit, y_pred, color='red')
plt.fill_between(X_fit.squeeze(), y_pred - y_std, y_pred + y_std, color='pink', alpha=0.5)
plt.xlabel('X')
plt.ylabel('y')
plt.title('Bayesian Ridge Regression with Different Priors')
plt.show()

18.4 后验推断与预测

贝叶斯回归的一个主要优点是可以通过后验分布来进行不确定性量化。通过后验分布,可以直接得到参数的置信区间,这对于模型解释非常有用。

18.5 高维数据中的贝叶斯回归

在高维数据中,贝叶斯回归可以通过选择适当的先验来控制模型复杂度,避免过拟合。贝叶斯回归还可以通过自动相关确定性推断技术(Automatic Relevance Determination, ARD)来识别重要的特征。

python 复制代码
from sklearn.linear_model import ARDRegression

# 构建ARD回归模型
ard = ARDRegression()
ard.fit(X, y)

# 预测
y_pred_ard, y_std_ard = ard.predict(X_fit, return_std=True)

# 绘图
plt.scatter(X, y, color='blue')
plt.plot(X_fit, y_pred_ard, color='red')
plt.fill_between(X_fit.squeeze(), y_pred_ard - y_std_ard, y_pred_ard + y_std_ard, color='pink', alpha=0.5)
plt.xlabel('X')
plt.ylabel('y')
plt.title('ARD Bayesian Regression')
plt.show()
相关推荐
江南十四行19 小时前
从零开始掌握BP神经网络:基于TensorFlow的回归与分类实战
神经网络·回归·tensorflow
不知名的老吴2 天前
深度探索:直接预测多个token可行吗?
人工智能·回归
hhb_6183 天前
SPSS问卷调查数据信效度分析及回归建模实操案例
人工智能·数据挖掘·回归
随风飘摇的土木狗3 天前
【MATLAB第122期】基于MATLAB的SHAP可解释神经网络回归模型APP(插件)
神经网络·matlab·回归·全局·敏感性分析·shap
机器学习之心4 天前
IGWO-Transformer模型回归+SHAP分析+新数据预测+多输出!深度学习可解释分析(附MATLAB代码)
深度学习·回归·transformer·shap分析·igwo
电科一班林耿超4 天前
机器学习大师课 第 3 课:多特征回归与机器学习头号敌人 —— 过拟合
人工智能·算法·回归·线性回归
wuweijianlove5 天前
算法的平均复杂度建模与性能回归分析的技术7
算法·数据挖掘·回归
啦啦啦_99996 天前
案例之 波士顿房价预测(线性回归之正规方程/ 梯度下降!!)
人工智能·数据挖掘·回归
数智工坊6 天前
【SIoU Loss论文阅读】:引入角度感知的框回归损失,让检测收敛更快更准
论文阅读·人工智能·深度学习·机器学习·数据挖掘·回归·cnn
bloglin999996 天前
向量大模型升级可能改变向量空间(需要回归)
人工智能·数据挖掘·回归