Python空间地表联动贝叶斯地震风险计算模型
🎯要点
- 使用贝叶斯推断模型兼顾路径和场地效应,量化传统地理统计曲线拟合技术。
- 使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型
- 模型使用欧几里得距离度量、角距离度量和土壤差异性度量
- 确定贝叶斯先验分布和后验分布参数,评估模型性能
🍇Python高斯过程
高斯过程是机器学习工具箱中的一个强大工具。它们使我们能够通过结合先验知识对数据进行预测。它们最明显的应用领域是用函数拟合数据。这称为回归,例如,用于机器人技术或时间序列预测。但高斯过程不仅限于回归——它们还可以扩展到分类和聚类任务。对于给定的一组训练点,可能有无数个函数可以拟合数据。高斯过程通过为每个函数分配一个概率为这个问题提供了一个优雅的解决方案。这个概率分布的平均值代表了数据最可能的特征。此外,使用概率方法我们可以将预测的置信度合并到回归结果中。
首先,我们将从连续视图转向函数的离散表示:我们感兴趣的不是寻找隐式函数,而是预测具体点处的函数值,我们将其称为测试点 X X X。那么,我们如何从迄今为止考虑过的多元正态分布中推导出这种函数视图呢?随机过程(例如高斯过程)本质上是一组随机变量。此外,这些随机变量中的每一个都有相应的索引 i i i。我们将使用此索引来指代我们的 n n n 维多元分布的第 i i i 维。
现在,高斯过程的目标是从训练数据中学习这种底层分布。相对于测试数据 X X X,我们将训练数据表示为 Y Y Y。高斯过程的关键思想是将 X X X 的底层分布与 Y Y Y 一起建模为多元正态分布。这意味着联合概率分布 P X , Y P_{X, Y} PX,Y 跨越了我们想要预测的函数的可能函数值空间。请注意,测试和训练数据的联合分布具有 ∣ X ∣ + ∣ Y ∣ |X|+|Y| ∣X∣+∣Y∣ 维度。
为了对训练数据进行回归分析,我们将这个问题视为贝叶斯推理。贝叶斯推理的基本思想是随着新信息的出现而更新当前假设。在高斯过程的情况下,此信息是训练数据。因此,我们感兴趣的是条件概率 P X ∣ Y P_{X \mid Y} PX∣Y。最后,我们回想一下,高斯分布在条件下是封闭的——因此 P X ∣ Y P_{X \mid Y} PX∣Y 也是正态分布的。
现在我们已经了解了高斯过程的基本框架,只剩下一件事:如何建立这个分布并定义平均值 μ \mu μ 和协方差矩阵 Σ \Sigma Σ ?协方差矩阵 Σ \Sigma Σ 由其协方差函数 k k k 确定,后者通常也称为高斯过程的核。
在高斯过程中,我们将每个测试点视为一个随机变量。多元高斯分布的维数与随机变量的维数相同。由于我们想要预测 ∣ X ∣ = N |X|=N ∣X∣=N 个测试点处的函数值,因此相应的多元高斯分布也是 N N N 维的。使用高斯过程进行预测最终归结为从该分布中抽取样本。然后,我们将结果向量的第 i i i 个分量解释为与第 i i i 个测试点相对应的函数值。
高斯模型
p ( x ∣ π , Σ ) = ( 2 π ) − k / 2 ∣ Σ ∣ − 1 / 2 exp { − 1 2 ( x − μ ) ′ Σ − 1 ( x − μ ) } p(x \mid \pi, \Sigma)=(2 \pi)^{-k / 2}|\Sigma|^{-1 / 2} \exp \left\{-\frac{1}{2}(x-\mu)^{\prime} \Sigma^{-1}(x-\mu)\right\} p(x∣π,Σ)=(2π)−k/2∣Σ∣−1/2exp{−21(x−μ)′Σ−1(x−μ)}
这样做似乎没有任何好处,因为正态分布本身并不是特别灵活的分布。然而,采用一组高斯分布(多元正态向量)有许多好处。首先,多元正态分布中任何元素子集的边际分布也是正态的:
p ( x , y ) = N ( [ μ x μ y ] , [ Σ x Σ x y Σ x y T Σ y ] ) p ( x ) = ∫ p ( x , y ) d y = N ( μ x , Σ x ) \begin{gathered} p(x, y)= N \left(\left[\begin{array}{l} \mu_x \\ \mu_y \end{array}\right],\left[\begin{array}{cc} \Sigma_x & \Sigma_{x y} \\ \Sigma_{x y}^T & \Sigma_y \end{array}\right]\right) \\ p(x)=\int p(x, y) d y= N \left(\mu_x, \Sigma_x\right) \end{gathered} p(x,y)=N([μxμy],[ΣxΣxyTΣxyΣy])p(x)=∫p(x,y)dy=N(μx,Σx)
此外,多元正态分布元素子集的条件分布(取决于剩余元素)也是正态的:
p ( x ∣ y ) = N ( μ x + Σ x y Σ y − 1 ( y − μ y ) , Σ x − Σ x y Σ y − 1 Σ x y T ) p(x \mid y)= N \left(\mu_x+\Sigma_{x y} \Sigma_y^{-1}\left(y-\mu_y\right), \Sigma_x-\Sigma x y \Sigma_y^{-1} \Sigma x y^T\right) p(x∣y)=N(μx+ΣxyΣy−1(y−μy),Σx−ΣxyΣy−1ΣxyT)
高斯过程将多元正态推广到无限维度。它被定义为随机变量的无限集合,任何边缘子集都具有高斯分布。因此,边缘化属性在其定义中是明确的。另一种思考无限向量的方式是将其视为函数。当我们编写一个以连续值作为输入的函数时,我们本质上是在暗示一个无限向量,它只在调用该函数时返回值(由输入索引)。同样,这种以函数表示的无限维高斯概念使我们能够以计算方式处理它们:我们永远不需要存储高斯过程的所有元素,只需根据需要计算它们即可。
从高斯过程采样
import numpy as np
def exponential_cov(x, y, params):return params[0] * np.exp( -0.5 * params[1] * np.subtract.outer(x, y)**2)
我们将利用多变量高斯分布的条件性质,逐点顺序生成实现。条件如下:
p ( x ∣ y ) = N ( μ x + Σ x y Σ y − 1 ( y − μ y ) , Σ x − Σ x y Σ y − 1 Σ x y T ) p(x \mid y)= N \left(\mu_x+\Sigma_{x y} \Sigma_y^{-1}\left(y-\mu_y\right), \Sigma_x-\Sigma x y \Sigma_y^{-1} \Sigma x y^T\right) p(x∣y)=N(μx+ΣxyΣy−1(y−μy),Σx−ΣxyΣy−1ΣxyT)
这是实现它的函数:
def conditional(x_new, x, y, params):B = exponential_cov(x_new, x, params)C = exponential_cov(x, x, params)A = exponential_cov(x_new, x_new, params)mu = np.linalg.inv(C).dot(B.T).T.dot(y)sigma = A - B.dot(np.linalg.inv(C).dot(B.T))return(mu.squeeze(), sigma.squeeze())
我们将从高斯过程开始,其超参数为 σ − 0 = 1 , σ − 1 = 10 \sigma_{-} 0=1, \sigma_{-} 1=10 σ−0=1,σ−1=10。我们还将假设零函数为平均值,因此我们可以绘制一个表示平均值一个标准差的带。
import matplotlib.pylab as plt
θ = [1, 10]
σ_0 = exponential_cov(0, 0, θ)
xpts = np.arange(-3, 3, step=0.01)
plt.errorbar(xpts, np.zeros(len(xpts)), yerr=σ_0, capsize=0)
让我们选择一个任意的起点进行采样,比如 x=1。由于没有先前的点,我们可以从无条件高斯中采样:
x = [1.]
y = [np.random.normal(scale=σ_0)]
print(y)
[0.4967141530112327]
现在,我们可以更新我们的置信带,给出我们刚刚采样的点,使用协方差函数生成新的逐点区间,条件是值 [ x 0 , y 0 x_0, y_0 x0,y0]。
def predict(x, data, kernel, params, sigma, t):k = [kernel(x, y, params) for y in data]Sinv = np.linalg.inv(sigma)y_pred = np.dot(k, Sinv).dot(t)sigma_new = kernel(x, x, params) - np.dot(k, Sinv).dot(k)return y_pred, sigma_newx_pred = np.linspace(-3, 3, 1000)
predictions = [predict(i, x, exponential_cov, θ, σ_1, y) for i in x_pred]
y_pred, sigmas = np.transpose(predictions)
plt.errorbar(x_pred, y_pred, yerr=sigmas, capsize=0)
plt.plot(x, y, "ro")
因此,基于这一点以及我们指定的协方差结构,我们基本上限制了其他点的可能位置。现在让我们再取样一下:
m, s = conditional([-0.7], x, y, θ)
y2 = np.random.normal(m, s)
print(y2)
-0.1382640378102619
该点被添加到实现中,并可用于进一步更新下一个点的位置。
x.append(-0.7)
y.append(y2)
σ_2 = exponential_cov(x, x, θ)
predictions = [predict(i, x, exponential_cov, θ, σ_2, y) for i in x_pred]
y_pred, sigmas = np.transpose(predictions)
plt.errorbar(x_pred, y_pred, yerr=sigmas, capsize=0)
plt.plot(x, y, "ro")
👉参阅、更新:计算思维 | 亚图跨际
相关文章:

