贝叶斯回归器概览

序言

线性回归是机器学习中一种常用的回归方法。线性回归基于这样的假设,即基础数据是正态分布的,并且所有相关的预测变量与结果具有线性关系。但在现实世界中,这并不总是可能的,它将遵循这些假设,贝叶斯回归可能是更好的选择。

贝叶斯回归使用关于数据的先验信念或知识来"学习"更多关于数据的知识,并创建更准确的预测。它还考虑了数据的不确定性,并利用先验知识来提供更精确的数据估计。因此,当数据复杂或不明确时,它是一个理想的选择。

概述

++贝叶斯回归++ 使用++贝叶斯算法++从数据中估计线性回归模型的参数,包括关于参数的先验知识。由于它的概率特性,它可以产生比普通最小二乘(ordinary least squares, OLS)线性回归更精确的回归参数估计,提供了估计中不确定性的度量,并得出比OLS更强的结论。贝叶斯回归还可用于相关的回归分析任务,如模型选择和异常值检测。

贝叶斯回归

  • 贝叶斯回归是什么?
    • 贝叶斯回归是线性回归的一种,它使用++贝叶斯统计++来估计模型的未知参数。它使用贝氏定理在给定观测数据的情况下,估计一组参数的可能性。
  • 贝叶斯回归的目标
    • 贝叶斯回归的目标是找到描述自变量和因变量之间关系的线性模型参数的最佳估计值。
  • 传统线性回归和贝叶斯回归之间区别
    • 传统线性回归和贝叶斯回归之间的主要区别在于关于++数据生成过程++的基本假设。
    • 传统的线性回归假设数据服从++高斯或正态分布++ ,而贝叶斯回归对数据的性质有更强的假设,并对参数赋予++先验概率分布++。
    • 贝叶斯回归还允许更多的灵活性,因为它允许额外的参数或先验分布,并且可以用于构建任意复杂的模型,该模型明确地表达关于数据的先验信念。
    • 此外,贝叶斯回归从更少的数据点提供更准确的预测测量,并且能够围绕估计构建不确定性的估计。
    • 另一方面,传统的线性回归更容易实现,并且通常使用更简单的模型更快,并且当关于数据的假设有效时,可以提供良好的结果。
  • 当数据集中的数据不足或数据分布不均匀时,贝叶斯回归非常有用。与仅从每个属性的单个值获得输出的常规回归技术相比,贝叶斯回归模型的输出是从概率分布获得的。

贝叶斯回归相关概念

贝叶斯回归中的重要概念如下:

贝叶斯定理

  • ++贝叶斯定理++ ,给出了事件的++先验概率++ 与考虑证据后的++后验概率++之间的关系。它指出,事件的条件概率等于给定某些条件下事件的概率乘以事件的先验概率,再除以条件的概率。
  • 公式,即 P ( A|B ) = P ( B|A) ⋅ P ( A ) P ( B ) P(\text{A|B}) = \displaystyle\frac{P(\text{B|A)} \cdot P(\text{A})} {P(\text{B})} P(A|B)=P(B)P(B|A)⋅P(A) 。
    其中, P ( A|B ) P(\text{A|B}) P(A|B)事件A发生的概率,假设事件B已经发生, P ( B|A ) P(\text{B|A}) P(B|A)是事件B发生的概率,假设事件A已经发生, P ( A ) P(\text{A}) P(A)是事件A发生的概率, P ( B ) P(\text{B}) P(B)是事件B发生的概率。

极大似然估计(MLE)

  • 概念
    • 极大似然估计(Maximum Likelihood Estimation, MLE)是一种通过++最大化似然函数++来估计统计模型参数的方法。
  • 作用
    • 它试图找到使观测数据在假设模型下最可能的参数值。++极大似然估计++不包含关于参数的任何先验信息或假设,并且它提供参数的点估计。

最大后验概率估计(MAPE)

  • 概念
    • 最大后验概率估计(Maximum A Posteriori (MAP) Estimation, MAPE)是一种结合先验信息和似然函数来估计参数的++贝叶斯方法++。
  • 作用
    • 它涉及寻找使后验分布最大化的参数值,后验分布是通过应用++贝氏定理++。
    • 在MAP估计中,为参数指定先验分布,表示关于其值的先验信念或知识。
    • 然后将似然函数乘以先验分布以获得联合分布,并且选择最大化该联合分布的参数值作为MAP估计。
    • MAP估计提供参数的点估计,类似于MLE,但是结合了先验信息。

