AI算法16-贝叶斯线性回归算法Bayesian Linear Regression | BLR

贝叶斯线性回归算法简介

频率主义线性回归概述

线性回归的频率主义观点可能你已经学过了:该模型假定因变量(y)是权重乘以一组自变量(x)的线性组合。完整的公式还包含一个误差项以解释随机采样噪声。如有两个自变量时,方程为:

模型中,y是因变量,β是权重(称为模型参数),x是自变量的值,ε是表示随机采样噪声的误差项或变量的影响。

线性回归是一个简单的模型,它可以很容易解释:是截距项,其他权重β表示增加自变量对因变量的影响。 例如,如果是1.2,那么对于中的每个单位增加,响应将增加1.2。

我们可以使用矩阵方程将线性模型推广到任意数量的预测变量。 在预测矩阵中添加一个常数项1以解释截距,我们可以将矩阵公式写为:

从训练数据中学习线性模型的目标是找到最能解释数据的系数β。 在频率主义线性回归中,最好的解释是采用残差平方和(RSS)的系数β。 RSS是已知值(y)和预测模型输出之间的差值的总和(ŷ,表示估计的明显的y-hat)。 残差平方和是模型参数的函数:

总和被用于训练集中的N个数据点。 我们在这里不会详细讨论这个细节,但是这个方程对于模型参数β有封闭解,可以使误差最小化。 这被称为β的最大似然估计,因为它是给定输入X和输出y的最可能的值。 以矩阵形式表示的封闭形式解为:

(再一次,我们必须在β上放上'帽子',因为它代表了模型参数的估计值。)不要让矩阵算术吓跑你! 感谢像Python中的Scikit-learn这样的库,我们通常不需要手工计算(尽管编码线性回归是一种很好的做法)。 这种通过最小化RSS来拟合模型参数的方法称为最小二乘法(OLS)。

我们从频率主义线性回归中得到的仅仅是基于训练数据的模型参数的单一估计。 我们的模型完全被数据告知:在这个视图中,我们需要知道的模型的所有信息都编码在我们可用的训练数据中。

一旦我们有了β-hat,我们可以通过应用我们的模型方程来估计任何新数据点的输出值:

作为OLS的一个例子,我们可以对真实世界的数据进行线性回归,这些数据的持续时间和消耗的热量为15000次运动观察。 以下是通过求解上述模型参数的矩阵方程得到的数据和OLS模型:

使用OLS,我们得到模型参数的单个估计值,在这种情况下,线的截距和斜率。我们可以写出由OLS产生的等式:

从斜坡上,我们可以说每一分钟的锻炼就能燃烧7.17卡路里。 这种情况下的截距并不有用,因为它告诉我们,如果我们运动0分钟,我们会燃烧-21.86卡路里! 这只是OLS拟合程序的一个人为因素,它找到了尽可能减少训练数据错误的线条,无论它是否物理上合理。

如果我们有一个新的数据点,说一个15.5分钟的运动持续时间,我们可以将其插入到方程式中,以获得燃烧卡路里的点估计值:

最小二乘法给出了输出的单点估计,我们可以将其解释为给定数据的最可能估计。 但是,如果我们有一个小数据集,我们可能会将我们的估计值表示为可能值的分布,这就是贝叶斯线性回归。

从普通最小二乘线性回归问题说起

从更为宏观的角度看,普通的线性回归问题,从本质上来说就是以"残差平方和"为统计量的一次多项式模型拟合问题,即

又称为最小二乘法。非常简单直接,甚至简单粗暴的思路,在各类工程问题得到了广泛地应用。数学上可以证明,最小二乘法的结果和均一正态误差(即每一个y的测量值yi的的分布是以"真实的"为期望,统一地误差为标准差的正态分布)情况下的极大似然拟合是一致的。在很多情况下,对于yi分布的假设往往是隐含的,不被显示指出的。

然而,当上述对于yi的正态分布性质的隐含假设不再成立时,最小二乘尽管仍然可能是对于真实结果的一个足够良好的逼近,但其可解释性将会受到显著的损害。同时,当实际情况中

yi显著偏离正态分布,而在数据分析中又强加这一假定时,很可能会发现出现显著偏离模型的野值(野值是相对于给定的yi的分布而言的,例如,如果yi服从的实际上是t分布,而强行假定它符合正态分布,就可能观察到出现概率极小的测量值,因为t分布相对于正态分布有两个很长的尾巴)。

对于这些显著偏离模型的所谓野值,我们当然可以修正统计量,使得拟合结果更为稳健(即所谓稳健拟合),然而很多情况下这只是权宜之计。