Python空间地表联动贝叶斯地震风险计算模型
🎯要点 使用贝叶斯推断模型兼顾路径和场地效应,量化传统地理统计曲线拟合技术。使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型模型使用欧几里得距离度量、角距离度量和土壤差异性度量确定贝叶斯先验分布和后验分布参数ÿ…...

虚幻引擎-设置UI自适应屏幕大小
在游戏中,如果想实现不同分辨率下,都可以支持当前的UI界面布局,都需要用到锚点功能。 虚幻引擎中的UI锚点(Anchor)是指控件在屏幕或父物体上的固定点,用于确定控件的位置和布局。 锚点的作用是确保UI元…...

C++继承的三种方式[ACCESS]
C继承的定义 两个类的继承关系在派生类中声明,派生类定义使用以下语法: class DerivedClass: [ACCESS] BaseClass{ /…/ }; 冒号(:)后的[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别&am…...

idea 同一个项目不同模块如何设置不同的jdk版本
在IntelliJ IDEA中,可以为同一个项目中的不同模块设置不同的JDK版本。这样做可以让你在同一个项目中同时使用多个Java版本,这对于需要兼容多个Java版本的开发非常有用。以下是设置步骤: 打开项目设置: 在IDEA中,打开你…...

1-仙灵之谜(区块链游戏详情介绍)
1-仙灵之谜(区块链游戏详情介绍) 前言(该游戏仅供娱乐)正文 前言(该游戏仅供娱乐) 依稀记得本科那会儿参加了一个区块链实验室,那时每周末大家都会爬山或者抽出一下午讨论区块链以及未来&#x…...

基于51单片机的温湿度上下限监测预警proteus仿真
地址:https://pan.baidu.com/s/1hSprWBYhKKx8Txzaj33YPA?pwdjp3d 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMic…...
考核总结.
事件循环 单线程的js在处理异步事件时进行的一种循环过程。 在 JS中任务分为同步与异步任务,其中异步任务又分为两种:宏任务和 微任务。宏任务和微任务的执行顺序:总方针是先同步再异步,异步中先微任务,在宏任务。一次…...

后端学习路线
后端学习路线 一、编程语言 至少需要学习一门编程语言,建议学习JAVA和GO语言。 二、数据库 数据库分为关系型数据库和非关系型数据库,区别在于分关系型数据库常用于大数据,而非关系型数据库一般不在大数据方面使用。 关系型数据库&#x…...

车辆重识别(注意力 U-Net:学习在哪些区域寻找胰腺)论文阅读2024/10/01
什么是注意力机制? 什么是加性注意力? 大致说一下流程: 对于一张特征图来说,对于这张图中的每一个像素向量(例如a),计算该向量与所有像素向量的相似度,对这些相似度进行激活函数…...
【区别】git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件
git restore --staged <文件> 和 git reset HEAD <文件> 都可以用于取消已暂存的文件,但它们的工作原理和适用场景有所不同。以下是对这两个命令的详细比较: 1. 命令概述 git restore --staged <文件>: 专门用于将指定文件…...
void类型
编程语言中的void类型是一种特殊的数据类型,它表示不存在任何值。void, 无或者空类型。大部分编程语言支持void, 用做函数无返回值类型。最早ALGOL 68引入void类型。 void的特别使用 经典C缺乏void类型,函数可以不指定返回值,默认是整型int.…...

10/1 力扣 49.字母异位词分组
基本知识: 关于字符串的排序: 1.多个字符串排序 1.1使用python内置的sorted() 使用该函数后原对象并不发生变化 1.2若多个字符串使用列表进行存储,使用列表的sort()方法 使用该函数后原对象原地变化 2.对单个字符串里的字母进行排序 使…...

✨机器学习笔记(六)—— ReLU、多分类问题、Softmax、Adam、反向传播
Course2-Week2: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Advanced%20Learning%20Algorithms/week2机器学习笔记(六) 1️⃣ReLU(Rectified Linear Unit)2️⃣多分类问题3️⃣Softmax4️⃣Adam5…...

Xshell7下载及服务器连接
一、Xshell-7.0.0164p、Xftp 7下载 1.1、文件下载 通过网盘分享的文件:xshell 链接: https://pan.baidu.com/s/1qc0CPv4Hkl19hI9tyvYZkQ 提取码: 5snq –来自百度网盘超级会员v2的分享 1.2、ip连接 下shell和xftp操作一样:找到文件—》新建—》名称随…...
SQL Server—的数据类型
SQL Server—的数据类型 在 SQL Server 数据库中,数据类型是定义数据模型的基础,它们决定了数据在数据库中的存储方式和格式。正确选择数据类型不仅可以优化存储空间,还能提高查询性能和数据完整性。 1文本类型 文本类型:字符数…...

WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
前言 今天大姚给大家分享一套基于.NET 8.0 LayUI的快速开发框架,项目完全开源、免费(MIT License)且开箱即用:WaterCloud。 可完全实现二次开发让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本&…...

数据结构-LRU缓存(C语言实现)
遇到困难,不必慌张,正是成长的时候,耐心一点! 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…...
javacv FFmpegFrameGrabber 阻塞重连解决方法汇总
JavaCV中FrameGrabber类可以连接直播流地址, 进行解码, 获取Frame帧信息, 常用方式如下 FrameGrabber grabber new FrameGrabber("rtsp:/192.168.0.0"); while(true) {Frame frame grabber.grabImage();// ... } 在如上代码中, 若连接地址网络不通, 或者连接超时…...

自然语言处理问答系统技术
自然语言处理问答系统技术 随着人工智能的不断发展,自然语言处理(NLP)技术已成为推动智能问答系统发展的核心技术。问答系统是利用NLP来解析用户提出的问题,并从知识库中找到最相关的答案。在许多应用中,如智能客服、…...
交换机和路由器的区别
交换机和路由器的区别主要体现在以下几个方面: 工作层次不同:交换机通常工作在OSI模型的数据链路层(第二层),主要根据MAC地址进行数据包转发。而路由器则工作在OSI模型的网络层(第三层)…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...
前端工具库lodash与lodash-es区别详解
lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...

MLP实战二:MLP 实现图像数字多分类
任务 实战(二):MLP 实现图像多分类 基于 mnist 数据集,建立 mlp 模型,实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入,可视化图形数字; 2、完成数据预处理:图像数据维度转换与…...