贝叶斯回归使用原因

贝叶斯回归比其他回归技术有用的原因有几个。其中一些如下:

  • 原因一:
    • 贝叶斯回归也在分析中使用关于参数的++先验信念++ 。这使得它在可用数据有限并且++先验知识++相关时非常有用。
    • 通过将先验知识与观测数据相结合,贝叶斯回归提供了对回归参数的更有根据且可能更准确的估计。
  • 原因二:
    • 与标准回归技术产生的单点估计相反,贝叶斯回归提供了一种通过生成后验分布来测量回归参数估计中的不确定性的自然方法,该后验分布捕获参数值中的不确定性。
    • 该分布为参数提供了一系列可接受的值,并可用于计算可信区间或贝叶斯置信区间。
  • 原因三:
    • 为了合并复杂的相关性和非线性,贝叶斯回归通过提供用于整合各种先验分布的框架来提供灵活性,这使得它能够处理标准回归技术的基本假设(如线性或方差齐性)可能不成立的情况。
    • 它能够对预测变量和响应变量之间更现实和更微妙的关系进行建模。
  • 原因四:
    • 贝叶斯回归通过计算不同模型的后验概率来促进模型选择和比较。
  • 原因五:
    • 与经典回归方法相比,贝叶斯回归可以更有效地处理异常值和有影响的观测值。
    • 它为回归分析提供了一种更稳健的方法,因为极端或有影响力的观测对估计的影响较小。

贝叶斯回归如何实现

  • 假设线性回归的独立特征是 X = { x 1 , x 2 , . . . , x p } X = \{x_1, x_2, ..., x_p\} X={x1,x2,...,xp},其中 X X X表示第 i i i独立特征,目标变量将是 y y y。
  • 假设我们有 n n n个样本 ( X , y ) (X,y) (X,y),因变量 y y y和独立特征 X X X之间的线性关系可以表示为:
    y = w ₀ + w ₁ x ₁ + w ₂ x ₂ + . . . + w ₚ x ₚ + ϵ y = w_₀ + w_₁x_₁ + w_₂x_₂ + ... + w_ₚx_ₚ + \epsilon y=w₀+w₁x₁+w₂x₂+...+wₚxₚ+ϵ
    或 y = f ( x , w ) + ϵ y = f(x,w) + \epsilon y=f(x,w)+ϵ
  • 这里, w = { w ₀ , w ₁ , w ₂ , . . . , w ₚ } w = \{w_₀, w_₁, w_₂, ..., w_ₚ\} w={w₀,w₁,w₂,...,wₚ} 是回归系数,表示自变量和因变量之间的关系, ϵ \epsilon ϵ是误差项。
  • 我们假设误差 ϵ \epsilon ϵ服从均值为0且方差为常数的正态分布 σ 2 \sigma^2 σ2, 即( ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim N(0, \sigma^2) ϵ∼N(0,σ2)) 。
  • 该假设允许我们对预测值周围的目标变量的分布进行建模。

似然函数

在独立特征和回归系数之间建立关系的概率分布被称为++相似性++。它描述了在给定某些回归系数组合的情况下,获得某个结果的概率。

假设条件:

误差 ϵ = { ϵ 1 , ϵ ₂ , . . . , ϵ ₙ } \epsilon = \{\epsilon_1, \epsilon_₂, ..., \epsilon_ₙ\} ϵ={ϵ1,ϵ₂,...,ϵₙ} 是独立和相同的,并且服从均值为 0 0 0、方差为 σ 2 \sigma^2 σ2的正态分布。

这意味着目标变量 y y y,给定预测器 x 1 , x 2 , . . . , x p x_1, x_2, ..., x_p x1,x2,...,xp服从均值正态分布:
μ = f ( x , w ) = w 0 + w 1 x 1 + w 2 x 2 + . . . + w p x p \mu = f(x,w) = w_0 + w_1x_1 + w_2x_2 + ... + w_px_p μ=f(x,w)=w0+w1x1+w2x2+...+wpxp和方差 σ 2 \sigma^2 σ2。

因此,给定预测变量, y y y的条件概率密度函数(PDF)为:

