SMT | Kriging代理模型原理及应用

news2024/9/21 18:52:35

前言

代理模型工具箱 (surrogate modeling toolbox, SMT) 是一个基于Python开发的第三方包,其中包含代理模型方法、采样技术和基准测试函数。有关SMT的详细介绍参见:
SMT | 代理模型Python工具包推荐
SMT可实现几个与高斯过程回归相关的代理模型:

  • Kriging (KRG):经典的高斯过程回归。
  • KPLS and KPLSK: 使用PLS降维来处理高维训练数据的KRG变体。
  • GPX:是使用 Rust 重新实现的 KRG 和 KPLS,以实现更快的训练/预测操作。
  • GEKPLS:利用衍生品训练数据来提高替代模型质量。
  • MGP:考虑了定义为密度函数的超参数的不确定性。
  • SGP:实现了稀疏方法,允许处理大型训练数据集,因为其他实现的时间复杂度以及训练点数量的内存成本。

下面介绍经典Kriging模型原理及应用案例。

1. Kriging (KRG)

1.1 基本原理

Kriging是一种插值模型,它是已知函数 f i ( x ) f_i({\bf x}) fi(x) 的线性组合,并添加随机过程 Z ( x ) Z({\bf x}) Z(x)
y ^ = ∑ i = 1 k β i f i ( x ) + Z ( x ) . \hat{y} = \sum\limits_{i=1}^k\beta_if_i({\bf x})+Z({\bf x}). y^=i=1kβifi(x)+Z(x).
Z ( x ) Z({\bf x}) Z(x) 是随机过程的实现,其均值为零,空间协方差函数为:
c o v [ Z ( x ( i ) ) , Z ( x ( j ) ) ] = σ 2 R ( x ( i ) , x ( j ) ) cov\left[Z\left({\bf x}^{(i)}\right),Z\left({\bf x}^{(j)}\right)\right] =\sigma^2R\left({\bf x}^{(i)},{\bf x}^{(j)}\right) cov[Z(x(i)),Z(x(j))]=σ2R(x(i),x(j))
其中 σ 2 \sigma^2 σ2 是过程方差, R R R 是相关性。SMT 中有四种类型的相关性函数。

  • 指数相关函数(Exponential correlation function, Ornstein-Uhlenbeck process):
    ∏ l = 1 n x exp ⁡ ( − θ l ∣ x l ( i ) − x l ( j ) ∣ ) , ∀   θ l ∈ R + \prod\limits_{l=1}^{nx}\exp\left(-\theta_l\left|x_l^{(i)}-x_l^{(j)}\right|\right), \quad \forall\ \theta_l\in\mathbb{R}^+ l=1nxexp(θl xl(i)xl(j) ), θlR+
  • 平方指数(高斯)相关函数(Squared Exponential (Gaussian) correlation function):
    ∏ l = 1 n x exp ⁡ ( − θ l ( x l ( i ) − x l ( j ) ) 2 ) , ∀   θ l ∈ R + \prod\limits_{l=1}^{nx}\exp\left(-\theta_l\left(x_l^{(i)}-x_l^{(j)}\right)^{2}\right), \quad \forall\ \theta_l\in\mathbb{R}^+ l=1nxexp(θl(xl(i)xl(j))2), θlR+
  • 具有可变幂的指数相关函数(Exponential correlation function with a variable power):
    ∏ l = 1 n x exp ⁡ ( − θ l ∣ x l ( i ) − x l ( j ) ∣ p ) , ∀   θ l ∈ R + \prod\limits_{l=1}^{nx}\exp\left(-\theta_l\left|x_l^{(i)}-x_l^{(j)}\right|^{p}\right), \quad \forall\ \theta_l\in\mathbb{R}^+ l=1nxexp(θl xl(i)xl(j) p), θlR+
  • Matérn 5/2 相关函数(Matérn 5/2 correlation function):
    ∏ l = 1 n x ( 1 + 5 θ l ∣ x l ( i ) − x l ( j ) ∣ + 5 3 θ l 2 ( x l ( i ) − x l ( j ) ) 2 ) exp ⁡ ( − 5 θ l ∣ x l ( i ) − x l ( j ) ∣ ) , ∀   θ l ∈ R + \prod\limits_{l=1}^{nx} \left(1 + \sqrt{5}\theta_{l}\left|x_l^{(i)}-x_l^{(j)}\right| + \frac{5}{3}\theta_{l}^{2}\left(x_l^{(i)}-x_l^{(j)}\right)^{2}\right) \exp\left(-\sqrt{5}\theta_{l}\left|x_l^{(i)}-x_l^{(j)}\right|\right), \quad \forall\ \theta_l\in\mathbb{R}^+ l=1nx(1+5 θl xl(i)xl(j) +35θl2(xl(i)xl(j))2)exp(5 θl xl(i)xl(j) ), θlR+
    Matérn 3/2相关函数(Matérn 3/2 correlation function):
    ∏ l = 1 n x ( 1 + 3 θ l ∣ x l ( i ) − x l ( j ) ∣ ) exp ⁡ ( − 3 θ l ∣ x l ( i ) − x l ( j ) ∣ ) , ∀   θ l ∈ R + \prod\limits_{l=1}^{nx} \left(1 + \sqrt{3}\theta_{l}\left|x_l^{(i)}-x_l^{(j)}\right|\right) \exp\left(-\sqrt{3}\theta_{l}\left|x_l^{(i)}-x_l^{(j)}\right|\right), \quad \forall\ \theta_l\in\mathbb{R}^+ l=1nx(1+3 θl xl(i)xl(j) )exp(3 θl xl(i)xl(j) ), θlR+
  • 指数平方正弦相关函数(Exponential Squared Sine correlation function):
    ∏ l = 1 n x exp ⁡ ( − θ l 1 ( sin ⁡ ( θ l 2 ( x l ( i ) − x l ( j ) ) ) 2 ) ) , ∀   θ l ∈ R + \prod\limits_{l=1}^{nx}\exp\left(-\theta_{l_1} \left( \sin \left( \theta_{l_2} \left( x_l^{(i)}-x_l^{(j)} \right)\right)^{2} \right) \right), \quad \forall\ \theta_l\in\mathbb{R}^+ l=1nxexp(θl1(sin(θl2(xl(i)xl(j)))2)), θlR+
    这些相关函数由 SMT 中的‘abs_exp’(指数)、‘squar_exp’(高斯)、‘matern52’、‘matern32’和‘squar_sin_exp’调用。

