【R】基于R實現貝葉斯分析(一)

文章目錄

  • 貝葉斯簡介
  • Why R
  • 理論基礎
  • 一、三種先驗分布和對應后驗的計算
    • 1. 離散先驗
    • 2.Beta先驗(共軛先驗)
    • 3. 直方圖先驗
  • 二. 后驗抽樣
    • 1. 網格點采樣法
    • 2. 其他方法
  • 三、貝葉斯推斷
    • 1. 參數估計
      • (1) 后驗均值
      • (2) 后驗方差
      • (3) 后驗區間
    • 2. 假設檢驗
    • 3. 預測
      • (1) 先驗預測
      • (2) 后驗預測


貝葉斯簡介

貝葉斯學派和頻率學派的核心區別:用信念度而不是長期頻率來衡量某件事發生的概率,這個信念度可能會隨著新信息的加入而發生變化。貝葉斯的三個核心概念:

  • 先驗概率(prior):在沒有進行任何嘗試時一個人對某件事的信念,例如人群中X病毒攜帶率為3%;
  • 似然(likelihood):觀測到的數據,例如A檢測結果為陽性;
  • 后驗(posterior):通過觀測到的數據對某件事的信念進行修正,例如A攜帶X病毒的概率為75%。

貝葉斯法則:根據數據更新你關于模型的概率的公式
𝑃 ( M O D E L ∣ D A T A ) ∝ 𝑃 ( M O D E L ) × 𝑃 ( D A T A ∣ M O D E L ) 𝑃 (MODEL ∣ DATA) ∝ 𝑃 (MODEL) × 𝑃 (DATA ∣ MODEL) P(MODELDATA)P(MODEL)×P(DATAMODEL)


Why R

眾多貝葉斯計算引擎都可以在R中直接調用。

貝葉斯計算引擎:
貝葉斯引擎是用于貝葉斯統計建模和推斷的工具,這些引擎能幫助用戶構建復雜的概率模型,并利用馬爾可夫鏈蒙特卡羅(MCMC)等方法進行推斷。

  • BUGS
  • WinBUGS/OpenBUGS
  • JAGS(后續會更新相關文章專門介紹JAGS)
  • Stan

用于貝葉斯分析/計算的R包:

  1. MCMCpack: 包含針對常用模型的 MCMC 算法,通常在社會和行為科學中使用
  2. coda: 包含一套用于收斂診斷和輸出分析的函數,可用于總結、繪圖和診斷 MCMC 樣本的收斂性
  3. rjags: 實現在 R 中完全交互式地使用JAGS的 R 包
  4. r2jags: 基于 rjags,但提供了更為簡便的接口,簡化了 JAGS 的調用流程
  5. runjags: 一個包含許多 JAGS 增強功能的 R 包,包括自定義 JAGS 模塊
  6. rstan: Stan 的 R 語言接口。它允許用戶方便地從 R 中擬合 Stan 模型并訪問輸出結果
  7. Nimble: 一個提供通用 MCMC 系統的 R 包,允許對用 BUGS/JAGS 模型語言編寫的模型進行自定義 MCMC。用戶可以選擇采樣器并編寫新的采樣器。模型和采樣器通過生成的C++ 代碼自動編譯以提高速度
  8. LaplacesDemon: 一個旨在提供完整貝葉斯環境的 R 包,包括眾多 MCMC算法、具有多個優化算法的拉普拉斯近似、大量示例、數十種額外的概率分布以及眾多 MCMC 診斷工具等

理論基礎

單參數貝葉斯模型:僅包含一個待估計參數的概率模型的R語言建模實現,一個直觀的例子:總體比例p的貝葉斯推斷,希望從樣本數據中得到p的點估計和區間估計(不確定性)。本文將從總體比例p估計問題出發,探討單參數貝葉斯建模過程。

貝葉斯分析的三步走:

  • 指定先驗分布
  • 寫出似然函數
  • 計算參數的后驗分布

上面三個步驟中,我們需要研究的問題:

  1. 先驗分布:如何合理表達先驗信念
  • 選擇什么先驗分布方便推導?(無信息先驗、層級先驗、共軛先驗等)
  1. 似然函數:如何用分布描述數據生成過程
  • 使用什么分布建模?(正態、二項、泊松等)
  1. 后驗分布:如何計算后驗分布和后驗預測
  • 是否能夠解析計算?(有共軛形式時可以解析;否則需數值方法如 MCMC)

