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.mzph.cn/news/872195.shtml

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

相关文章

excel系列(二) - 利用 easypoi 快速实现 excel 文件导入导出

一、介绍 在上篇文章中,我们介绍了 apache poi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款优秀的 excel 工具库:easypoi。 二、easypoi 以前的以前,有个大佬程序员,跳到一家公司之后就和业务人员聊上了&…

Parallels Desktop 19 for Mac(PD19虚拟机)详细图文安装教程分享

Parallels Desktop 19是一款功能丰富、性能强大且易于使用的虚拟机软件,它可以让您在Mac上同时运行多个操作系统,为您提供更大的灵活性和兼容性。 Parallels Desktop 19 for Mac(PD19虚拟机)下载安装包 Parallels Desktop 19 for Mac(PD19虚拟机)详细图…

linux端口,进程管理,主机状态监控

linux端口,进程管理,主机状态监控 一、端口 1、什么是端口?2、端口的划分2、查看端口占用 二、进程 1、什么是进程2、查看进程信息2、关闭进程 三、主机状态监控 1、查看资源占用2、磁盘信息监控3、查看网络情况 四、命令总结 一、端口 1、什么是端口…

电力调度台如何助力电力指挥中心更智慧

在现代电力系统的复杂运行环境中,电力调度台正逐渐成为电力指挥中心实现智慧化管理的关键力量。 电力调度台具备强大的信息集成与处理能力。它能够将来自不同监测系统、传感器和数据源的海量数据汇聚一处,包括电力设备的实时运行状态、电力负荷的动态变化…

C++客户端Qt开发——常用控件(输入类控件)

4.输入类控件 ①Line Edit 单行输入框 属性 说明 text 输入框中的文本 input 输入内容格式约束 maxLength 最大长度 frame 是否添加边框 echoMode 显示方式 QLineEdit::Normal:这是默认值,文本框会显示输入的文本。 QLineEdit::Password&…

C++客户端Qt开发——常用控件(多元素控件)

5.多元素控件 Qt中提供的多元素控件有: QListWidget QListView QTablewidget QTableview QTreewidget QTreeview xxWidget和xView之间的区别 以QTableWidget和QTableView为例. QTableView是基于MVC设计的控件.QTableView自身不持有数据.使用QTableView的时候需要…

Django任务管理

1、用django-admin命令创建一个Django项目 django-admin startproject task_manager 2、进入到项目下用命令创建一个应用 cd task_manager python manage.py startapp tasks 3、进入models.py定义数学模型 第2步得到的只是应用的必要空文件,要开始增加各文件实际…

STM32(五):STM32指南者-按键控制灯开关实验

说明:源代码和教程可从野火处下载,本博客为了记录学习过程STM32(四):STM32指南者-跑马灯实验的基础上 一、采用轮询方式1、bsp_key.h2、bsp_key.c3、main.c 二、采用中断方式1、bsp_exti.h2、bsp_exti.c3、stm32f10x_i…

AI写作不懂提示词 大象Prompt 保姆级系列教程三

一、提示词的核心价值究竟是啥? 最近跟不少业内朋友探讨这事儿,我觉得:提示词的核心价值在于对方法论的封装以及由此带来的知识传播速度加快。 通俗讲,假如你熟悉的行业里有个厉害的“老师傅”,他在核心业务上有好多心…

jvm 07 GC算法,内存池

01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数,每多一个其他对象引用,计数1, 当引用失效时,计数-1,如果计数0,表示没有其他对象引用,…

架构设计-NX的二次开发API架构设计介绍

1.与整体的关系 2.API设计目标 能够允许用户访问NX的所有UI工具组件,二次开发用户能够编写外观和运行行为类似NX的应用程序。能够允许用户直接访问NX数据模型即使底层数据结构和功能实现发生很大变化,API接口保持稳定,不会影响上层用户。 3…

ARM架构(一)—— ARMV8V9基础概念

目录 1.ARMCore的时间线2.ARM术语小结2.1 A64和arrch642.2ARM架构现在的5个系列2.3 微架构2.4 PE2.5 Banked2.6 ARM文档术语2.7 IMPLEMENTATION DEFINFD 和 DEPRECATED2.8 EL1t和EL1h 3 ARMv7的软件架构4 安全状态切换模型4.1 Secure state和Non-secure state介绍 5 Interproce…

设计师必备:将复杂逻辑做成可视化图表,别说你不会,看过来。

将复杂逻辑做成可视化图可以帮助人们更直观地理解和分析复杂的关系和流程。以下是一般步骤: 1.确定目的: 首先需要明确制作可视化图的目的是什么,是为了展示数据的关系、流程的步骤、还是其他目的。不同的目的会对可视化图的设计和展示方式…

如何在Linux系统上查找以太网卡驱动名称及其版本

说明 目录: 通过dmesg命令查看驱动名称及版本 通过ethtool命令查看驱动名称及版本 通过lshw命令查看驱动名称及版本 要使网卡硬件能够正常的运行,需要在Linux操作系统上提供合适的驱动程序,例如:用于intel网卡的ixgbe驱动。网卡…

FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题

其实代码没有问题,但是我们忽略了一个问题,就是在正常的开发中,肯定是遇到过这样的情况,我们频繁的有客户端链接,断开连接,需要统一的管理这些链接,那么应该如何管理呢。其实可以声明一个类去管…

怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样优化 PostgreSQL 中对复杂的排序规则和排序方向的查询一、理解复杂排序规则和排序方向二、优化索引…

vue前端实现导出页面为word(两种方法)

将vue页面导出为word文档,不用写模板,直接导出即可。 第一种方法(简单版) 第一步:安装所需依赖 npm install html-docx-js -S npm install file-saver -S第二步:创建容器,页面使用方法 注意:在当前页面引…

Linux进程信号总结

目录 信号入门 生活中的信号 技术应用角度的信号 信号的发送与记录 信号处理常见方式概述 产生信号 通过终端按键产生信号 通过系统函数向进程发信号 由软件条件产生信号 ​编辑 由硬件异常产生信号 阻塞信号 信号其他相关常见概念 在内核中的表示 sigset_t …

输出调节求解跟踪问题(二阶线性系统)

本文研究了一种基于增广系统的领导者-跟随者控制框架,旨在实现跟随者系统对领导者参考信号的精确跟踪。首先,建立了跟随者和领导者的独立状态空间方程,分别描述了它们的动态行为和输出关系。随后,通过将两者的状态空间方程结合成增…

在Windows环境下安装pycharm

Python环境搭建 第一步下载安装python 等待安装完成 验证python是否安装成功 Python开发工具安装部署 JetBrains: Essential tools for software developers and teams PyCharm: the Python IDE for data science and web development 下载社区版本的PyCharm 双击打开下载好的…