当前位置: 首页 > news >正文

回归分析系列5-贝叶斯回归

07贝叶斯回归

7.1 简介

贝叶斯回归将贝叶斯统计的思想应用于回归分析中,通过先验分布和似然函数来推断后验分布。在贝叶斯回归中,模型参数被视为随机变量,并且有自己的分布。通过贝叶斯公式,可以更新这些参数的分布,从而得到后验分布。

7.2 线性回归中的贝叶斯方法

在贝叶斯线性回归中,我们假设参数 β\betaβ 的先验分布是正态分布,即:

β∼N(μ0,Σ0)\beta \sim \mathcal{N}(\mu_0, \Sigma_0)β∼N(μ0​,Σ0​)

给定数据 yyy 和 XXX,我们可以使用贝叶斯公式计算后验分布:

p(β∣y,X)∝p(y∣X,β)×p(β)p(\beta \mid y, X) \propto p(y \mid X, \beta) \times p(\beta)p(β∣y,X)∝p(y∣X,β)×p(β)

其中,p(y∣X,β)p(y \mid X, \beta)p(y∣X,β) 是似然函数,通常假设是高斯分布。

7.3 贝叶斯线性回归的实现

在Python中,我们可以使用scikit-learnBayesianRidge类来实现贝叶斯线性回归。BayesianRidge会自动估计模型参数的先验分布和后验分布。

from sklearn.linear_model import BayesianRidge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 生成模拟数据
np.random.seed(42)
X = np.random.rand(100, 1)
y = 4 + 3 * X[:, 0] + np.random.randn(100)# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 构建贝叶斯线性回归模型
model = BayesianRidge()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")

7.4 解释贝叶斯回归结果

贝叶斯回归的结果不仅提供了模型参数的点估计,还提供了参数的不确定性估计。BayesianRidge类中的coef_属性表示模型参数的估计值,而sigma_属性表示参数估计的标准差。

# 输出模型参数和不确定性
print(f"Coefficients: {model.coef_}")
print(f"Coefficient standard deviations: {np.sqrt(np.diag(model.sigma_))}")

7.5 先验选择与模型评估

先验分布的选择对贝叶斯回归结果有重要影响。在实际应用中,选择适当的先验分布需要结合领域知识和数据特征。scikit-learnBayesianRidge提供了一个默认的先验分布,但用户也可以通过调整模型参数来改变先验的形式。

为了评估贝叶斯回归模型的效果,我们可以使用交叉验证或后验预测检查(posterior predictive checks)等方法。

from sklearn.model_selection import cross_val_score# 交叉验证评估模型
scores = cross_val_score(model, X, y, scoring='neg_mean_squared_error', cv=5)
print(f"Cross-validated MSE: {-scores.mean():.2f}")

7.6 示例:股票价格预测

我们通过一个实际的例子来应用贝叶斯回归。假设我们有一组股票的历史价格数据,并且希望利用这些数据预测未来的价格走势。

# 生成模拟股票数据
np.random.seed(42)
days = np.arange(1, 101)
prices = 100 + np.cumsum(np.random.randn(100))# 特征为时间(天数),目标为价格
X = days.reshape(-1, 1)
y = prices# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 构建贝叶斯线性回归模型
model = BayesianRidge()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")# 可视化结果
import matplotlib.pyplot as pltplt.figure(figsize=(10, 6))
plt.plot(X, y, 'o', label='Observed prices')
plt.plot(X_test, y_pred, 'r-', label='Predicted prices')
plt.xlabel('Days')
plt.ylabel('Stock Price')
plt.legend()
plt.show()

7.7 贝叶斯方法的优势与局限

贝叶斯回归提供了对参数不确定性的自然表达,使得模型更加稳健,并且能够更好地处理小样本数据。然而,贝叶斯方法的计算复杂度较高,尤其是在高维数据或复杂模型中。此外,先验分布的选择也可能对结果产生较大影响。

 

http://www.lryc.cn/news/425994.html

相关文章:

  • oracle 数据中lsnrctl 是干啥的
  • Linux进程--进程地址空间
  • C语言传递指针给函数
  • 探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
  • 今日(2024 年 8 月 13 日)科技新闻
  • Unity大场景切换进行异步加载时,如何设计加载进度条,并配置滑动条按照的曲线给定的速率滑动
  • Selenium + Python 自动化测试16(Python基础复习)
  • 2024新型数字政府综合解决方案(六)
  • vscode的C/C++环境配置和调试技巧
  • Python制作《扫雷》游戏-附源码,轻松看懂,简单易学
  • 8路VBO转HDMI2.0支持4K60频率ITE6265芯片方案心得分享
  • 【问题解决3】【已解决】Cannot determine path to‘tools.jar‘libraryfor17
  • 基于Spring Boot的高效宠物购物平台
  • 【Vue3】路由基础
  • 掌握网络数据的钥匙:Python Requests-HTML库深度解析
  • 网络安全: 模型的脆弱性,鲁棒性和隐私性
  • 【go语言】go-webview2用法(持续更新)
  • KNN 图像识别
  • 基于STM32和云平台的花卉养护系统设计(微信小程序)(209)
  • 编程语言进化史
  • vuex的原理和使用方法
  • (javaweb)SpringBootWeb案例(毕业设计)案例--文件上传
  • 数据库之存储过程和函数
  • 《SPSS零基础入门教程》学习笔记——02.数据管理
  • 嵌入式软件的一些常用调试测试方法
  • Android T about screen rotation(二)
  • qt反射之类反射、方法反射、字段反射
  • 服务器数据恢复—raid5阵列离线硬盘强制上线失败如何恢复数据?
  • FastAPI+Vue3零基础开发ERP系统项目实战课 20240815上课笔记 列表和字典相关方法的学习和练习
  • 基于微信小程序的诗词智能学习系统的设计与实现(全网独一无二,24年最新定做)