P ( y ∣ x , w , σ 2 ) = N ( f ( x , w ) , σ 2 ) = 1 2 π σ 2 e [ − ( y − f ( x , w ) ) 2 2 σ 2 ] = 1 2 π σ 2 exp ⁡ [ y − ( w 0 + w 1 x 1 + w 2 x 2 + ⋯ + w P x P ) 2 σ 2 ] \begin{aligned} P(y|x,w,\sigma^2) &= N(f(x,w),\sigma^2) \\&=\frac{1}{\sqrt{2\pi\sigma^2}}e^{\left[-\displaystyle\frac{(y -f(x,w))^{2}}{2\sigma^{2}}\right]} \\&=\frac{1}{\sqrt{2\pi\sigma^2}}\exp{\left[\frac{y-(w_0+w_1x_{1}+w_2x_{2}+\cdots +w_P x_{P})}{2\sigma^2}\right]} \end{aligned} P(y∣x,w,σ2)=N(f(x,w),σ2)=2πσ2 1e[−2σ2(y−f(x,w))2]=2πσ2 1exp[2σ2y−(w0+w1x1+w2x2+⋯+wPxP)]

似然函数,用于具有每个观测值的N个观测值 ( x i 1 , x i 2 , ⋯   , x i P , y i ) (x_{i1}, x_{i2}, \cdots, x_{iP}, yᵢ) (xi1,xi2,⋯,xiP,yi) 服从均值为正态分布的 μ i = w 0 + w 1 x i 1 + w 2 x i 2 + ⋯ + w P x i P \mu_i = w_{0} + w_1x_{i1} + w_2x_{i2} + \cdots + w_{P}x_{iP} μi=w0+w1xi1+w2xi2+⋯+wPxiP和方差 σ 2 \sigma^2 σ2,将是因变量的联合概率密度函数(PDF),并且可以写为各个PDF的乘积:
L ( Y ∣ X , w , σ 2 ) = P ( y 1 ∣ x 11 , x 12 , ⋯   , x 1 P ) ⋅ P ( y 2 ∣ x 21 , x 22 , ⋯   , x 2 P ) ⋯ P ( y n ∣ x n 1 , x n 2 , ⋯   , x n P ) = N ( f ( x 1 p , w ) , σ 2 ) ⋅ N ( f ( x 2 p , w ) , σ 2 ) ⋯ N ( f ( x n p , w ) , σ 2 ) ⋅ = ∏ i = 1 N [ N ( f ( x i p , w ) , σ 2 ) ] \begin{aligned} L(Y|X,w,\sigma^2) &= P(y_1 | x_{11}, x_{12},\cdots, x_{1P}) \cdot P(y_2 | x_{21}, x_{22},\cdots, x_{2P})\cdots P(y_n | x_{n1}, x_{n2},\cdots, x_{nP}) \\ &= N(f(x_{1p},w),\sigma^{2})\cdot N(f(x_{2p},w),\sigma^{2}) \cdots N(f(x_{np},w),\sigma^{2})\cdot \\& = \prod_{i=1}^{N}[N(f(x_{ip},w),\sigma^{2})] \end{aligned} L(Y∣X,w,σ2)=P(y1∣x11,x12,⋯,x1P)⋅P(y2∣x21,x22,⋯,x2P)⋯P(yn∣xn1,xn2,⋯,xnP)=N(f(x1p,w),σ2)⋅N(f(x2p,w),σ2)⋯N(f(xnp,w),σ2)⋅=i=1∏N[N(f(xip,w),σ2)]