确定性项 ∑ i = 1 k β i f i ( x ) \sum\limits_{i=1}^k\beta_i f_i({\bf x}) i=1kβifi(x) 可以替换为常数、线性模型或二次模型。这三种类型在 SMT 中均可用。

在实现中,通过从每个变量(由 X 中的列索引)中减去平均值,然后将每个变量的值除以其标准差来对数据进行规范化:
X norm = X − X mean X std X_{\text{norm}} = \frac{X - X_{\text{mean}}}{X_{\text{std}}} Xnorm=XstdXXmean

有关克里金法的更多详细信息,请参阅 [1].

1.2 使用分类变量或整数变量的Kriging

目的是能够为混合类型变量构建模型。该算法由 Garrido-Merchán 和 Hernández-Lobato 于 2020 年提出[2]。

为了合并整数(具有顺序关系)和分类变量(无顺序),我们使用了连续松弛。对于整数,我们添加一个具有相同界限的连续维度,然后将预测四舍五入为更接近的整数。对于分类,我们添加尽可能多的边界为 [0,1] 的连续维度作为变量的可能输出值,然后我们将预测四舍五入到输出维度,从而给出最大的连续预测。
一种特殊情况是使用 Gower 距离来处理混合整数变量(因此有 gower 核/相关模型选项)。有关此类用法,请参阅 MixedInteger Tutorial。
更多详细信息请参阅 [2]。另请参阅 Mixed integer surrogate。
实施注意事项:混合变量处理适用于所有克里金模型(KRG、KPLS 或 KPLSK),但不能用于导数计算。

2. 案例介绍

示例1:

# 导入必要的第三方库
import numpy as np
import matplotlib
matplotlib.use('TkAgg') # 用于指定matplotlib使用TkAgg后端进行图形渲染。TkAgg是matplotib的一个后端,它使用Tkinter库来创建图形窗口并显示图表。
import matplotlib.pyplot as plt
from smt.surrogate_models import KRG