對于總體比例估計問題,我們的似然函數就是二項分布,即獨立重復試驗中成功次數。若我們觀察到y 次成功,在 n 次試驗中: 𝑦 ~ B i n o m i a l ( 𝑛 , 𝑝 ) 𝑦~Binomial(𝑛,𝑝) yBinomial(n,p),其似然函數為:
𝐿 ( 𝑝 ) = 𝑃 ( 𝑦 ∣ 𝑝 ) = ( 𝑛 , 𝑦 ) 𝑝 𝑦 ( 1 ? 𝑝 ) 𝑛 ? 𝑦 𝐿(𝑝)=𝑃(𝑦∣𝑝)=(𝑛,𝑦)𝑝^𝑦 (1?𝑝)^{𝑛?𝑦} L(p)=P(yp)=(n,y)py(1?p)n?y

貝葉斯模型
𝑝 ( 𝜃 , 𝑦 ) = 𝜋 ( 𝜃 ) 𝑝 ( 𝑦 ∣ 𝜃 ) 𝑝(𝜃, 𝑦) = 𝜋(𝜃)𝑝(𝑦|𝜃) p(𝜃,y)=𝜋(𝜃)p(y∣𝜃)

  • 𝜋 ( 𝜃 ) 𝜋(𝜃) 𝜋(𝜃)是先驗分布
  • 𝑝 ( 𝑦 ∣ 𝜃 ) 𝑝(𝑦|𝜃) p(y∣𝜃)是似然函數
  • 貝葉斯模型即𝜃和y的聯合分布 𝑝 ( 𝜃 , 𝑦 ) 𝑝(𝜃, 𝑦) p(𝜃,y)

我們關心的是參數的后驗分布 𝜋 ( 𝜃 ∣ 𝑦 ) 𝜋(𝜃 ∣ 𝑦) 𝜋(𝜃y),它可以由貝葉斯公式計算出:
𝜋 ( 𝜃 ∣ 𝑦 ) = 𝑝 ( 𝜃 , 𝑦 ) / 𝑝 ( 𝑦 ) = 𝜋 ( 𝜃 ) 𝑝 ( 𝑦 ∣ 𝜃 ) / 𝑝 ( 𝑦 ) 𝜋(𝜃 ∣ 𝑦) = 𝑝(𝜃, 𝑦)/𝑝(𝑦) =𝜋(𝜃)𝑝(𝑦 ∣ 𝜃)/𝑝(𝑦) 𝜋(𝜃y)=p(𝜃,y)/p(y)=𝜋(𝜃)p(y𝜃)/p(y)
其中𝑝(𝑦) 不依賴于𝜃,當給定觀測數據時可視作常數,從而可以看作是一個歸一化常數,用于將𝜋(𝜃 ∣ 𝑦)化成有效的概率密度函數。


一、三種先驗分布和對應后驗的計算

構建先驗分布的常見方法是假設先驗分布屬于特定的參數密度函數族。然后選擇先驗分布的參數(稱為超參數 hyper parameters),使先驗分布盡可能地表示先驗信念。

在研究總體概率p時,有三種典型先驗:1. 離散先驗;2. Beta先驗(共軛先驗);3. 直方圖先驗。本文下面將詳細講解這三種先驗以及對應后驗的計算。

1. 離散先驗

假設𝑝只能取有限個值(如 0.1, 0.2, …, 0.9),我們給這些值一個先驗概率分布: P ( p = p i ) = w i P(p=p_i)=w_i P(p=pi?)=wi? w i w_i wi?求和為1。

離散先驗分布:

p = seq(0.05, 0.95, by = 0.1)
prior = c(1, 5.2, 8, 7.2, 4.6, 2.1, 0.7, 0.1, 0, 0)
prior = prior/sum(prior)
plot(p, prior, type = "h", ylab="Prior Probability")
  • p為概率值向量
  • prior為p對應的先驗概率向量,歸一化處理
  • type = "h"為直方圖選項,用于繪制概率質量函數(pmf)

輸出:
在這里插入圖片描述

