R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性...

news2024/10/6 12:21:32

原文链接:http://tecdat.cn/?p=24334

像任何统计建模一样,贝叶斯建模可能需要为你的研究问题设计合适的模型,然后开发该模型,使其符合你的数据假设并运行点击文末“阅读原文”获取完整代码数据)。

相关视频

1. 了解 Stan

统计模型可以在R或其他统计语言的各种包中进行拟合。但有时你在概念上可以设计的完美模型,在限制了你可以使用的分布和复杂性的软件包或程序中很难或不可能实现。这时你可能想转而使用统计编程语言,如Stan。

Stan是一种新式的语言,它提供了一种更全面的学习和实现贝叶斯模型的方法,可以适应复杂的数据结构。Stan开发团队的一个目标是通过清晰的语法、更好的采样器(这里的采样是指从贝叶斯后验分布中抽取样本)以及与许多平台(包括R、RStudio、ggplot2和Shiny)的集成,使贝叶斯建模更易于使用。

在这个入门教程中,我们将从一个线性模型开始,经历模型建立的迭代过程。在我们的高级stan教程中,我们将探索更复杂的模型结构。

首先,在建立模型之前,你需要定义你的问题并了解你的数据。探索它们,绘制它们,计算一些汇总统计。

一旦你对你的数据和你想用统计模型回答的问题有了了解,你就可以开始建立贝叶斯模型的迭代过程。

  • 设计你的模型。

  • 选择先验

  • 对后验分布进行采样。

  • 检查模型收敛(traceplots、rhats )

  • 使用后验预测批判性地评估模型并检查它们与您的数据的比较情况

  • 重复…

模拟数据也是很好的做法,以确保你的模型正确,作为测试你的模型的另一种方式。

2. 数据

首先,让我们找到一个可以拟合简单线性模型的数据集。 气候变化对地球最显着的影响之一是北半球每年海冰范围的减少。让我们使用 Stan 的线性模型探索海冰范围如何随时间变化。

通过运行setwd("your-file-path") 包含您自己的文件路径的代码 ,将您的工作目录设置为您保存数据的文件夹 。现在,让我们加载数据:

# 添加stringsAsFactors = F意味着数字变量将不会被
# 作为因子/分类变量读入
ece <- red.cv("sv", stinsAsFators = F)

我们来看一下数据:

84f9be95f9d17a19ce9f1a56a137565a.png

我们可以用这些数据提出什么研究问题?以下情况如何:

研究问题: 北半球的海冰范围是否会随着时间的推移而减少?

为了探索这个问题的答案,首先我们可以做一个数字。

plot( th ~ yr, data)

8395b011615b67d2d2b4fdda17021d6d.png图 1. 北半球海冰范围随时间的变化。

现在,让我们使用 lm().

l1 <- lm(exnoh ~ yer, data = sie)
summary(l1)

我们可以将该模型添加到我们的绘图中:

ablne(m1, l = 2, ty = 2, w = 3)

a947bb14443f173f2315131c83660c86.png图 2. 北半球海冰范围随时间的变化(加上线性模型拟合)。

记住线性模型的方程:

y = α + β ∗ x + 误差

在 Stan 你需要指定你想模型。                                    

也许我们已经找到了问题的答案,但本教程的重点是探索使用编程语言 Stan,所以现在让我们尝试在 Stan 中编写相同的模型。

准备数据

让我们重命名变量并将年份从 1 索引到 39。关于贝叶斯模型的一个关键是您必须使用信息分布来描述数据中的变化。因此,您希望确保您的数据符合这些分布,并且它们将适用于您的模型。在这种情况下,我们真的想知道从数据集的开始到数据集结束的海冰是否发生了变化,而不是 1979 年到 2017 年。我们不需要我们的模型估计 500 年或 600 年的海冰是什么样的,就在我们的数据集的持续时间内。因此,我们将年份数据设置为索引 1 到 30 年。

x <- I(year - 1978)

我们可以使用新数据重新运行该线性模型。

summary(lm1)