为了简化计算,我们可以取似然函数的对数:
ln ⁡ ( L ( Y ∣ X , w , σ 2 ) ) = ln ⁡ [ ∏ i = 1 N [ N ( f ( x i p , w ) , σ 2 ) ] ] = ln ⁡ [ N ( f ( x 1 p , w ) , σ 2 ) ] + ln ⁡ [ N ( f ( x 2 p , w ) , σ 2 ) ] + ⋯ + ln ⁡ [ N ( f ( x n p , w ) , σ 2 ) ] = ∑ i = 1 N ln ⁡ [ 1 2 π σ 2 exp ⁡ ( − ( y i − ( w 0 + w 1 x i 1 + w 2 x i 2 + ⋯ + w P x i P ) ) 2 2 σ 2 ) ] \begin{aligned} \ln(L(Y|X,w,\sigma^2)) &= \ln{\left[ \prod_{i=1}^{N}[N(f(x_{ip},w),\sigma^{2})]\right ]} \\&= \ln{[N(f(x_{1p},w),\sigma^{2})}] + \ln[N(f(x_{2p},w),\sigma^{2})] + \cdots + \ln{[N(f(x_{np},w),\sigma^{2})]} \\&=\sum_{i=1}^{N}\ln\left[ \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_i-(w_0+w_1x_{i1}+w_2x_{i2}+\cdots +w_P x_{iP}))^2}{2\sigma^2}\right) \right] \end{aligned} ln(L(Y∣X,w,σ2))=ln[i=1∏N[N(f(xip,w),σ2)]]=ln[N(f(x1p,w),σ2)]+ln[N(f(x2p,w),σ2)]+⋯+ln[N(f(xnp,w),σ2)]=i=1∑Nln[2πσ2 1exp(−2σ2(yi−(w0+w1xi1+w2xi2+⋯+wPxiP))2)]

精密度:
β = 1 Σ 2 \beta=\displaystyle\frac{1}{\Sigma^2} β=Σ21

使用来自先前响应的条件PDF表达式,我们将其代入似然函数:

ln ⁡ ( L ( y ∣ x , w , σ 2 ) ) = N 2 ln ⁡ ( 2 π ) − N 2 ln ⁡ ( β ) − β 2 ∑ i = 1 N [ ( y − f ( x i , w ) ) 2 ] \ln(L(y|x,w,\sigma^2))=\displaystyle\frac{N}{2}\ln(2\pi)-\frac{N}{2}\ln(\beta)-\frac{\beta}{2}\sum_{i=1}^{N}\left[(y-f(x_i,w))^2 \right ] ln(L(y∣x,w,σ2))=2Nln(2π)−2Nln(β)−2βi=1∑N[(y−f(xi,w))2]

负对数可能性:
− ln ⁡ ( L ( y ∣ x , w , σ 2 ) ) = β 2 ∑ i = 1 N [ ( y − f ( x i , w ) ) 2 ] − N 2 ln ⁡ ( 2 π ) + N 2 ln ⁡ ( β ) -\ln(L(y|x,w,\sigma^2))=\displaystyle\frac{\beta}{2}\sum_{i=1}^{N}\left[(y-f(x_i,w))^2 \right ]-\frac{N}{2}\ln(2\pi)+\frac{N}{2}\ln(\beta) −ln(L(y∣x,w,σ2))=2βi=1∑N[(y−f(xi,w))2]−2Nln(2π)+2Nln(β)

这里, ln ⁡ ( 2 π ) \ln(2\pi) ln(2π) 和 ln ⁡ ( β ) \ln(\beta) ln(β)是恒定的,所以,

− ln ⁡ ( L ( y ∣ x , w , σ 2 ) ) = β 2 ∑ i = 1 N [ ( y − f ( x i , w ) ) 2 ] + const -\ln(L(y|x,w,\sigma^2))=\displaystyle\frac{\beta}{2}\sum_{i=1}^{N}\left[(y-f(x_i,w))^2 \right ] + \text{const} −ln(L(y∣x,w,σ2))=2βi=1∑N[(y−f(xi,w))2]+const

先验:

先验是在观察数据之前关于参数的初始信念或概率。它是关于参数的信息或假设。

在最大后验概率(MAP)估计中,我们将关于参数的先验知识或信念结合到估计过程中。我们使用先验分布来表示该先验信息,表示为 P ( W ∣ α ) = N ( 0 , α − 1 I ) P(W|\alpha)=N(0,\alpha^{-1}I) P(W∣α)=N(0,α−1I)

后验分布:

后验分布是在考虑了参数的先验分布和观测数据后得到的参数的更新后的信念或概率分布。

使用贝氏定理,我们可以用似然函数和先验分布来表示后验分布:

P ( w ∣ X , α , β − 1 ) = L ( Y ∣ X , w , β − 1 ) ⋅ P ( w ∣ α ) P ( Y ∣ X ) P(w|X,\alpha, \beta^{-1}) = \displaystyle\frac{L(Y|X,w, \beta^{-1}) \cdot P(w|\alpha)}{P(Y|X)} P(w∣X,α,β−1)=P(Y∣X)L(Y∣X,w,β−1)⋅P(w∣α)