已知觀測數據后計算后驗分布:

library(LearnBayes)
data = c(11, 16)
post = pdisc(p, prior, data)
round(cbind(p, prior, post),2)
  • data為觀測數據:11次成功,16次失敗
  • pdisc用于計算離散先驗下的后驗概率,三個參數分別是概率點向量、先驗概率、觀測數據

輸出:
請添加圖片描述

對比先驗和后驗:

library(lattice)
PRIOR=data.frame("prior",p,prior)
POST=data.frame("posterior",p,post)
names(PRIOR)=c("Type","P","Probability")
names(POST)=c("Type","P","Probability")
data=rbind(PRIOR,POST)
xyplot(Probability~P|Type,data=data, layout=c(1,2), type="h", lwd=3,col="black")
  • data.frame用于創建一個三列的數據框,names用于給數據框命名
    rbind表示將兩個數據框按行合并
    xyplot是lattice包的核心函數,用于繪制散點圖或線圖,這里Probability~P|Type表示縱軸為Probability,橫軸為P ,按照Type分面板繪制

輸出:
在這里插入圖片描述

2.Beta先驗(共軛先驗)

請添加圖片描述

從上圖介紹我們可以得到為什么要選擇Beta先驗:它和似然函數(二項分布)有相同形式的密度函數,這樣似然*先驗得到的后驗還是這個形式。

問題:如何確定Beta分布的兩個參數?

  • 策略1: 畫出來好多條密度函數,找一條滿足期望的
  • 策略2: 根據想要的均值/樣本量確定
    - B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β)分布的均值為 α / ( α + β ) \alpha/(\alpha+\beta) α/(α+β)
    - B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β)分布的等效先驗樣本量為 α + β ? 2 \alpha+\beta-2 α+β?2(其中 α ? 1 \alpha-1 α?1次成功, β ? 1 \beta-1 β?1次失敗)

在R中可以用LearnBayes包中的beta.select()函數找到與先驗知識(對分位數的認知)匹配的兩個超參數。

quantile1=list(p=.5,x=.3) # 中位數
quantile2=list(p=.9,x=.5) # 90%分位數
beta.select(quantile1,quantile2)

輸出:
[1] 3.26 7.19

  • 先驗信息:研究者認為比例 𝑝 的中位數為 0.3,90% 分位數為 0.5
  • 選出的 α = 3.26 \alpha=3.26 α=3.26 β = 7.19 \beta=7.19 β=7.19

假設我們選出了一個合適的先驗 B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β),觀測 n n n次中有 y y y次成功,就可以用貝葉斯公式求出后驗:
π ∝ p y ( 1 ? p ) n ? y p α ? 1 ( 1 ? p ) β ? 1 = p α + y ? 1 ( 1 ? p ) β + n ? y ? 1 \pi ∝ p^y(1-p)^{n-y}p^{\alpha-1}(1-p)^{\beta-1}=p^{\alpha+y-1}(1-p)^{\beta+n-y-1} πpy(1?p)n?ypα?1(1?p)β?1=pα+y?1(1?p)β+n?y?1

這是 B e t a ( α + y , β + n ? y ) Beta(\alpha+y,\beta+n-y) Beta(α+y,β+n?y)的核,這就是共軛性的含義:先驗分布和后驗分布來自同一種分布類型

3. 直方圖先驗

就是每個區間內指定一個先驗概率:

midpt = seq(0.05, 0.95, by = 0.1) # 按照0.1的間隔劃分0.05到0.95的區間
prior = c(1, 5.2, 8, 7.2, 4.6, 2.1, 0.7, 0.1, 0, 0) # 每個區間的先驗概率
prior = prior/sum(prior) # 歸一化
curve(histprior(x,midpt,prior),from=0, to=1,ylab="Prior density",ylim=c(0,.3))

輸出:
在這里插入圖片描述
計算后驗分布一樣,乘上似然函數的等價beta分布表示:

curve(histprior(x,midpt,prior) * dbeta(x,s+1,f+1),from=0, to=1,ylab="Posterior density")

輸出:
在這里插入圖片描述


二. 后驗抽樣

后驗抽樣是指在獲取參數后驗分布后,從后驗分布中采樣參數,進而用于后續貝葉斯推斷。