# 训练样本点,5个
xt = np.array([0.0, 1.0, 2.0, 3.0, 4.0])
yt = np.array([0.0, 1.0, 1.5, 0.9, 1.0])
# 构造Kriging代理模型
sm = KRG(theta0=[1e-2])
sm.set_training_values(xt, yt)
sm.train()
# 测试样本点(100个)预测
num = 100
x = np.linspace(0.0, 4.0, num)
y = sm.predict_values(x)
# 计算方差
s2 = sm.predict_variances(x)
# 根据第一个变量导数
_dydx = sm.predict_derivatives(xt, 0)
_, axs = plt.subplots(1)

# 带方差绘图
axs.plot(xt, yt, 'o')
axs.plot(x, y)
axs.fill_between(
    np.ravel(x),
    np.ravel(y - 2.32 * np.sqrt(s2)),  # 95% 置信区间为1.96
    np.ravel(y + 2.32 * np.sqrt(s2)),
    color='lightgrey',
)
axs.set_xlabel('x')
axs.set_ylabel('y')
axs.legend(
    ['Training data', 'Prediction', 'Confidence Interval 99%'],
    loc = 'lower right'
)
plt.show()

运行结果:

___________________________________________________________________________
   
                                  Kriging
___________________________________________________________________________
   
 Problem size
   
      # training points.        : 5
   
___________________________________________________________________________
   
 Training
   
   Training ...
   Training - done. Time (sec):  0.0690765
___________________________________________________________________________
   
 Evaluation
   
      # eval points. : 100
   
   Predicting ...
   Predicting - done. Time (sec):  0.0000000
   
   Prediction time/pt. (sec) :  0.0000000
   
___________________________________________________________________________
   
 Evaluation
   
      # eval points. : 5
   
   Predicting ...
   Predicting - done. Time (sec):  0.0009973
   
   Prediction time/pt. (sec) :  0.0001995
   

Process finished with exit code 0


示例2:混合变量类型建模
# 导入必要的第三方库
import numpy as np
import matplotlib
matplotlib.use('TkAgg') # 用于指定matplotlib使用TkAgg后端进行图形渲染。TkAgg是matplotib的一个后端,它使用Tkinter库来创建图形窗口并显示图表。
import matplotlib.pyplot as plt
from smt.surrogate_models import KRG
from smt.applications.mixed_integer import MixedIntegerKrigingModel
from smt.utils.design_space import DesignSpace, IntegerVariable

# 训练样本点,3个
xt = np.array([0.0, 2.0, 3.0])
yt = np.array([0.0, 1.5, 0.9])

design_space = DesignSpace(
    [
        IntegerVariable(0, 4)
    ]
)

# 构造Kriging代理模型
sm = MixedIntegerKrigingModel(
    surrogate=KRG(design_space=design_space, theta0=[1e-2], hyper_opt='Cobyla')
)
sm.set_training_values(xt, yt)
sm.train()
# 测试样本点(500个)预测
num = 500
x = np.linspace(0.0, 4.0, num)
y = sm.predict_values(x)
# 计算方差
s2 = sm.predict_variances(x)

# 绘图
fig, axs = plt.subplots(1)
axs.plot(xt, yt, 'o')
axs.plot(x, y)
axs.fill_between(
    np.ravel(x),
    np.ravel(y - 2.32 * np.sqrt(s2)),  # 95% 置信区间为1.96
    np.ravel(y + 2.32 * np.sqrt(s2)),
    color='lightgrey',
)
axs.set_xlabel('x')
axs.set_ylabel('y')
axs.legend(
    ['Training data', 'Prediction', 'Confidence Interval 99%'],
    loc='lower right'
)
plt.show()

运行结果如下:

___________________________________________________________________________
   
 Evaluation
   
      # eval points. : 500
   
   Predicting ...
   Predicting - done. Time (sec):  0.0069811
   
   Prediction time/pt. (sec) :  0.0000140

示例3:带噪声数据建模
# 导入必要的第三方库
import numpy as np
import matplotlib
matplotlib.use('TkAgg') # 用于指定matplotlib使用TkAgg后端进行图形渲染。TkAgg是matplotib的一个后端,它使用Tkinter库来创建图形窗口并显示图表。
import matplotlib.pyplot as plt
from smt.surrogate_models import KRG

# 定义一个函数
def target_fun(x):
    import numpy as np

    return np.cos(5 * x)
