回归分析系列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()
相关推荐
关关钧2 天前
【R语言】回归分析
开发语言·回归·r语言
机器学习之心7 天前
三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)
深度学习·回归·transformer·bilstm·多变量回归预测
九亿AI算法优化工作室&7 天前
KOA优化最近邻分类预测matlab
人工智能·python·机器学习·matlab·分类·数据挖掘·回归
敲上瘾8 天前
DFS+回溯+剪枝(深度优先搜索)——搜索算法
数据结构·c++·算法·回归·深度优先·剪枝·回归算法
自动驾驶小卡8 天前
线性回归计算斜率原理及C++实现
c++·算法·回归·线性回归
盼小辉丶9 天前
TensorFlow深度学习实战(6)——回归分析详解
深度学习·回归·tensorflow
九亿AI算法优化工作室&10 天前
GWO优化决策树回归预测matlab
人工智能·python·深度学习·matlab·回归
望云山19010 天前
4.3 线性回归的改进-岭回归/4.4分类算法-逻辑回归与二分类/ 4.5 模型保存和加载
算法·回归·线性回归
喵~来学编程啦11 天前
【通俗易懂说模型】非线性回归和逻辑回归(附神经网络图详细解释)
人工智能·pytorch·深度学习·算法·回归
好想写博客11 天前
[深度学习]神经网络-回归项目
pytorch·python·深度学习·神经网络·回归·numpy·pandas