1. 網格點采樣法

網格點采樣法,也稱為網格近似法 (Grid Approximation),是一種通過在參數空間中定義一個離散的網格,然后計算每個網格點上的未歸一化后驗概率(即似然函數值乘以先驗概率密度值)來近似后驗分布的方法。一旦計算出這些概率,就可以將它們歸一化,使其總和為 1,從而得到一個離散化的后驗概率分布,從這個離散分布中抽取樣本。

p = seq(0, 1, length=500) # 網格點,500個0到1之間均勻的數值點
post = histprior(p, midpt, prior)*dbeta(p, s+1, f+1) # 以直方圖先驗為例,計算每個網格點的后驗概率
post = post/sum(post) # 后驗概率歸一化
ps = sample(p, 5000, replace = TRUE,prob = post) # 從post分布沖抽取5000個樣本
hist(ps, breaks= 30, xlab="p",main="")

輸出:
在這里插入圖片描述

2. 其他方法

后續會專門寫一篇文章講各種MCMC方法。


三、貝葉斯推斷

通過確定先驗分布后得到的后驗分布包含了關于未知參數的所有當前信息,所有貝葉斯推斷都基于后驗分布,包括:

  1. 參數估計
    • 點估計:后驗均值 (posterior mean)、眾數 (posterior mode / MAP)、中位數 (posterior median)
    • 離散程度:后驗方差
    • 可信區間(credible interval):后驗分位數
  2. 假設檢驗:后驗概率
  3. 預測:估計潛在可觀測但當前未觀測的量
  4. 模型選擇/變量選擇:Bayes factor,DIC

1. 參數估計

(1) 后驗均值

后驗分布的均值常用作 p p p點估計, B e t a ( α + y , β + n ? y ) Beta(\alpha+y,\beta+n-y) Beta(α+y,β+n?y)的均值為 α + y / α + β + n {\alpha+y}/{\alpha+\beta+n} α+y/α+β+n

(2) 后驗方差

后驗方差是后驗分布離散程度的一種度量,后驗方差越大,我們對參數的不確定性就越大。

B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β)的方差為: α β / ( α + β ) 2 ( α + β + 1 ) \alpha\beta/(\alpha+\beta)^2(\alpha+\beta+1) αβ/(α+β)2(α+β+1)

對于 B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β)先驗和二項似然(n 次試驗中有 y 次成功),后驗分布為 B e t a ( α + y , β + n ? y ) Beta(\alpha+y,\beta+n-y) Beta(α+y,β+n?y),從而后驗方差為 ( α + y ) ( β + n ? y ) / ( α + β + n ) 2 ( α + β + n + 1 ) (\alpha+y)(\beta+n-y)/(\alpha+\beta+n)^2(\alpha+\beta+n+1) (α+y)(β+n?y)/(α+β+n)2(α+β+n+1)

注意:對于均勻先驗和二項似然,后驗方差(幾乎)總是小于先驗方差

(3) 后驗區間

兩種類型的可信區間:

  1. 等尾可信區間(equal-tail credible interval):

100(1 ? α)% 的等尾可信區間是從后驗分布的 α/2 分位數到 (1 ? α/2) 分位數的區間,若要構建 95% 的等尾可信區間,我們需要計算后驗分布的 0.025 和 0.975 分位數。

例如,求后驗均值的95%置信區間有兩種方法,一是直接根據beta分布來計算:

a = 3.26; b = 7.19 # 選出的先驗參數
s = 11; f = 16 # 觀測數據(似然)
qbeta(c(0.05, 0.95), a + s, b + f)

輸出:[1] 0.2555267 0.5133608

二是用模擬的方法:

ps = rbeta(1000, a + s, b + f)
quantile(ps, c(0.05, 0.95))

輸出:5% 95%
0.2490099 0.5152768

  • beta表示從beta分布中生成指定個隨機數,
  • 這里生成了1000個樣本,然后計算樣本的0.05和0.95分位數

對于貝葉斯學派,95% 可信區間的解釋是:觀察到觀測數據后,真實參數 p 落在該區間內的概率為 0.95

  1. 最高后驗密度區間(highest posterior density, HPD):

