回归分析系列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()
相关推荐
老余捞鱼6 天前
线性回归实战:5步验证你的量化因子是否真有效
算法·金融·回归·线性回归·ai量化
fengchengwu20126 天前
机器学习应用笔记:回归与分类
笔记·机器学习·回归
林间码客7 天前
05 逻辑斯蒂回归(Logistic Regression)
人工智能·数据挖掘·回归
数据皮皮侠AI7 天前
上市公司战略性新兴产业专利数据库(2003-2024)
大数据·人工智能·笔记·机器学习·回归
林间码客9 天前
03(扩展)回归决策树(Regression Decision Tree)
决策树·数据挖掘·回归
bIo7lyA8v10 天前
算法调优中的性能回归与基准测试分析的技术8
算法·数据挖掘·回归
机器学习之心11 天前
扩散模型数据增强 + Transformer-LSTM 回归预测:小样本场景下的工业级解决方案
回归·lstm·transformer·扩散模型
网安蟹佬霸11 天前
Google开源DiffusionGemma:26B MoE扩散语言模型,放弃自回归实现4倍推理加速
语言模型·回归·开源
郑洁文12 天前
基于Python+回归分析的电子产品需求数据分析与预测
python·数据分析·回归·电子产品需求数据·电子产品数据分析
dongf201912 天前
R 语言 逻辑斯蒂回归
开发语言·数据分析·回归·r语言