我们还可以从我们的简单模型中提取一些关键的汇总统计数据,以便我们Stan 稍后可以将它们与模型的输出进行比较 。

coeff\[1\] # 截距值
coeff\[2\] # 斜率
sigma(lm1) # 残差

现在让我们将其转换为用于输入Stan 模型的数据框 。传递给 Stan 的数据需要是命名对象列表。此处给出的名称需要与模型中使用的变量名称相匹配。


-

请确保安装了以下库(这些是本Stan 教程和下一个教程的库 )。 rstan 是最重要的,如果您没有 C++ 编译器,则需要一些额外的东西。

3. Stan 程序

我们将首先用语言编写一个线性模型 Stan。这可以写在你的 R 脚本中,或者单独保存为一个 .stan 文件并调用到 R.

一个 Stan 程序具有三个必需的“块”:

  • “数据” 块:您可以在其中声明数据类型、它们的维度、任何限制(即 upper = 或 lower = ,用作检查 Stan)及其名称。

  • “参数” 块:您可以在此处指明要建模的参数和名称。对于线性回归,我们希望对回归线周围的误差的截距、任何斜率和标准偏差进行建模。

  • “模型” 块:这是包含任何抽样语句的地方,包括正在使用的模型。模型块是指明要为参数包含的任何先验分布的地方。如果未定义Stan 先验,则 使用默认先验 uniform(-infinity, +infinity)。您可以在声明参数时使用上限或下限来限制先验(即 lower = 0\> 确保参数为正)。

采样由 ~ 符号表示,并且 Stan 已经包含许多常见的分布作为矢量化函数。

还有四个可选块:

  • “功能”

  • "转化的数据"

  • "转换后的参数

  • "生成的数量"

注释// 在 Stan中用 表示 。该write("model code", "file_name") 允许我们在 R 脚本中编写 Stan 模型并将文件输出到工作目录(或者您可以设置不同的文件路径)。

write("//简单线性回归的模型

数据

 int < lower = 1 > N; // 样本大小
vector\[N\] x;// 预测
vecor\[N\] y;// 结果


参数 

 real alha; // 截距
 real beta; // 斜率(回归系数)
 real < loer = 0 > sima; // 误差SD



模型 

 y ~ nrmal(alpha + x * beta , siga);



产生的数量 


// 后验预测分布" 。

"md1.stan"

首先,我们应该检查我们的 Stan 模型以确保我们编写了一个文件。

现在让我们保存该文件路径。

"model1.stan"

在这里,我们隐式地将 uniform(-infinity, +infinity) 先验用于我们的参数。

4. 运行Stan 模型

Stan 程序C++ 在被使用之前被遵守 。这意味着在 R 可以使用模型之前需要运行 C++ 代码。为此,您必须 C++ 安装编译器。编译后,您可以在每个会话中多次使用模型,但在开始新R 会话时必须重新编译 。有许多 C++ 编译器,而且它们在不同系统中通常是不同的。如果您的模型一堆错误,请不要担心。只要模型可以与该stan() 函数一起使用 ,它就可以正确编译。如果我们想使用以前编写的 .stan 文件,我们在file 函数中使用 参数 stan_model() 。

我们通过使用stan() 函数拟合我们的模型 ,并为它提供模型、数据,并指示预热的迭代次数(这些迭代稍后不会用于后验分布,因为它们只是模型“预热” ”),总迭代次数,我们要运行的链数,我们要使用的内核数(Stan 为并行化而设置),它表示同时运行的链数(即,如果您的计算机有四个内核) ,您可以在每个链上运行一个链,同时创建四个链)和细化,这是我们想要存储我们的预热后迭代的频率。“thin = 1”将保留每次迭代,“thin = 2”将保留每一秒,依此类推……

Stan 如果warmup = 未指定参数,则自动使用一半的迭代作为预热 。

stan(fie =moel1, data = data, wrmup = 500, ier = 1000, chais = 4, cres = 2, thn = 1)

访问fit 对象的内容 

结果 stan() 保存为 stanfit 对象(S4 类)。

我们可以通过执行对象的名称来获取参数估计和采样器诊断的汇总统计信息:

fit

48bec816e987c3ad09782c09deb037da.png

模型输出展示了什么?你怎么知道你的模型已经收敛了?您能看到指示您的 C++ 编译器已运行的文本吗?

从这个输出中,我们可以通过查看Rhat 每个参数的值来快速评估模型收敛性 。当这些值等于或接近 1 时,链已经收敛。还有许多其他诊断方法,但这对 Stan 来说很重要。

我们还可以通过从模型对象中提取参数来查看参数的完整后验。有很多方法可以查看后验。

poteir <- exrat(fit)

extract() 将每个参数的后验估计放入一个列表中。

让我们与我们之前使用“lm”的估计进行比较:

plot(y ~ x)

320d20c3bcb2d89dfb36c84ce7513c19.pngf80f608f3c7f034ec2e8fa5cc53fd7bb.png

图 3. 北半球海冰范围随时间的变化(比较 Stan 线性模型拟合和一般 lm 拟合)。

结果与lm 输出相同 。这是因为我们使用了一个简单的模型,并且在我们的参数上放置了非信息先验。

将回归线估计中的可变性可视化的一种方法是绘制来自后验的多个估计。

plot(y ~ x, pch = 20)

8ea49a32a4eea60ebbca0bf97e0c1ff1.png图 4. 北半球海冰范围随时间的变化(Stan 线性模型拟合)。

5. 改变先验

我们再试一次,但现在对海冰和时间之间的关系采用更有信息量的预设。我们将使用小标准差的正态先验。如果我们使用标准差非常大的正态先验(比如1000,或者10000),它们的作用与均匀先验非常相似。

参数 

 real alha; // 截距
 real bta; // 斜率(回归系数)
 real < lowr = 0 > sima; // 误差SD



模型

 beta ~ nomal(1, 0.1);
 y ~ normal(apha + x * beta , siga);

我们将拟合该模型并将其与使用均匀先验的均值估计进行比较。

stan(stn_oel)



plot(y ~ x)

图 5. 北半球海冰范围随时间的变化(Stan 线性模型拟合)。

7aec0862f5beb0ab349d611a90e1b754.png

后验预测发生了什么变化?模型是否更好地拟合数据?为什么模型拟合发生了变化?通过制作非常窄的先验分布,我们的模型改变了什么?


点击标题查阅往期内容

998d58569be66d34ce25575926b0ac26.jpeg

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

outside_default.png

左右滑动查看更多

outside_default.png

01

697bc7674f7dc35b989a61f1b21485b0.png

02

b38bfbd8b2bb7f3b8584ac6fe709aa7f.png

03

a75d4917c97fdcf4e383dca2c3cb8023.png

04

d307dc9108b00c7dc994eb5dbce5e46a.png

尝试自己将先验更改为一些不同的数字,看看会发生什么,这是贝叶斯建模中的一个常见问题,如果您的先验分布非常窄,但不符合您对系统或数据分布的理解,您可以运行无法有意义地解释数据变化的模型。然而,这并不是说您不应该选择一些信息丰富的先验,您确实希望使用先前的分析和对您的研究系统的理解来告知您的模型先验和设计。您只需要仔细考虑您做出的每个建模决策!

6. 收敛诊断

在继续之前,我们应该再次检查模型参数的 Rhat 值、有效样本大小 ( n_eff) 和跟踪图,以确保模型已收敛且可靠。

n_f 是有效样本大小的粗略度量。通常只需要担心这个数字小于迭代次数的 1/100 或 1/1000。

对于跟踪图,我们可以直接从后验查看它们:

plot(alpha, type = "l")
plot(beta, type = "l")
plot(sigma, type = "l")

3482d9a1401cca3df2aae30c5111d1ac.png图 6. alpha 的迹线图,截距。

对于更简单的模型,收敛通常不是问题,除非您的代码中有错误,或者运行采样器的迭代次数太少。

收敛性差

尝试仅运行 50 次迭代的模型并检查跟踪图。

fid <- stan( iter = 50)