此外,对于自变量和因变量都存在弥散的情况下,普通的最小二乘线性拟合尽管能稍作修改应用在此类问题上,但这种修改的可推广性很差,难以应用到更复杂的非线性模型中。

贝叶斯线性回归模型

贝叶斯线性回归不仅可以解决极大似然估计中存在的过拟合的问题,而且,它对数据样本的利用率是100%,仅仅使用训练样本就可以有效而准确的确定模型的复杂度。

线性回归模型是一组输入变量x的基函数的线性组合,在数学上其形式如下:

这里ϕj(x)就是前面提到的基函数,总共的基函数的数目为M个,如果定义ϕ0(x)=1的话,那个上面的式子就可以简单的表示为:

则线性模型的概率表示如下:

假设参数w满足高斯分布,这是一个先验分布:

一般来说,我们称p(w)为共轭先验(conjugate prior)。这里t是x对应的目标输出,β−1和α−1分别对应于样本集合和w的高斯分布的方差,w是参数,

那么,线性模型的对数后验概率函数:

式子的推导过程:

这里M+1是模型的复杂度,即多项式回归的次数。那么根据贝叶斯规则:

这个叫做MAP极大后验概率(maximum posterior)。对这个式子做对数似然,去除无关项之后,可以很容易得到下面这个结果:

这里可以看出,先验概率对应的就是正则项,其正则参数为:

可以假设,复杂的模型有较小的先验概率,而相对简单的模型有较大的先验概率。

贝叶斯线性回归算法的学习过程

根据前面关于贝叶斯估计的增量学习可以很容易得到下面这个式子,这个就是贝叶斯学习过程:在前一个训练集合Dn−1的后验概率p(θ|Dn−1)上,乘以新的测试样本点xn的似然估计,得到新的集合Dn的后验概率p(θ|Dn),这样,相当于p(θ|Dn−1)成为了p(θ|Dn)的先验概率分布:

有了上面的基础知识,这里就着重的讲下面这幅图,这个图是从RMPL第155页截取下来的,这幅图清晰的描述了贝叶斯线性回归的学习过程,下面结合这幅图,详细的说明一下贝叶斯学习过程。

首先,说一下这里的模型:

第一行:

第一行是初始状态,此时只有关于w的先验信息,即:p(θ|D0)=p(θ)=N(w|0,α−1I)。先看中间这幅图,这幅图是关于w的先验分布,由于我们假设w初始为高斯分布N(w|0,α−1I),故其图形是以(0,0)为中心的圆组成的。由于此时还没有样本点进入,所以没有关于样本的似然估计,故第一行中左边likelihood没有图。第一行右边data space的那幅图显示的是从第二幅图prior/posterior中随机抽取一些点(w0,w1),并以(w0,w1)为参数,画出来的直线,此时这些直线是随机的。

第二行:

此时有了第一个样本点x1,那么根据x1就可以得到第二行中,关于x1的似然估计,由于y=w0+w1x,似然估计的结果其实是这个式子的对偶式,即w1=1/x*y−1/x*w0。从第二行的最右边data space中的图中可以估计出,第一个样本点的坐标大概为:(0.9,0.1),所以其第一幅图中,似然估计的中心线的方程为:

近似为左边那幅图的画法。由于第二行的先验分布是第一行的后验分布,也就是第一行的中间那幅图。则,第二行的后验分布的求法就是:将第二行的第左边那幅图和第一行的中间那幅图相乘,就可以得到第二行中间那幅图。第二行最右边那幅图就是从第二行中间那幅图中随机抽取一些点(w0,w1),并以(w0,w1)为参数,画出来的直线。

第三行之后,就可以一次类推了。

上面就是贝叶斯学习过程的完整描述。

贝叶斯线性回归算法代码实现

import numpy as npimport pymc3 as pmimport arviz as az# 生成一些模拟数据np.random.seed(123)true_intercept = 1.true_slope = 2.num_samples = 50  # 数据点的数量x = np.linspace(0, 1, num_samples)noise = np.random.normal(0, 0.1, num_samples)y = true_intercept + true_slope * x + noise# 指定模型with pm.Model() as model:# 先验设定intercept = pm.Normal('intercept', mu=0, sd=100)slope = pm.Normal('slope', mu=0, sd=10)# 响应变量的条件分布设定y_obs = pm.Normal('y_obs', mu=intercept + slope * x, sd=1, observed=y)# 运行MCMC模拟trace = pm.sample(1000, tune=1000)# 作图和结果分析az.plot_posterior(trace['intercept'], rope=[-5, 5], textsize=20)az.plot_posterior(trace['slope'], rope=[-5, 5], textsize=20)# 打印结果摘要az.summary(trace, var_names=['intercept', 'slope'], probs=[0.05, 0.95])

