我正在通过书本学习贝叶斯推理Bayesian Analysis with Python。但是,在使用时plot_ppc,我收到AttributeError了警告
/usr/local/Caskroom/miniconda/base/envs/kaggle/lib/python3.9/site-packages/pymc3/sampling.py:1689:UserWarning:样本参数小于 nchains 乘以 ndraws,一些绘制和/或链可能不会在返回的后验预测样本中表示\nwarnings.warn(
\n模型是
\nshift = pd.read_csv(\'../data/chemical_shifts.csv\')\n\nwith pm.Model() as model_g:\n \xce\xbc = pm.Uniform(\'\xce\xbc\', lower=40, upper=70)\n \xcf\x83 = pm.HalfNormal(\'\xcf\x83\', sd=10)\n y = pm.Normal(\'y\', mu=\xce\xbc, sd=\xcf\x83, observed=shift)\n trace_g = pm.sample(1000, return_inferencedata=True)\nRun Code Online (Sandbox Code Playgroud)\n如果我使用以下代码
\nwith model_g:\n y_pred_g = pm.sample_posterior_predictive(trace_g, 100, random_seed=123)\n data_ppc = az.from_pymc3(trace_g.posterior, posterior_predictive=y_pred_g) # \'Dataset\' object has no attribute \'report\'\nRun Code Online (Sandbox Code Playgroud)\n我得到“数据集”对象没有属性“报告”。
\n如果我使用以下代码
\nwith model_g:\n y_pred_g = pm.sample_posterior_predictive(trace_g, 100, random_seed=123)\n data_ppc = az.from_pymc3(trace_g, posterior_predictive=y_pred_g) …Run Code Online (Sandbox Code Playgroud) 谁能给我一个贝叶斯网络和模糊逻辑用于入侵检测的例子?
我正在努力弄清楚如何使用它.还有任何代码吗?
多谢你们.
matlab bayesian bayesian-networks fuzzy-logic neural-network
好吧,我只是重写我的代码.现在的问题是当我编译它时,我得到"节点a的多重定义"的错误.有谁知道我的代码有什么问题.我为模型创建了变量a,b和c,没有很多常量.
model{
for(i in 1:n){
a <- (k[1] + step(s1[i]-.9)*k[2] + step(s1[i]*.5-.9)*k[3])
b <- (r[1] + step(s2[i]-.9)*r[2] + step(s2[i]*.5-.9)*r[3])
c <- (s[1] + step(s3[i]-.9)*s[2] + step(s3[i]*.5-.9)*s[3])
dummy[i] <- 0
dummy[i] ~ dloglik(logLike[i])
# This is the log transformation of the 3-variate poisson
logLike[i] <- -theta12[i] + a*log(theta12[i]) - logfact(a) -theta13[i] - b*log(theta13[i]) - logfact(b)-theta23[i] - c*log(theta23[i]) - logfact(c)-theta1[i] + (y1[i]-a-b)*log(theta1[i]) + logfact(y1[i]-a-b)-theta2[i] + (y2[i]-a-c)*log(theta2[i]) + logfact(y2[i]-a-c)-theta3[i] + (y3[i]-b-c)*log(theta3[i]) + logfact(y3[i]-b-c)
log(theta1[i]) <- alpha1 + beta1*log(L[i])
log(theta2[i]) <- alpha2 …Run Code Online (Sandbox Code Playgroud) binomial <- function(nmax = 100,
thr = 0.95,
alpha = 1,
beta = 1,
p_true = 0.5,
p_0 = 0.5){
for(j in seq.int(nmax, 0)){
if(pbeta(q = p_0, shape1 = alpha + j, shape2 = beta + nmax - j, lower.tail = FALSE) < thr){
targetatnmax <- j + 1
} else {
print(
break
}
}
result <- list(Success = Success, targeratnmax = targetatnmax)
return(result)
}
res = binomial(nmax,thr,alpha,beta,p_true,p_0)
res
Run Code Online (Sandbox Code Playgroud)
在我的计划中,我试图找到超过0.95 thr所需的成功次数.我试图使用if循环使用if else语句,但是当我运行它时,我没有得到我需要的值.我知道我的价值应该是59,但我似乎无法得到这个.我知道这些代码看起来非常混乱,但这只是因为我已经玩了好几个小时了.请任何帮助
我有一张二进制结果计数表,我想拟合一个β二项式分布来估计$ \ alpha $和$ \ beta $参数,但是当我尝试以我的方式拟合/采样模型分布时却出错了针对其他情况:
import pymc3 as pm
import pandas as pd
df = pd.read_csv('~/data.csv', low_memory=False)
df = df[df.Clicks >= 0]
C0=df.C.values
I0=df.N.values
N0 = C0 + I0
with pm.Model() as model:
C=pm.constant(C0)
I=pm.constant(I0)
C1=pm.constant(C0 + 1)
I1=pm.constant(I0 + 1)
N=pm.constant(N0)
alpha = pm.Exponential('alpha', 1/(C0.sum()+1))
beta = pm.Exponential('beta', 1/(I0.sum()+1))
obs = pm.BetaBinomial('obs', alpha, beta, N, observed=C0)
with model:
advi_fit = pm.variational.advi(n=int(1e4))
trace1 = pm.variational.sample_vp(advi_fit, draws=int(1e4))
pm.traceplot(trace1[::10])
with model:
step = pm.NUTS()
#step = pm.Metropolis() # <== same …Run Code Online (Sandbox Code Playgroud) bayesian ×5
pymc3 ×2
python ×2
arviz ×1
data-science ×1
fuzzy-logic ×1
if-statement ×1
matlab ×1
poisson ×1
pymc ×1
r ×1
winbugs ×1
winbugs14 ×1