这在预热后也有一些“转换”,表明模型指定错误,或者采样器未能完全采样后验。

plot(alpha, type = "l")
plot(beta, type = "l")
plot(sigma, type = "l")

b5c224870c0033431488d0735682dc2c.png图 7. alpha 的错误轨迹图,截距。

参数汇总

我们也可以直接通过后验得到参数的汇总。让我们还绘制非贝叶斯线性模型值,以确保我们的模型运行正确

par(mfrow = c(1,3))

plot(dnsty(alpha)

877b29b81d32cacf226ea10c83458399.png图 8.Stan 模型拟合的密度图分布 与一般lm 拟合的估计值比较 。

从后验我们可以直接计算任何参数超过或低于某个感兴趣值的概率。

beta > 0 的概率:

sum(beta>0)/lenth(beta)
# 0

beta > 0.2 的概率:

sum(bea>0.2)/legth(beta)
# 0

诊断图 rstan

虽然我们可以直接使用后验,但 rstan 内置了许多有用的功能。

plot(fit)

2237203f9893fc5766e102073052979b.png图 9.Stan 模型不同链的跟踪图 。

我们还可以查看后验密度和直方图。

dens(it)
hist(ft)

5c9d8f2f209c6798e87b82cbe685341d.png

e965a78ff9ceaa55d958bb5e8987f6a9.png图 10.Stan 模型中截距、斜率和残差方差的后验密度图和直方图 。

我们可以生成指示平均参数估计值和我们可能感兴趣的任何置信区间的图。请注意,beta 和 sigma 参数的 95% 置信区间 非常小,因此您只能看到点。根据您自己数据的差异,当您进行自己的分析时,您可能会看到更小或更大的置信区间。

plot(fit)

9763fcd140400f84beff008742c6e5af.png图 11.Stan 模型的参数估计 。

后验预测检查

对于预测和作为模型诊断的另一种形式, Stan 可以使用随机数生成器在每次迭代中为每个数据点生成预测值。通过这种方式,我们可以生成预测,这些预测也代表了我们模型和数据生成过程中的不确定性。可用于获取我们想要的关于后验的任何其他信息,或对新数据进行预测。

参数

 real alpha; // 截距
 real beta; // 斜率(回归系数)




 y ~ nomal(x * eta + alpa, sgma);



产生的数量 


 for (n in 1:N) {
 yp\[n\] = normlrg(x\[n\] * bta + apha, sima) 。
 }

请注意,GQ(生成量)块不支持矢量化,因此我们必须将其放入循环中。但是由于它被编译为 C++,循环实际上非常快,并且 Stan 每次迭代只评估一次 GQ 块,因此它不会为您的采样增加太多时间。通常,数据生成函数将是您在模型块中使用的分布,但带有 _rng 后缀。

stan(modl2GQ, data , ier = 1000, hans = 4, cres = 2, tin = 1)

y_rep 从后验中提取 值。

处理y_rep 值有很多选择 。

每一行都是模型的一次迭代(单一后验估计)。

我们可以制作一些更漂亮的图。这个包是ggplot2。

在200次后验抽样中,比较y的密度和y的密度。

poy(y, yrep\[1:200, \])

42e813de09432e9108790f37b79f371f.png图 12. 比较随机后验抽取的估计值。

在这里,我们看到数据(深蓝色)与我们的后验预测非常吻合。

我们还可以使用它来比较汇总统计的估计值。

pp(y = y, yep = yrep, tat = "mean")

ea1389ec721694881f73e65b6e394f35.png

图 13. 比较汇总统计的估计值。

我们可以更改传递给 stat 函数的函数,甚至可以自己编写!

我们可以调查每个数据点的平均后验预测与每个数据点的观察值(默认线为 1:1)

scttrg(y = y, yrp = yrep)

319a2b9da6d585ff47c6e0710840fa0f.png图 14. 每个数据点的平均后验预测与每个数据点的观测值。

所以现在您已经学习了如何运行线性模型 Stan 并检查模型收敛性。

如有任何问题,请联系我们!


f4f1a4d54a97f7423a06acaa0f06b19d.png

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性》。

6c21019fc2fa826ddb9d0a5bcc778781.jpeg

6e8ac9c0b8e81c2f9acb40277a453908.png

点击标题查阅往期内容

R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例

R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

Python贝叶斯回归分析住房负担能力数据集

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

Python用PyMC3实现贝叶斯线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言贝叶斯线性回归和多元线性回归构建工资预测模型

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言stan进行基于贝叶斯推断的回归模型

R语言中RStan贝叶斯层次模型分析示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

75d7999e14a323a9627f053c5d0a1c48.png

f184c72590138b69794473f841ce27a5.jpeg

086f17eaea5c72638b3d3a89be06e722.png

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

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

相关文章

Flask狼书笔记 | 06_电子邮件

文章目录 6 电子邮件6.1 使用Flask-Mail发送6.2 使用事务邮件服务SendGrid6.3 电子邮件进阶6.4 小结 6 电子邮件 Web中&#xff0c;我们常在用户注册账户时发送确认邮件&#xff0c;或是推送信息。邮件必要的字段包含发信方(sender)&#xff0c;收信方(to)&#xff0c;邮件主题…

Miniconda3环境迁移

问题&#xff1a; conda之前安装的默认路径空间满了没法进行安装&#xff0c;为此将其进行迁移&#xff0c;但是迁移之后报错 bash: /data/anaconda3/bin/conda: /home/anaconda3/bin/python: 坏的解释器: 没有那个文件或目录解决方案&#xff1a; 1、修改~/.bashrc中的环境…

用通俗易懂的方式讲解大模型分布式训练并行技术:数据并行

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

【多尺度双域引导网络:Pan-sharpening】

Multi-Scale Dual-Domain Guidance Network for Pan-sharpening &#xff08;用于泛锐化的多尺度双域引导网络&#xff09; 全色锐化的目标是在纹理丰富的全色图像的指导下&#xff0c;通过超分辨低空间分辨率多光谱图像&#xff08;LRMS&#xff09;的对应物产生高空间分辨率…

Dedecms最新版--0day分享分析(二)

前言 接上一篇的Tricks&#xff0c;既然利用远程文件下载方式成为了实现RCE的最好方法&#xff0c;毕竟在执行的时候没有恶意shell文件&#xff0c;恶意木马被存放于远端服务器&#xff0c;那么下文的day就是对远程恶意文件的利用。 环境 下载最新版本&#xff1a; https://…

前端项目启动时报错:Use // eslint-disable-next-line to ignore the next line

前端项目启动时报错&#xff1a;Use // eslint-disable-next-line to ignore the next line 首先说一下这个问题产生的原因&#xff1a; 项目创建时设置了使用 eslint 进行代码规范检查。 解决办法&#xff1a; 找到webpack.base.conf.js文件&#xff0c;并且将下满这行代码…

在 linux 虚拟机上安装配置 hive

目录 一 下载hive 安装包 二 解压 hive 并配置环境变量 三 配置hive 的配置文件 四 更新 guava 五 hive初始化 六 开启远程连接 七 使用datagrip 连接 hive 一 下载hive 安装包 百度网盘资源如下&#xff1a; 链接: https://pan.baidu.com/s/18jF-Qri0hc52_rtL61O0YQ?…

常见的CSS兼容问题和解决方案

今天就来聊聊在为了您更好的体验&#xff0c;本文章聊聊如何仅支持谷歌浏览器访问查看页 前端开发经常需要检查浏览器的兼容性&#xff0c;这里推荐(Can I Use)这个查询网站。它是一个针对前端开发人员定制的一个查询CSS、JS、HTML5、SVG在主流浏览器中特性和兼容性的网站&…

RabbtiMQ的安装与使用

一、安装Erlang与Rabbitmq 安装教程本教程是在centos8下试验的&#xff0c;其实linux系统的都差不多RabbitMQ官方&#xff1a;Messaging that just works — RabbitMQRabbitMQ是开源AMQP实现&#xff0c;服务器端用Erlang语言编写&#xff0c;Python、Ruby、 NET、Java、JMS、c…

axios返回几种数据格式? 其中Blob返回时的size是什么意思?

axios返回几种数据格式? 其中Blob返回时的size是什么意思&#xff1f; 1、字符串&#xff08;String&#xff09;&#xff1a;服务器可以返回纯文本或HTML内容&#xff0c;Axios会将其作为字符串返回。 2、JSON&#xff08;JavaScript Object Notation&#xff09;&#xff…

C语言入门 Day_14 for循环

前言 我们定义了一个数组以后&#xff0c;要使用&#xff08;读取或者修改&#xff09;数组元素的话&#xff0c;可以一个一个的读取&#xff0c;就前两课学的那样&#xff0c;代码类似这个结构。 int number_list[5]{1,2,3,4,5}; printf("%d\n",number_list[0]); …

【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】HAL移植

一、环境介绍 RK3588主板搭载Android12操作系统,内核是Linux5.10,使用ST的六轴传感器LSM6DSR芯片。 二、芯片介绍 LSM6DSR是一款加速度和角速度(陀螺仪)六轴传感器,还内置了一个温度传感器。该芯片可以选择I2C,SPI通讯,还有可编程终端,可以后置摄像头等设备,功能是很…

第二章 Linux多进程开发 2.24-2.31 信号集及相关函数 共享内存 守护进程

有时间需要重新回顾 2.24 信号集及相关函数 1.用户通过键盘 Ctrl C, 产生2号信号SIGINT (信号被创建) 2.信号产生但是没有被处理 &#xff08;未决&#xff09; - 在内核中将所有的没有被处理的信号存储在一个集合中 &#xff08;未决信号集&#xff09; - SIGINT信号状态被…

第 3 章 栈和队列 (利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径))