贝叶斯线性回归的优缺点

优点:

  1. 贝叶斯回归对数据有自适应能力,可以重复的利用实验数据,并防止过拟合
  2. 贝叶斯回归可以在估计过程中引入正则项

缺点:

  1. 贝叶斯回归的学习过程开销太大

贝叶斯线性回归的应用场景

贝叶斯线性回归是一种统计学习方法,‌它结合了贝叶斯统计和线性回归的概念,‌通过贝叶斯推断方法求解线性回归模型。‌这种方法的优势在于它能够将线性模型的参数视为随机变量,‌并通过模型参数的先验计算其后验,‌从而提供参数的不确定性估计。‌贝叶斯线性回归的应用场景广泛:‌

  1. 高速公路造价预测:‌在项目前期,‌通过识别高速公路造价的影响因素,‌建立造价预测指标体系,‌然后利用贝叶斯线性回归方程对造价进行预测。‌这种方法相较于BP神经网络模型,‌具有更高的预测精度和稳定性,‌误差控制在5%以内,‌MAPE为2.29%,‌决定系数为0.925,‌显示出良好的可行性和适用性。‌
  2. 工资预测模型构建:‌在劳动经济学领域,‌通过分析横截面工资数据,‌使用贝叶斯方法如BIC和贝叶斯模型来构建工资的预测模型。‌这种方法可以提供对收入和工资的深入理解,‌为从性别歧视到高等教育等问题提供见解。‌
  3. 大数据分析和人工智能:‌随着数据的增长和复杂性增加,‌贝叶斯统计和线性回归将应用于大数据分析中,‌帮助企业和组织更好地理解数据和预测趋势。‌同时,‌它们在人工智能和机器学习领域也发挥着重要作用,‌例如在图像识别、‌自然语言处理和推荐系统等领域3。‌
  4. 医疗和生物学:‌贝叶斯统计和线性回归将在医疗和生物学领域应用于预测疾病发展、‌分析基因表达等问题。‌这些应用展示了贝叶斯线性回归在处理复杂数据和提供预测方面的能力。‌

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377611.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024Datawhale AI夏令营---基于术语词典干预的机器翻译挑战赛--学习笔记

#Datawhale #NLP 1.背景介绍: 机器翻译(Machine Translation,简称MT)是自然语言处理领域的一个重要分支,其目标是将一种语言的文本自动转换为另一种语言的文本。机器翻译的发展可以追溯到20世纪50年代,经历…

各向异性含水层中地下水三维流基本微分方程的推导(二)

各向异性含水层中地下水三维流基本微分方程的推导 参考文献: [1] 刘欣怡,付小莉.论连续性方程的推导及几种形式转换的方法[J].力学与实践,2023,45(02):469-474. 书接上回: 我们能得到三个方向的流入流出平衡方程: ∂ ρ u x ∂ x d x d y d…

2024-07-15 Unity插件 Odin Inspector4 —— Collection Attributes

文章目录 1 说明2 集合相关特性2.1 DictionaryDrawerSettings2.2 ListDrawerSettings2.3 TableColumnWidth2.4 TableList2.5 TableMatrix 1 说明 ​ 本文介绍 Odin Inspector 插件中集合(Dictionary、List)相关特性的使用方法。 2 集合相关特性 2.1 D…

jmeter-beanshell学习10-字符串补齐位数

每天都遇到新问题,今天又一个场景,一个字符串,如果不足11位,则左边补0,补够11位。 先要获取字符串长度,然后计算差多少位,补齐。今天又发现一个Object类型,这个类型有点厉害&#x…

Ctrl+C、Ctrl+V、Ctrl+X 和 Ctrl+Z 的起源

注:机翻,未校对。 The Origins of CtrlC, CtrlV, CtrlX, and CtrlZ Explained We use them dozens of times a day: The CtrlZ, CtrlX, CtrlC, and CtrlV shortcuts that trigger Undo, Cut, Copy, and Paste. But where did they come from, and why do…

Activity启动流程

1 冷启动与热启动 应用启动分为冷启动和热启动。 冷启动:点击桌面图标,手机系统不存在该应用进程,这时系统会重新fork一个子进程来加载Application并启动Activity,这个启动方式就是冷启动。 热启动:应用的热启动比冷…

深度学习中激活函数的演变与应用:一个综述