區間內任意點的密度大于區間外任意點的密度,在包含指定概率的所有區間中長度最短(有時稱為最小長度可信區間)。

當后驗分布高度偏斜或多峰時,優于等尾可信區間

計算可以使用 TeachingDemos 包中的 R 函數hpd()emp.hpd()

2. 假設檢驗

假設我們要檢驗關于參數 p 的以下假設:
H 0 : p ≤ 0.10 v . s H 1 : p > 0.10 H0 : p ≤ 0.10 \ \ \ \ v.s \ \ \ \ H1 : p > 0.10 H0:p0.10????v.s????H1:p>0.10
我們只需計算后驗分布在這兩個區間上的概率,使用R函數 pbeta即可。

3. 預測

(1) 先驗預測

請添加圖片描述
以離散先驗為例:

library(LearnBayes)
p = seq(0.05, 0.95, by=.1)
prior = c(1, 5.2, 8, 7.2, 4.6, 2.1, 0.8, 0.3, 0.1, 0.05)
prior = prior/sum(prior)
ns = 20
ys = 0:20
pred = pdiscp(p, prior, ns, ys)
round(cbind(0:20, pred), 3)
  • 前面都和第一部分的離散先驗一樣
  • ns表示未來樣本量,ys表示未來可能的成功個數(從0~20)
  • pdiscp用于計算離散先驗下的后驗預測分布,四個參數分別為概率點向量、先驗概率、未來樣本量、未來成功次數

輸出:
請添加圖片描述

(2) 后驗預測

以Beta先驗為例,有解析計算模擬兩種方法:
請添加圖片描述

  1. 解析計算:本質就是更新beta分布的兩個參數
library(LearnBayes)
ab = c(3.26, 7.19)
ns = 20; ys = 0:20
pred = pbetap(ab, ns, ys)
round(cbind(0:20, pred), 3)

輸出:
請添加圖片描述

  • pbetap函數計算 Beta 先驗下的后驗預測分布(Beta-Binomial 分布),三個參數分別是Beta先驗的參數向量、未來試驗次數、需要預測的成功次數

2.基于模擬:模擬的方法適合任何先驗分布,下例展示了beta先驗的后驗模擬

m = 1000
a = 3.26; b = 7.19 # 先驗Beta分布的參數
s = 11; f = 16
ns = 20
p = rbeta(m, a+s, b+f)
y = rbinom(m, ns, p)
freq = table(y) # 統計各成功次數y出現的頻次
ys = as.integer(names(freq)) # 提取成功次數(去重)
predprob = freq/sum(freq) # y的概率分布
# 成功概率分布的直方圖繪制
plot(ys, predprob, type="h", xlab="y",
ylab="Predictive Probability",
cex.lab=1, cex.axis=1.0)
# 解析解驗證
library(LearnBayes)
TruePred1 = pbetap(c(a+s,b+f), ns, ys) # beta-二項后驗分布的概率
points(ys, TruePred1, type="p", col='red')
  • rbeta從后驗分布中生成1000個p的隨機樣本
  • rbinom對每個采樣的 p,生成 ns=20 次試驗的成功次數 y

輸出:
在這里插入圖片描述
如果后驗是混合分布,那么后驗預測分布是一個連續混合分布或復合分布,下例中展示了用模擬的方法從混合正態分布0.3N(0, 1) + 0.7N(3, 1/2)中隨機抽樣:

n <- 10000; alpha <- 0.3
k <- sample(1:2, size = n, replace = T, prob=c(alpha, 1-alpha)) # 根據概率分到1組或2組
mu <- numeric(length(k)) 
sd <- numeric(length(k)) 
mu <- c(0,3)[k] # 根據k選擇均值(0或3)
sd <- c(1, 1/2)[k]# 根據k選擇方差(1或1/2)
x <- rnorm(n, mu, sd) # 生成混合樣本
hist(x, breaks='FD', prob=T, xlim=c(-4,6), ylim=c(0,0.8), main='Histogram of a mixture normal')
# 混合密度函數
p <- function(x,alpha){
alpha*dnorm(x, 0, 1)+(1-alpha)*dnorm(x, 3, 1/2)
}
curve(dnorm(x,0,1), col=4, lty=2, lwd=2, add=T) # N(0,1)
curve(dnorm(x,3,1/2), col=4, lty=4, lwd=2, add=T) # N(3,1/2)
curve(p(x,0.3), col=2, lty=1, lwd= 2, add=T) # 混合密度
legend("topleft", legend = c("N(0,1)","N(1,1/2)", "0.3N(0,1)+0.7N(1,1/2)"), cex=0.6, lty = c(2,4,1), col=c(4, 4, 2), lwd =c(2,2,2))