# 训练样本点
nobs = 50  # 训练样本点个数
np.random.seed(0)  # 可重复性的种子
xt = np.random.uniform(size=nobs)
yt = target_fun(xt) + np.random.normal(scale=0.05, size=nobs)  # 在响应输出中添加随机噪声

# 构造Kriging代理模型
sm = KRG(eval_noise=True, hyper_opt='Cobyla')
sm.set_training_values(xt, yt)
sm.train()
# 测试样本点(100个)预测
x = np.linspace(0, 1, 100).reshape(-1, 1)
y = sm.predict_values(x)
# 计算方差
var = sm.predict_variances(x)

# 绘图
plt.rcParams['figure.figsize'] = [8, 4]
plt.fill_between(
    np.ravel(x),
    np.ravel(y - 2.32 * np.sqrt(var)),  # 95% 置信区间为1.96
    np.ravel(y + 2.32 * np.sqrt(var)),
    alpha=0.2,
    label='Confidence Interval 99%'
)
plt.scatter(xt, yt, label='Training noisy data')
plt.plot(x, y, label='Prediction')
plt.plot(x, target_fun(x), label='target function')
plt.title('Kriging model with noisy observations')
plt.legend(loc=0)
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')
plt.show()

运行结果如下

___________________________________________________________________________
   
                                  Kriging
___________________________________________________________________________
   
 Problem size
   
      # training points.        : 50
   
___________________________________________________________________________
   
 Training
   
   Training ...
   Training - done. Time (sec):  0.1668217
___________________________________________________________________________
   
 Evaluation
   
      # eval points. : 100
   
   Predicting ...
   Predicting - done. Time (sec):  0.0016260
   
   Prediction time/pt. (sec) :  0.0000163
   

Process finished with exit code 0


参考文献

[1] Sacks, J. and Schiller, S. B. and Welch, W. J., Designs for computer experiments, Technometrics 31 (1) (1989) 41-47.

[2] Garrido-Merchan and D. Hernandez-Lobato, Dealing with categorical and integer-valued variables in Bayesian Optimization with Gaussian processes, Neurocomputing 380 (2020) 20-35.

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

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

相关文章

串口输出时:英文正常输出、中文乱码输出

一、问题:英文正常输出,英文乱码输出 二、解决方法 1、查看自己使用的串口助手的编码格式 2、查看自己使用输出的文件编码格式 以记事本的格式查看,原则上这两种应该保持相同,如果不相同,就需要把这个文件去另保存一…

图像与文本并存,多模态检索如何带来新的搜索革命

01 火热的多模态智能 回顾到2024的大型语言模型(LLM)的发展,让人欣喜的一点是scaling law依然奏效,智能随着资源的提高继续提高。但另一个让人担忧的点是高质量的文本语料似乎即将触及上限。为了加入更多的数据喂给模型&#xff0…

体育场座位【python实现】

题目来自此处 def main():seats list(map(int,input().split()))count 0for i in range(len(seats)):if seats[i] 0:if (i 0 or seats[i-1] 0) and(i len(seats)-1 or seats[i1] 0):count 1seats[i] 1print(seats)print(count) if __name__ "__main__":mai…

Win11 eNSP安装

前言 新买的电脑,安装eNSP总会遇到一些问题。如果你之前就是做网络安全而现在需要安装eNSP,你可能会因为安装过Wireshark导致一些问题。所以这里就为大家综合一篇文章,修复一些简单的问题。 下载地址:https://pan.baidu.com/s/17p…

Shell:初识sed、awk

Linux系统提供了两个常见的具备上述功能的工具。本节将会介绍Linux世界中最广泛使用的 两个命令行编辑器:sed和gawk。 1. sed编辑器 sed编辑器被称作流编辑器(stream editor),流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可…

会做“减法”的项目经理,在工作中赢麻了!

都说我们在生活中要学会“断舍离”,其实工作中的一些事项、流程,也可以尽量精简!对于项目经理来说也是如此,每天会议很多、需求不断,要适当做好“减法”,才能更好朝着目标方向前进! 01、什么是做…

Linux 添加新用户之adduser 和 useradd 的区别 | 添加用户到 sudo 组【笔记型博文】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 ❤️ 创建新用户adduser 用法【推荐】useradd 用法 安装 sudo添加用户到 sudo 用…

