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 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. 医疗和生物学:‌贝叶斯统计和线性回归将在医疗和生物学领域应用于预测疾病发展、‌分析基因表达等问题。‌这些应用展示了贝叶斯线性回归在处理复杂数据和提供预测方面的能力。‌

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用NIFI连接瀚高数据库_并从RestFul的HTTP接口中获取数据局_同步到瀚高数据库中---大数据之Nifi工作笔记0067

首先来看一下如何,使用NIFI 去连接瀚高数据库. 其实,只要配置好了链接的,连接字符串,和驱动,任何支持JDBC的数据库都可以连接的. 首先我们用一个ListDatabaseTables处理器,来连接瀚高DB 主要是看这里,连接地址,以及驱动,还有驱动的位置 这个是数据连接的配置 jdbc:highgo://…

MagicClothing: 给人物照片换装的ComfyUI工作流(干货满满)

前言 在试验了各种ComfyUI 工作流,换了3台电脑,失败了无数次之后,终于又一次跑通了ComfyUI。 接下来会分享跑成功的各种ComfyUI工作流。 今天就拿给人物换装的新出来的这个做一个样本。 上一次文章提到给人物换装的模型[OOTDiffusion: 给人…

【OTA】-【汽车远程升级】- 技术背景及现状分析

一、OTA技术背景 在21世纪,计算机技术、物联网技术、移动通讯技术取得了巨大的成就,这些技术的发展使智能网联汽车越来越多。智能网联汽车在各行各业,例如:交通调度、工业现场、物联网设备、智慧城市、军队武器装备等,…

软件工程课设——成绩管理系统

软件工程课设——成绩管理系统 该文档是软件工程课程设计,成绩管理子系统的开发模块仓库。 功能分析 从面向的用户分,成绩管理子系统主要面向三类用户,即至少需要满足这三类用户的需求: 学生:学生是成绩管理系统的…

FlinkErr:org/apache/hadoop/hive/ql/parse/SemanticException

在flink项目中跑 上面这段代码出现如下这个异常&#xff0c; java.lang.NoClassDefFoundError: org/apache/thrift/TException 加上下面这个依赖后不报错 <dependency> <groupId>org.apache.thrift</groupId> <artifactId>libthrift</artifactId…

PGCCC|【PostgreSQL】PCM认证考试大纲#postgresql 认证

PostgreSQL Certified Master PCM&#xff08;高级&#xff09; PostgreSQL Certified Master (PCM)是PostgreSQL的极高级别&#xff0c;是对数据库从业人员的技术、知识和操作技能的极高级别的认可。 PCM是解决极困难的技术难题和极复杂的系统故障的极佳PostgreSQL专家人选&a…

vue3 快速入门 (一) : 环境配置与搭建

1. 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 2. 安装Node.Js 首先&#xff0c;我们需要安装Node.Js。Node.js提供了运行 JavaScript 代码的环境。并且Node.js 带来了 npm&#xff0c;它是JavaScript世界的包管理工具。开发vue时&…

Scott Brinker:Martech的新数据层成为营销人工智能的基础

在我们最近发布的《2024年Martech状况报告》&#xff08;State of Martech 2024 report&#xff09;中&#xff0c;我和Frans Riemersma分析了整个Martech行业发生的大量转变&#xff0c;从人工智能驱动的Martech领域的爆炸式增长&#xff0c;到Martech技术栈中「可组合性」 的…

【vue教程】一. 环境搭建与代码规范配置

目录 引言Vue 框架概述起源与设计理念核心特性优势 Vue 开发环境搭建环境要求安装 Vue CLI创建 Vue 项目项目结构介绍运行与构建 组件实例基础模板响应式更新 代码规范为什么要使用代码规范在 Vue 项目中使用 ESLint 、PrettierESLint配置 ESLintrules 自定义错误级别 Prettier…

python数据可视化(6)——绘制散点图

课程学习来源&#xff1a;b站up&#xff1a;【蚂蚁学python】 【课程链接&#xff1a;【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接&#xff1a;【链接】】 Python绘制散点图查看BMI与保险费的关系 散点图: 用两组数据构成多个坐标点&#xff0c;考察…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件&#xff0c;以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host&#xff1a;指定数据库服务器的主…

使用Elasticsearch Python SDK 查询Easysearch

随着数据分析需求的不断增长&#xff0c;能够高效地查询和分析大数据集变得越来越重要。Elasticsearch作为一种强大的分布式搜索和分析引擎&#xff0c;被广泛应用于各种场景。Easyearch 支持原生 Elasticsearch 的 DSL 查询语法&#xff0c;确保原业务代码无需调整即可无缝迁移…

S274钡铼技术多功能可编程RTU在矿山通风系统远程监控中的应用案例

在现代矿山运营中&#xff0c;安全和效率是至关重要的考量因素。矿山通风系统作为确保工作场所空气质量和员工安全的关键部分&#xff0c;需要可靠的监控和控制以应对复杂多变的工作环境。钡铼第四代RTU S274作为一款多功能可编程的无线工业物联网数据监测采集控制短信报警终端…

log4js node日志插件

最近不是特别忙在用express搭建后台项目&#xff0c;在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现&#xff0c;后来发现console输出的日志达不到自己希望的 日志格式&#xff0c;后来各种百度发现了log4js插件&#xff0c;本文来记录log4js插件使用…

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

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

[BJDCTF2020]EzPHP1

知识点&#xff1a;1. url编码绕过 2. %0a绕过 3. post优先级绕过 4. php伪协议 5. 数组的强类型比较绕过 6. 取反绕过 进入之后发现了一个很帅气的页面&#x1f60e;~ 看看网页源代码试试~ 是base32编码&#xff0c;尝试一下解码. https://www.qqxiuzi.cn/bianma/base.php 解…

Java二十三种设计模式-适配器模式(6/23)

适配器模式&#xff1a;使不兼容的接口协同工作的桥梁 引言 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许不兼容的接口之间可以一起工作&#xff0c;通过将一个类的接口转换成客户端期望的另一个接口。 在计算机编程中&#x…

Java | Leetcode Java题解之第237题删除链表中的节点

题目&#xff1a; 题解&#xff1a; class Solution {public void deleteNode(ListNode node) {node.val node.next.val;node.next node.next.next;} }

Windows上LabVIEW编译生成可执行程序

LabVIEW项目浏览器(Project Explorer)中的"Build Specifications"就是用来配置项目发布方法的。在"Build Specifications"右键菜单中选取"New"&#xff0c;可以看到程序有几种不同的发布方法&#xff1a;Application(EXE)、Installer、.Net Inte…

Redis的热key解决

1、Redis热Key会带来哪些问题 1、流量集中&#xff0c;达到物理网卡上限。 当某一热点 Key 的请求在某一主机上超过该主机网卡上限时&#xff0c;由于流量的过度集中&#xff0c;会导致服务器中其它服务无法进行。 2、请求过多&#xff0c;缓存分片服务被打垮。 如果热点过于…