輸出:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909747.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文略讀:Personality Alignment of Large Language Models

ICLR 2025 558 當前的大語言模型&#xff08;LLMs&#xff09;在對齊時&#xff0c;通常旨在反映普遍的人類價值觀與行為模式&#xff0c;但卻常常無法捕捉到個體用戶的獨特特征與偏好。 為填補這一空白&#xff0c;本文提出了**“人格對齊&#xff08;Personality Alignment&…

JSON與XML怎么選?什么情況下會用到 JSON?

一、JSON 與 XML 的核心區別 從 語法、性能、適用場景 等維度對比&#xff0c;核心差異如下&#xff1a; 對比維度JSONXML語法結構鍵值對格式&#xff08;如 {"name": "無線耳機"}&#xff09;&#xff0c;無標簽&#xff0c;結構緊湊。標簽嵌套格式&…

PCB設計實踐(三十六)PCB設計新手系統性注意事項總結

以下是PCB設計的系統性注意事項總結&#xff0c;涵蓋布局、布線、電源/地處理、EMC、制造工藝及驗證等關鍵環節&#xff0c;依據行業規范與最佳實踐整理&#xff1a; 一、布局設計規范 器件優先級策略 先固定接口器件&#xff08;電源插座、連接器&#xff09;&#xff0c;鎖定…

LangChain中的向量數據庫抽象基類-VectorStore

文章目錄 前言一、原型定義二、常用說明1、添加或更新文檔2、添加或更新文本3、通過文檔初始化VectorStore對象4、通過文本初始化VectorStore對象5、獲得VectorStoreRetriever對象6、查詢最相似的文檔三、代碼解析1、add_documents方法2、add_texts方法3、from_documents方法4、…

5G光網絡新突破:<Light: Science Applications>報道可適應環境擾動的DRC實時校準技術

前言摘要 近日&#xff0c;國際頂尖光學期刊《Light: Science & Applications》刊登了一項來自中國國防科技大學研究團隊的重要成果。該團隊由姜天教授、張軍教授和郝浩教授領銜&#xff0c;成員包括嚴秋全、歐陽灝&#xff08;共同一作&#xff09;等研究人員。他們提出了…

C++:Hash拓展--布隆過濾器

布隆過濾器 問題前景: 之前學習了位圖&#xff0c;我們知道位圖在大量數據查找時候是很方便的。但位圖的缺陷在于只能用于整型數據。而在實際中&#xff0c;我們的數據更多的是更復雜的字符串或者自定義類型。那么此時位圖就顯得有點無力&#xff0c;所以就誕生了叫布隆過濾器…

快速了解JVM中的深堆與淺堆

在Java虛擬機&#xff08;JVM&#xff09;的內存管理世界里&#xff0c;深堆與淺堆是兩個重要的概念。它們如同衡量對象內存占用的兩把標尺&#xff0c;對于優化程序性能、排查內存泄漏問題起著關鍵作用。接下來&#xff0c;讓我們快速且深入地了解它們。 一、淺堆&#xff08…

開疆智能ModbusTCP轉Devicenet網關連接FANUC機器人配置案例

本案例是ModbusTCP主站通過開疆智能ModbusTCP轉Devicenet網關連接發那科機器人的配置案例&#xff0c;操作分為三個配置1&#xff1a;ModbusTCP主站配置2&#xff1a;ModbusTCP轉Devicenet網關配置3&#xff1a;FANUC機器人配置&#xff0c;具體過程如下 配置過程 主菜單—IO—…

詳解RabbitMQ高級特性之發送方確認機制

目錄 發送方確認 添加配置 常量類 聲明隊列和交換機并綁定二者關系 confirm確認模式 編寫生產消息代碼 生產消息1 解決方法 多次生產消息2 解決方法 生產消息3 return 模式 編寫生產消息代碼&#xff08;路由正確&#xff09; 生產消息1 編寫生產消息代碼&…