1. 背景说明 广度优先通俗的解释的是将当前所有能走的步骤全部走完并保存在队列中&#xff0c;又称为层序遍历&#xff0c;此外&#xff0c;该方法类似于多条路线并发前进&#xff0c; 哪一条先到就取哪条路线作为结果并终止查询&#xff0c;因此能够得到最短路径&#xff0c;…

【JavaEE】_HTML

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

镜像的基本命令(docker)

文章目录 前言一、docker命令介绍1、帮助命令2、显示镜像3、搜索镜像4、下载镜像5、删除镜像 总结 前言 本文主要介绍docker中与镜像相关的一些命令&#xff0c;是对狂神课程的一些总结&#xff0c;作为一个手册帮助博主和使用docker的同学们来查找和回忆。 实验环境&#xf…

【Java 基础篇】深入理解 Java 中的抽象类:提高代码可维护性与扩展性

抽象类&#xff08;Abstract Class&#xff09;是 Java 面向对象编程中的一个重要概念。它允许我们定义一组抽象方法&#xff0c;这些方法可以被子类&#xff08;类&#xff09;实现。抽象类通常用于定义一些通用的方法和属性&#xff0c;但不能被实例化。本篇博客将深入探讨 J…

Java反序列化漏洞复现(weblogic和s2)

文章目录 weblogic启动环境漏洞扫描漏洞复现 S2-045启动环境漏洞复现 前提条件&#xff1a; 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub weblogic 启动环境 到下面路径下…

Mac13.4 (22F66)钥匙串无法导出.p12证书解决方案

最近更新了Mac 13.4系统之后&#xff0c;开发苹果APP项目时突然发现无法导出.p12证书 这情况解决方案如下方案 在钥匙串访问的上方&#xff0c;有一栏类型筛选&#xff0c;默认选中的是 “所有项目”&#xff0c;将选项切换至“证书” 切换到“证书”后&#xff0c;右键点击需要…

Ae 效果:CC Vector Blur

模糊和锐化/CC Vector Blur Blur & Sharpen/CC Vector Blur CC Vector Blur&#xff08;CC 向量模糊&#xff09;使用源图像&#xff08;图层自身或指定的向量映射图层&#xff09;的亮度差异或其他选择的属性&#xff08;如红通道、绿通道、蓝通道等&#xff09;来生成一个…