摘要 本文全面回顾了深度学习中激活函数的发展历程,从早期的Sigmoid和Tanh函数,到广泛应用的ReLU系列,再到近期提出的Swish、Mish和GeLU等新型激活函数。深入分析了各类激活函数的数学表达、特点优势、局限性以及在典型模型中的应用情况。通过系统的对比分析,本文探讨了激…

实验二:图像灰度修正

目录 一、实验目的 二、实验原理 三、实验内容 四、源程序和结果 源程序(python): 结果: 五、结果分析 一、实验目的 掌握常用的图像灰度级修正方法,包括图象的线性和非线性灰度点运算和直方图均衡化法,加深对灰度直方图的理解。掌握对比度增强、直方图增强的原理,…

Git常用命令以及使用IDEA集成Gitee

目录 一、设置用户签名 二、初始化本地库 三、查看本地库状态 四、添加文件到暂存区 五、提交本地库 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、创建分支 9.3、切换分支 9.4、合并分支 十、团队协作 十一、Idea集成Git 11.1、配…

全球DeepFake攻防挑战赛DataWhale AI 夏令营——图像赛道

全球DeepFake攻防挑战赛&DataWhale AI 夏令营——图像赛道 赛题背景 随着人工智能技术的迅猛发展,深度伪造技术(Deepfake)正成为数字世界中的一把双刃剑。这项技术不仅为创意内容的生成提供了新的可能性,同时也对数字安全构…

CV12_ONNX转RKNN模型(谛听盒子)

暂时简单整理一下: 1.在边缘设备上配置相关环境。 2.配置完成后,获取模型中间的输入输出结果,保存为npy格式。 3.将onnx格式的模型,以及中间输入输出文件传送到边缘设备上。 4.编写一个python文件用于转换模型格式&#xff0c…

零售门店收银系统源码

php收银系统源码-CSDN博客文章浏览阅读268次,点赞6次,收藏4次。收银系统源码https://blog.csdn.net/qh716/article/details/140431477 1.系统开发语言 核心开发语言: PHP、HTML5、Dart后台接口: PHP7.3后合管理网站: HTML5vue2.0element-uicssjs线下收…

2023年高教杯数学建模2023B题解析(仅从代码角度出发)

前言 最近博主正在和队友准备九月的数学建模,在做往年的题目,博主主要是负责数据处理,运算以及可视化,这里分享一下自己部分的工作,相关题目以及下面所涉及的代码后续我会作为资源上传 问题求解 第一题 第一题的思路主要如下:…

win10远程ubuntu服务器桌面且显示图像窗口工具及配置说明

仅需一个MobaXterm_Personal工具就可以实现 网上的教程比较多,实现起来比较复杂,这个是经过自己的钻研找到的方法(请勿转载和抄袭) 报错:cannot connect to X server :0.0 操作1:export DISPLAY自己windo…

数学建模·熵权法

熵权法 一种计算评价指标之间权重的方法。熵权法是一种客观的方法,没有主观性,比较可靠。 具体定义 熵权法的核心在于计算信息熵,信息熵反映了一个信息的紊乱程度,体现了信息的可靠性 具体步骤 Step1正向化处理 将所以评价指标转…

玩客云刷入海纳思系统

玩客云(晶晨S805)刷机 | 海纳思系统 (ecoo.top) https://www.ecoo.top/update/soft_init/amlproject/USB_Burning_Tool_v2.1.3.exe https://node4.histb.com:9088/update/system/s805/hinas_s805_eMMC.burn.img.zip

LabVIEW液压数据采集测试系统

液压系统是装载机的重要组成部分,通过液压传动和控制实现各项作业功能,如提升、倾斜、转向等。液压系统的性能直接影响装载机的作业效率和稳定性。为了保证装载机液压系统的正常运行和优化设计,需要对其进行数据采集和测试。本文介绍了一套基…

Wireshark 对 https 请求抓包并展示为明文

文章目录 1、目标2、环境准备3、Wireshark 基本使用4、操作步骤4.1、彻底关闭 Chrome 进程4.2、配置 SSLKEYLOGFILE [核心步骤]4.3、把文件路径配置到 Wireshark 指定位置4.4、在浏览器发起请求4.5、抓包配置4.6、过滤4.6.1、过滤域名 http.host contains "baidu.com4.6.2…

通用图形处理器设计GPGPU基础与架构(三)

一、前言 前两篇已经介绍了 GPGPU 的背景 和 GPGPU 的编程模型相关的内容,本文将在 SIMT 计算模型的基础上,介绍 GPGPU 控制核心架构和微体系结构的设计。 二、CPU-GPGPU 异构计算系统 一个由 CPU 和 GPGPU 构成的异构计算平台如下图所示,GP…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…