Google Play開發者賬號8.3/10.3政策違規自救指南

最近&#xff0c;有一位開發者焦急地向我們訴說&#xff0c;其辛苦開發的多個應用&#xff0c;毫無征兆地全部下架&#xff0c;賬戶提示違反政策 8.3 和 10.3。經過連夜排查&#xff0c;原來是換皮應用與誤導性描述導致的問題。 這并非個例&#xff0c;在 2024 年&#xff0c;G…

pythonday50

作業&#xff1a; 1.好好理解下resnet18的模型結構 2.嘗試對vgg16cbam進行微調策略 import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torchvision import models from torch.utils.d…

天貓618高增長背后:電商邁入價值戰新周期

作者 | 曾響鈴 文 | 響鈴說 這次618&#xff0c;來“真”的了。 天貓618玩法變得極致簡單&#xff0c;只設了“官方立減”的85折的基礎優惠&#xff0c;再疊加行業品類券、國補等優惠&#xff0c;最高立減可達50%&#xff0c;十分直觀。 讓消費者省心的結果也是顯而易見的&…

tauri+vue自動更新客戶端打包配置

拉取最新代碼打開項目根目錄下"~.tauri\myapp.key"文件并復制內容 打開項目的powershell窗口&#xff0c;輸入如下內容并回車 $env:TAURI_SIGNING_PRIVATE_KEY"復制的myapp.key" $env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD""然后修改tauri.conf.…

硬件------51單片機

一.基本概念 1.裸機程序 BSP BSP&#xff1a;bord suppord pack 板級支持包 就是程序編寫的內容是沒有操作系統的&#xff0c;直接通過代碼去控制寄存器&#xff0c;讓硬件按照要求去工作。 主要內容&#xff1a;51單片機 IMAX6ULL 2.linux驅動部分 在裸機BSP程序的基礎…

java 基礎方法 list分頁

新增一個list 泛型分類方法 hutools沒這個方法, mybatis 里面的方法不好用 故新增此方法 package com.common.base.util.page;import lombok.Data;import java.util.List;/*** className: VoPage* description: list分頁* author: chenyuanlong* date: 2025年6月16日 0016 上午…

操作系統期末復習--操作系統初識以及進程與線程

操作系統概念與主要功能 操作系統的概念 在信息化時代&#xff0c;軟件是計算機系統的靈魂&#xff0c;而作為軟件核心的操作系統&#xff0c;已與現代計算機系統密不可分、融為一體。計算機系統自下而上大致分為4部分&#xff1a;硬件、操作系統、應用程序和用戶 操作系統管…

使用jhat查看dump.hprof文件內具體對象的屬性值信息

jhat是JDK自帶的堆轉儲分析工具&#xff0c;可以用來查看.hprof文件中對象的具體內容。本文演示使用的是JKD8. 一、啟動jhat 執行啟動命令。 jhat -J-Xmx4g your_heap_dump.hprof -J-Xmx4g表示為jhat分配4GB內存&#xff0c;根據你自己情況調整大小。your_heap_dump.hprof是…

freeRTOS之隊列(queue)

一.概述 1.介紹 隊列(queue)可以用于"任務到任務"、“任務到中斷”、"中斷到任務"直接傳輸信息。 2.核心功能 線程安全&#xff1a;自動處理多任務訪問時的互斥問題。 數據復制&#xff1a;入隊時復制數據&#xff08;而非引用&#xff09;&#xff0c;…

【python】typing用法

一、基礎類型提示 1. 基本類型注解 # 變量類型注解 age: int 30 name: str "Alice" is_student: bool False height: float 1.752. 函數注解 def greet(name: str, age: int) -> str:return f"Hello {name}, you are {age} years old!"二、組合類…

web前端開發核心基礎:Html結構分析,head,body,不同標簽的作用

前端技術協同關系 協作流程&#xff1a;HTML構建頁面框架—>css美化樣式&#xff08;選擇器屬性&#xff09;—>JavaScript實現交互&#xff08;類似于python的腳本語言&#xff09;擴展基礎&#xff1a;在上面三項基礎上學習Vue\React、構建工具WePack和瀏覽器工作原理…