P ( y ∣ X ) P(y|X) P(y∣X)是观测数据的++边际概率++,其充当归一化常数。由于它不依赖于参数值,我们可以在优化过程中忽略它。

P ( w ∣ X , α , β − 1 ) ∝ ( L ( Y ∣ X , w , β − 1 ) ⋅ P ( w ∣ α ) ) P(w | X,\alpha, \beta^{-1}) \propto(L(Y|X,w, \beta^{-1}) \cdot P(w|\alpha)) P(w∣X,α,β−1)∝(L(Y∣X,w,β−1)⋅P(w∣α))

在上述公式中,

  • 对数似然: L ( Y ∣ X , w , β − 1 ) L(Y|X, w, \beta^{-1}) L(Y∣X,w,β−1)是正态分布。
  • 先验: P ( w ∣ α ) P(w|\alpha) P(w∣α)是统一的。
  • 所以,后验也将是正态分布。

在实践中,使用后验分布的对数(称为++对数-后验++ )通常更方便,为了得到最大后验分布,我们使用负似然:
w ^ = ln ⁡ [ ( L ( Y ∣ X , w , β − 1 ) ⋅ P ( w ∣ α ) ) ] = ln ⁡ [ L ( Y ∣ X , w , β − 1 ) ] + ln ⁡ [ P ( w ∣ α ) ] = β 2 ∑ i = 1 N ( y i − f ( x i , w ) ) 2 + α 2 w T w \begin{aligned} \hat{w}&= \ln[(L(Y|X,w, \beta^{-1}) \cdot P(w|\alpha))] \\ &= \ln[L(Y|X,w, \beta^{-1})] + \ln[P(w|\alpha)] \\&=\frac{ \beta}{2}\sum_{i=1}^{N}(y_i-f(xᵢ,w))² + \frac{\alpha}{2} w^T w \end{aligned} w^=ln[(L(Y∣X,w,β−1)⋅P(w∣α))]=ln[L(Y∣X,w,β−1)]+ln[P(w∣α)]=2βi=1∑N(yi−f(xi,w))2+2αwTw

后验的最大值由最小值给出 β 2 ∑ i = 1 N ( y i − f ( x i , w ) ) 2 + α 2 w T w \displaystyle\frac{\beta}{2}\sum_{i=1}^{N}(y_i-f(xᵢ,w))² + \displaystyle\frac{\alpha}{2} w^T w 2βi=1∑N(yi−f(xi,w))2+2αwTw

贝叶斯回归案例

python 复制代码
# coding: utf-8
'''
下面代码实现了贝叶斯线性回归的推断过程。
首先,它生成了一组样本数据,并定义了贝叶斯回归模型和伴随的向导函数(用于近似后验分布)。
然后,使用SVI(Stochastic Variational Inference)进行推断,优化模型参数。
在推断过程中,通过迭代优化损失函数来更新参数。
最后,使用Predictive函数从模型中获取后验样本,并可视化后验分布。
代码中使用了PyTorch和Pyro库进行概率编程和推断。
'''
# 导入PyTorch库,用于科学计算和深度学习基础支持
import torch

# 导入Pyro库,用于概率编程
import pyro

# 导入Pyro的概率分布模块,用于定义概率模型
import pyro.distributions as dist

# 导入Pyro的推理模块,用于实现变分推理
from pyro.infer import SVI, Trace_ELBO, Predictive

# 导入Pyro的优化器模块,用于优化变分参数
from pyro.optim import Adam

# 导入Matplotlib库,用于数据可视化
import matplotlib.pyplot as plt

# 导入Seaborn库,用于改进Matplotlib的可视化效果
import seaborn as sns


# 生成一些示例数据
# 设置随机数种子,确保实验可复现
torch.manual_seed(0)

# 生成一个等差数列,用于模拟自变量X
# torch.linspace(0, 10, 100) 生成一个起始值为0,结束值为10,包含100个元素的等差数列
X = torch.linspace(0, 10, 100)

# 定义真实斜率和截距,用于生成模拟因变量Y
true_slope = 2
true_intercept = 1

