Python空间地表联动贝叶斯地震风险计算模型

🎯要点

  1. 使用贝叶斯推断模型兼顾路径和场地效应,量化传统地理统计曲线拟合技术。
  2. 使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型
  3. 模型使用欧几里得距离度量、角距离度量和土壤差异性度量
  4. 确定贝叶斯先验分布和后验分布参数,评估模型性能
    在这里插入图片描述
    在这里插入图片描述

🍇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} PXY。最后,我们回想一下,高斯分布在条件下是封闭的——因此 P X ∣ Y P_{X \mid Y} PXY 也是正态分布的。

现在我们已经了解了高斯过程的基本框架,只剩下一件事:如何建立这个分布并定义平均值 μ \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(xy)=N(μx+ΣxyΣy1(yμy),ΣxΣxyΣy1Σ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(xy)=N(μx+ΣxyΣy1(yμy),ΣxΣxyΣy1Σ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")

👉参阅、更新:计算思维 | 亚图跨际

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

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

相关文章

CTMO时代下的营销新力量:2+1链动模式AI智能名片商城小程序

在当今这个瞬息万变的商业世界里,营销领域正经历着一场深刻的变革。传统的CMO岗位似乎在时代的浪潮中逐渐失去了它的光芒,CTMO正在悄然取代传统CMO的岗位。 随着营销丛林现象的出现,企业面临着前所未有的挑战。许多企业发现,那些传…

【SQL】未订购的客户

目录 语法 需求 示例 分析 代码 语法 SELECT columns FROM table1 LEFT JOIN table2 ON table1.common_field table2.common_field; LEFT JOIN(或称为左外连接)是SQL中的一种连接类型,它用于从两个或多个表中基于连接条件返回左表…

动态分配内存

目录 前言 一.malloc,free函数 1.malloc,free函数原型 2.使用方法 3.具体实例 4.注意事项 二.calloc函数 1.calloc函数原型 2.主要特点 3.使用案例 三.realloc函数 1.realloc函数原型 2.使用案例 3.注意事项 前言 动态内存是指在程序运行时,按需分配和…

51单片机学习第六课---B站UP主江协科技

DS18B20 1、基本知识讲解 2、DS18B20读取温度值 main.c #include<regx52.h> #include"delay.h" #include"LCD1602.h" #include"key.h" #include"DS18B20.h"float T; void main () {LCD_Init();LCD_ShowString(1,1,"temp…

时序必读论文14|VLDB24 TFB:全面且公平的时间序列预测方法框架

论文标题&#xff1a;TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 论文链接&#xff1a;https://arxiv.org/pdf/2403.20150.pdf 代码链接&#xff1a;https://github.com/decisionintelligence/TFB 前言 五一过后读的第一篇文章…

矩阵系统源码搭建的具体步骤,支持oem,源码搭建

一、前期准备 明确需求 确定矩阵系统的具体用途&#xff0c;例如是用于社交媒体管理、电商营销还是其他领域。梳理所需的功能模块&#xff0c;如多账号管理、内容发布、数据分析等。 技术选型 选择适合的编程语言&#xff0c;如 Python、Java、Node.js 等。确定数据库类型&…

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件

Qt 中的 QListWidget、QTreeWidget 和 QTableWidget&#xff1a;简化的数据展示控件 在 Qt 的用户界面开发中&#xff0c;展示和管理数据是常见的需求。Qt 提供了丰富的控件供开发者选择&#xff0c;其中 QListWidget、QTreeWidget 和 QTableWidget 是三个高层封装控件&#x…

vue实现文件解压缩

1. 使用CompressionStream API实现压缩 这里开启了多线程解压缩 <template><div class"page"><input type"file" placeholder"选择文件" id"file" /><button click"compress(compress)">压缩<…

uplink 级联口

Uplink 播报编辑讨论上传视频 交换机上的一种端口 展开2个同名词条 本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01; 在点到多点系统中&#xff0c;由分散点到集中点的传输链路。例如&#xff1a;在移动…

yolov8训练数据集——labelme的json文件转txt文件

yolov8的环境搭建&#xff0c;参考&#xff1a;Home - Ultralytics YOLO Docs 1.把标注好的json文件和jpg放同一个目录下。 2.运行转换脚本文件labelme2yolo.py文件&#xff1a; # -*- coding: utf-8 -*-import os import numpy as np import json from glob import glob im…

【C#】CacheManager:高效的 .NET 缓存管理库

在现代应用开发中&#xff0c;缓存是提升性能和降低数据库负载的重要技术手段。无论是 Web 应用、桌面应用还是移动应用&#xff0c;缓存都能够帮助减少重复的数据查询和处理&#xff0c;从而提高系统的响应速度。然而&#xff0c;管理缓存并不简单&#xff0c;尤其是当你需要处…

Linux-基础实操篇-组管理和权限管理(上)

Linux 组基本介绍 在 linux 中的每个用户必须属于一个组&#xff0c;不能独立于组外。在 linux 中每个文件 有所有者、所在组、其它组的概念。 用户和组的基本概念&#xff1a; 用户名&#xff1a;用来识别用户的名称&#xff0c;可以是字母、数字组成的字符串&#xff0…

基于yolo11的工地钢筋检测计数训练、应用系统

基于yolo11的工地钢筋检测计数应用系统 基于yolo11的工地钢筋检测计数训练系统 yolov8/9/10/11模型在工地钢筋检测计数中的应用【代码数据集python环境训练/应用GUI系统】 背景意义 多数钢厂和工地普遍依靠人工来统计成捆钢筋的根数&#xff0c;这种方式不仅机械枯燥、劳动强度…

深入掌握 Protobuf 与 RPC 的高效结合:实现C++工程中的高效通信

目录 一、Protobuf与RPC框架的通信流程概述二、Protobuf与RPC在C中的实际应用2.1 定义 .proto 文件2.2 编译 .proto 文件生成C代码2.3 实现服务器端逻辑2.4 实现客户端逻辑2.5 使用CMake构建工程2.6 编译与运行2.7 关键组件解析2.8 序列化与反序列化的实现 三、关键实现与解析四…

帝都程序猿十二时辰

前言 2019年度国产剧《长安十二时辰》火了&#xff0c;其口碑榜首、节奏紧凑、贴合原著、电影质感&#xff0c;都是这部剧的亮点。而最令人震撼的还是剧中对大唐盛世的还原&#xff0c;长安街坊的市容市貌、长安百姓的生活日常、长安风情的美轮美奂……而关于十二时辰的话题也接…

Unity 2D RPG Kit 学习笔记

学习资料&#xff1a; B站教学视频&#xff1a;https://www.bilibili.com/video/BV1dC4y1o7A5?p1&vd_source707ec8983cc32e6e065d5496a7f79ee6 2D RPG Kit Documentation.pdf文档 1、2D RPG Kit Documentation文档 1.1、Scenes/TitleScreen 开始菜单工程 1.2、https://it…

C++语言学习(3): type 的概念

type 的概念 C中的变量拥有类型&#xff0c; 这是显然的。 实际上&#xff0c;每个 object&#xff0c; 每个 reference&#xff0c; 每个 function&#xff0c; 每个 expression &#xff0c; 都有对应的 type &#xff08;类型&#xff09;&#xff1a; Each object, refer…

【SQL】有至少五名直接下属的经理

目录 语法 需求 示例 分析 代码 语法 SELECT columns FROM table1 JOIN table2 ON table1.common_column table2.common_column; 在数据库管理和编程中&#xff0c;JOIN 是一种用于结合来自两个或多个表的数据的 SQL 操作。通过使用 JOIN&#xff0c;你可以根据两个表中的…

vue3 + ts 二次封装 el-menu

实现效果&#xff1a; 1. types / menu.ts export interface MenuItem {index: string,label: string,icon?: string,disabled?: boolean,children?: MenuItem[], }2. components / CustomMenu / index.vue <template><el-menu :default-active"defaultActi…