Transformer学习(1):注意力机制

文章目录 什么是注意力如何实现注意注意力的计算过程总结 什么是注意力 在一张图像中,包含了各种信息,而我们会自动关注重要的信息。下图是注意力热力图,可以发现人们会注意兔子的脸这些重要信息。 而在深度学习中,输入数据包含…

Selenium自动化 Web 浏览器操作

文章目录 Selenium自动化 Web 浏览器操作Selenium简介安装Selenium安装WebDriver使用问题驱动加载报错版本不匹配 常用API创建实例定位元素鼠标事件表单相关多窗口切换等待显示等待隐式等待 文件上传下载经验总结 Selenium自动化 Web 浏览器操作 Selenium简介 Selenium可以模…

Bio-Linux-shell详解-1-从0开始

21世纪是数据的世纪,蓬勃发展的生物学积累了大量的数据,急需计算生物学、生物信息学及系统生物学等交叉学科大放异彩,而windows作为我们最熟悉的操作平台,并不能承担如此巨大的工作量,课题组的服务器因此承担了这个责任…

玩崩坏星穹铁道手机配置低、卡顿发烫、内存不足 GameViewer远程助你手机畅玩星铁PC端

9月10日,《崩坏:星穹铁道》迎来2.5版本「碧羽飞黄射天狼」!不知道大家有没有抽到 飞霄?这次崩铁还为我们送了10连和 1000星琼 ,上半卡池还有五星角色飞霄、知更鸟、卡芙卡、黑天鹅这四位角色,深受大家喜爱。…

Redis常用操作及springboot整合redis

1. Redis和Mysql的区别 数据模型:二者都是数据库,但是不同的是mysql是进行存储到磁盘当中,而Redis是进行存储到内存中. 数据模型 : mysql的存储的形式是二维表而Redis是通过key-value键值对的形式进行存储数据. 实际的应用的场景: Redis适合于需要快速读写的场景&…

在Word中,用VBA比较两段文本的相似度

效果1: 去掉字符串中回车,进行改进后效果: 代码: Function LevenshteinDistance(s As String, t As String) As IntegerDim d() As IntegerDim i As IntegerDim j As IntegerDim cost As IntegerDim sLen As IntegerDim tLen As IntegersLen…

nginx实现https安全访问的详细配置过程

文章目录 前言什么是 HTTP?什么是 HTTPS?HTTP 和 HTTPS 的区别为什么 HTTPS 被称为安全的?配置过程配置自签名证书 前言 首先我们来简单了解一下什么是http和https以及他们的区别所在. 什么是 HTTP? HTTP,全称为“超…

IDEA 怎么编辑文件模板

1.打开设置2.打开编辑者,选择编辑文件模板 3.点击加号4.先随便编译一次5.之后编辑文件模板就有了

电脑浏览器访问华为路由器报错,无法访问路由器web界面:ERR_SSL_VERSION_OR_CIPHER_MISMATCH 最简单的解决办法!

This site can’t provide a secure connection192.168.2.1 uses an unsupported protocol. ERR_SSL_VERSION_OR_CIPHER_MISMATCH 以上是chrome浏览器访问报错 Secure Connection Failed An error occurred during a connection to 192.168.2.1. Peer using unsupported versio…

python 异步执行 apply_async 方法

1.项目需要读取hive表数据,并对返回的数据进行解析; select * from table ; 2.返回数据,根据库、表,对其进行 下一步执行; 中间遇到一个棘手的问题,在python线程池中,使用异步非阻塞 apply_a…

(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)

一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…

如何在社交媒体上赚取(可观的)收入

有很多百万富翁是通过社交媒体粉丝建立起他们的财富的,而且其中大部分并不是Instagram网红或YouTube明星。 例如,Nick Huber通过社交媒体粉丝建立了几家企业,这些企业现在每月创造40万美元的收入。 而George Blackman在Twitter上仅有不到8,0…

微信自动回复设置真嘎嘎好用!

无论是商户、个人品牌还是普通用户,及时回应朋友和客户的信息至关重要。然而,手动一一回复既耗时又容易遗漏,这时,微信的自动回复功能就显得尤为重要。 今天,就教大家一招——通过个微管理系统,实现微信自…