# 根据真实斜率、截距和随机噪声生成模拟因变量Y
# 这里使用torch.randn(100)生成一个均值为0,标准差为1的100个元素的随机数列,用于模拟噪声
Y = true_intercept + true_slope * X + torch.randn(100)

# 定义贝叶斯回归模型
def model(X, Y):
	"""
	通过概率图模型进行线性回归的模型定义。
	
	Args:
	    X (torch.Tensor): 输入特征,形状为(n_samples,)的一维张量。
	    Y (torch.Tensor): 目标变量,形状为(n_samples,)的一维张量。
	
	Returns:
	    None: 该函数不返回任何值,而是使用Pyro库中的采样操作定义了一个概率图模型。
	
	"""
	# 从正态分布中采样斜率
	slope = pyro.sample("slope", dist.Normal(0, 10))
	# 从正态分布中采样截距
	intercept = pyro.sample("intercept", dist.Normal(0, 10))
	# 从半正态分布中采样标准差
	sigma = pyro.sample("sigma", dist.HalfNormal(1))

	# 计算预测值(均值)
	mu = intercept + slope * X

	# 观测值的可能性(采样分布)
	# Likelihood (sampling distribution) of the observations
	with pyro.plate("data", len(X)):
		# 采样观测值,并使用实际观测值Y作为观察值
		pyro.sample("obs", dist.Normal(mu, sigma), obs=Y)

# 使用 SVI(随机变分推理)运行贝叶斯推理
def guide(X, Y):
	"""
	根据给定的数据集X和Y,使用近似后验分布来估计线性回归模型的参数。
	
	Args:
	    X (torch.Tensor): 输入特征矩阵,形状为 (N, D),其中N为样本数量,D为特征维度。
	    Y (torch.Tensor): 目标变量向量,形状为 (N,)。
	
	Returns:
	    tuple: 包含三个元素的元组,分别为:
	        - slope (torch.Tensor): 斜率参数,形状为 (1,)。
	        - intercept (torch.Tensor): 截距参数,形状为 (1,)。
	        - sigma (torch.Tensor): 标准差参数,形状为 (1,)。
	
	"""
	# 近似参数的后验分布
	# Approximate posterior distributions for the parameters
	# 斜率的位置参数
	slope_loc = pyro.param("slope_loc", torch.tensor(0.0))
	# 斜率的尺度参数
	slope_scale = pyro.param("slope_scale", torch.tensor(1.0),
							# 尺度参数必须是正数
							constraint=dist.constraints.positive)
	# 截距的位置参数
	intercept_loc = pyro.param("intercept_loc", torch.tensor(0.0))
	# 截距的尺度参数
	intercept_scale = pyro.param("intercept_scale", torch.tensor(1.0),
								# 尺度参数必须是正数
								constraint=dist.constraints.positive)
	# 标准差的位置参数
	sigma_loc = pyro.param("sigma_loc", torch.tensor(1.0), 
						# 标准差必须是正数
						constraint=dist.constraints.positive)

	# 从近似的后验分布中采样
	# Sample from the approximate posterior distributions
	# 采样斜率
	slope = pyro.sample("slope", dist.Normal(slope_loc, slope_scale))
	# 采样截距
	intercept = pyro.sample("intercept", dist.Normal(intercept_loc, 
													# 采样截距
													intercept_scale))
	# 采样标准差
	sigma = pyro.sample("sigma", dist.HalfNormal(sigma_loc))

# 初始化 SVI 和优化器
optim = Adam({"lr": 0.01})
svi = SVI(model, guide, optim, loss=Trace_ELBO())

# 运行推理循环
num_iterations = 1000
for i in range(num_iterations):
	loss = svi.step(X, Y)
	if (i + 1) % 100 == 0:
		print(f"Iteration {i + 1}/{num_iterations} - Loss: {loss}")

# 使用 Predictive 获取后验样本
predictive = Predictive(model, guide=guide, num_samples=1000)
posterior = predictive(X, Y)

# 提取参数样本
slope_samples = posterior["slope"]
intercept_samples = posterior["intercept"]
sigma_samples = posterior["sigma"]

# 计算后验均值
slope_mean = slope_samples.mean()
intercept_mean = intercept_samples.mean()
sigma_mean = sigma_samples.mean()

