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

news2024/9/20 10:38:49

贝叶斯线性回归算法简介

频率主义线性回归概述

线性回归的频率主义观点可能你已经学过了:该模型假定因变量(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 np

import pymc3 as pm

import 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.coloradmin.cn/o/1933617.html

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

相关文章

原码、补码、反码、移码是什么?

计算机很多术语翻译成中文之后,不知道是译者出于什么目的,往往将其翻译成一个很难懂的名词。 奇怪的数学定义 下面是关于原码的“吐槽”,可以当作扩展。你可以不看,直接去下一章,没有任何影响。 原码的吐槽放在前面是…

【元器件】二极管、三极管、MOS管

二极管 D 二极管是一种具有两个电极(即正极和负极)的电子器件。它是一种非线性元件,具有许多重要的功能和应用 三极管 Q 概述 一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号,也用作无触点开…

代理IP服务中的代理池大小有何影响?

在当今数字化时代,网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中,使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题,构建代理池成为一种有效的解决方…

TikTok账号矩阵运营怎么做?

这几年,聊到出海避不过海外抖音,也就是TikTok,聊到TikTok电商直播就离不开账号矩阵; 在TikTok上,矩阵养号已经成为了出海电商人的流行策略,归根结底还是因为矩阵养号可以用最小的力,获得更大的…

沧穹科技助力杭州东站网约车服务全面升级

沧穹科技助力杭州东站完成网约车智能化服务全面革新升级,这一举措显著提升了杭州东站网约车服务的效率与乘客体验。以下是对这一革新升级的详细解析: 一、革新背景 随着网约车行业的快速发展,杭州东站作为华东地区重要的交通枢纽,…

VRRP虚拟路由冗余技术

VRRP虚拟路由冗余技术:是一种路由容错协议,用于在网络中提供路由器的冗余备份。它通过将多个路由器虚拟成一个虚拟路由器并且多个路由器之间共享一个虚拟IP地址来实现冗余和高可用性。当承担转发业务的主路由器出现故障时,其他备份路由器可以…

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

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

AI口语练习APP的技术挑战

实现基于大模型的口语练习系统是一项复杂且具有挑战性的任务,涉及多项技术和工程难点。以下是一些主要的技术难点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1. 语音识别准确率 口语练习APP需要能够准确识别用户的语…

探索Python自然语言处理的新篇章:jionlp库介绍

探索Python自然语言处理的新篇章:jionlp库介绍 1. 背景:为什么选择jionlp? 在Python的生态中,自然语言处理(NLP)是一个活跃且不断发展的领域。jionlp是一个专注于中文自然语言处理的库,它提供了…

智慧消防建设方案(完整方案参考PPT)

智慧消防系统建设方案旨在通过物联网、大数据与云计算技术,集成火灾自动报警、智能监控、应急指挥等功能于一体。方案部署智能传感器监测火情,实时数据分析预警,实现火灾早发现、早处置。构建可视化指挥平台,优化应急预案&#xf…

Google资深工程师深度讲解Go语言-课程笔记

课程目录: 第1章 课程介绍 欢迎大家来到深度讲解Go语言的课堂。本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带…

高性能内存对象缓存Memcached

memcached常用架构 memcached分布式示例图 一致性hash算法简单示例图

Yum包下载

1. 起因 内网有一台服务器需要升级php版本,维护的同学又不想二进制安装.服务器只有一个光盘的yum仓库 2. 解决方法 解决思路如下: 外网找一台机器配置php8.3.8的仓库外网服务器下载软件集并打包内网服务器上传并解压实现升级 2.1 下载php8.3.8仓库 配置php仓库 rootcent…

SQL 子查询中,查询了一个不存在的字段,居然不报错

前言 前几天在做一个需求,用户所在的部门被删除了,对应用户的角色也要清空。测试测的时候发现,只要测我的这个需求系统的所有角色都被删除了。。。。。。。 我看了日志也没报错呀,我也没有删除所有账号的角色呀。我有点不相信&a…

(一)原生js案例之图片轮播

原生js实现的两种播放效果 效果一 循环播放&#xff0c;单一的效果 代码实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sc…

4款良心软件,免费又实用,内存满了都舍不得卸载

以下几款高质量软件&#xff0c;若是不曾体验&#xff0c;实在是遗憾可惜。 PDF Guru 这是一款开源免费的PDF编辑软件&#xff0c;打开之后功能一目了然。 可以拆分、合并PDF&#xff0c;也可以给PDF添加水印和密码&#xff0c;同时也可以去除别人PDF里的水印或密码&#xff0…

状态管理的艺术:探索Flutter的Provider库

状态管理的艺术&#xff1a;探索Flutter的Provider库 前言 上一篇文章中&#xff0c;我们详细介绍了 Flutter 应用中的状态管理&#xff0c;以及 StatefulWidget 和 setState 的使用。 本篇我们继续介绍另一个实现状态管理的方式&#xff1a;Provider。 Provider优缺点 基…

Spock单元测试框架使用介绍和实践

背景 单元测试是保证我们写的代码是我们想要的结果的最有效的办法。根据下面的数据图统计&#xff0c;单元测试从长期来看也有很大的收益。 单元测试收益: 它是最容易保证代码覆盖率达到100%的测试。可以⼤幅降低上线时的紧张指数。单元测试能更快地发现问题。单元测试的性…

STM32 UART 硬件结构

访问串口与读写内存无差&#xff0c;串口将寄存器中的值通过数据线一位一位的传输出去 协议 设置波特率&#xff0c;数据位 115200 8 n 1 BSRR/CR 查询方式进行数据的发送与接收 &#xff08;在一个while循环中判断状态&#xff0c;然后读取数据&#xff09; 1、发送…

在线商城系统带万字文档java项目java课程设计java毕业设计

文章目录 在线商城系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 在线商城系统 一、项目演示 在线商城系统 二、项目介绍 基于springbootvue的前后端分离在线商…