# 打印估计参数
print("Estimated Slope:", slope_mean.item())
print("Estimated Intercept:", intercept_mean.item())
print("Estimated Sigma:", sigma_mean.item())

# 创建子图
fig, axs = plt.subplots(1, 3, figsize=(15, 5))

# 绘制斜率的后验分布
sns.kdeplot(slope_samples, shade=True, ax=axs[0])
axs[0].set_title("Posterior Distribution of Slope")
axs[0].set_xlabel("Slope")
axs[0].set_ylabel("Density")

# 绘制截距的后验分布
sns.kdeplot(intercept_samples, shade=True, ax=axs[1])
axs[1].set_title("Posterior Distribution of Intercept")
axs[1].set_xlabel("Intercept")
axs[1].set_ylabel("Density")

# 绘制sigma的后验分布
sns.kdeplot(sigma_samples, shade=True, ax=axs[2])
axs[2].set_title("Posterior Distribution of Sigma")
axs[2].set_xlabel("Sigma")
axs[2].set_ylabel("Density")

# 调整布局
plt.tight_layout()

# 显示图
plt.show()

贝叶斯回归优点

贝叶斯回归有如下优点:

  • 当数据集的大小很小时非常有效。
  • 与基于批处理的学习相比,特别适合基于在线的学习(实时接收数据),在基于批处理的学习中,我们在开始训练模型之前就已经掌握了整个数据集。这是因为贝叶斯回归不需要存储数据。
  • 贝叶斯方法是一种久经考验的方法,在数学上非常稳健。因此,人们可以在没有任何关于数据集的额外先验知识的情况下使用它。
  • 贝叶斯回归方法采用偏态分布,使您可以在模型中包含外部信息。

贝叶斯回归缺点

贝叶斯回归有如下缺点:

  • 模型的推断可能是耗时的。
  • 如果有大量的数据可用于我们的数据集,贝叶斯方法是不值得的,而常规的频率主义方法可以更有效地完成工作
  • 如果您的代码所处的环境中,安装新包很有挑战性,并且有很强的依赖控制,那么这可能是一个问题。
  • 通常困扰传统频率回归模型的许多基本错误仍然适用于贝叶斯模型。例如,贝叶斯模型仍然依赖于特征和结果变量之间的线性关系。

贝叶斯回归何时使用

  • 样本量小
    • 当你有一个很小的样本量时,++贝叶斯推断++通常很有帮助。
    • 如果你需要开发一个非常复杂的模型,但又不能访问大量数据,那么贝叶斯回归是一个很好的选择。
    • 事实上,这可能是你最好的选择!大样本量对于许多其他机器学习模型正常工作是必要的。
  • 强大的先验知识
    • 将强大的外部知识纳入模型的最简单方法是利用++贝叶斯模型++。
    • 使用的数据集越小,先验知识的影响就越明显。

总结

因此,现在您知道了++贝叶斯回归器++的工作原理以及何时使用它们,您应该在下次执行回归任务时尝试使用它,尤其是在数据集很小的情况下。

往期重要内容回顾

朴素贝叶斯分类器概览
应用数学与机器学习基础 - 概率与信息论篇

相关推荐
沐光-NIE7 分钟前
配置jupyter时出现问题?怎么办?
python·深度学习·jupyter
交换喜悲22 分钟前
目标检测常用涨点方法:注意力机制小结(空间注意力、通道注意力、CBAM等)
开发语言·人工智能·深度学习·目标检测·计算机视觉·maven
2401_8574396924 分钟前
深度学习在目标检测中的革命性应用与进展
人工智能·深度学习·目标检测
pen-ai28 分钟前
【深度学习】C++ onnx Yolov8 目标检测推理
c++·人工智能·深度学习·opencv·yolo·目标检测
IT_Beijing_BIT35 分钟前
C++ 的常见算法 之一
开发语言·c++·算法
日月星辰cmc40 分钟前
【算法题解】部分洛谷题解(下)
算法
Coisinilove1 小时前
MATLAB——循环语句
开发语言·算法·matlab
机 _ 长1 小时前
Mamba项目实战-Ubuntu
人工智能·深度学习·ubuntu
bigbigli_大李1 小时前
C++基础21 二维数组及相关问题详解
数据结构·c++·算法
PPPPPaPeR.2 小时前
TopK问题与堆排序
c语言·开发语言·c++·算法