我正在使用黑客贝叶斯方法的线性回归示例,但无法将其扩展到我的用途。
我对一个随机变量进行了观察,对该随机变量进行了假设分布,最后对我观察到的该随机变量进行了另一个假设分布。a我如何尝试使用和上的中间分布对其进行建模b,但它抱怨Wrong number of dimensions: expected 0, got 1 with shape (788,).
为了描述实际模型,我预测一定数量 (n) 的培养电子邮件的转化率。我的先前观点是,转化率(由 和 上的 Beta 函数描述alpha)将通过某些因子 (0,inf]和beta进行更新alpha和缩放,这些因子从 n=0 的 1 开始,并在某个阈值处增加到最大值。betaab
# Generate predictive data, X and target data, Y
data = [
{'n': 0 , 'trials': 120, 'successes': 1},
{'n': 5 , 'trials': 111, 'successes': 2},
{'n': 10, 'trials': 78 , 'successes': 1},
{'n': 15, 'trials': 144, 'successes': 3},
{'n': …Run Code Online (Sandbox Code Playgroud) 我正在通过 rstanarm 开发一个贝叶斯回归模型,该模型将多项式、二项式和尺度因变量的尺度预测器结合起来。作为常规模型,我的模型如下所示:
````
*
deaths - scale
gender - binomial
hours - scale
time - multinomial (i.e., morning, night, afternoon)
*
lm(deaths ~ gender + hours + time)
Run Code Online (Sandbox Code Playgroud)
我试图通过 rstanarm 通过贝叶斯方法创建相同的模型,但是我对如何将不同的先验应用于每个预测变量感到困惑。
````
For example, lets say:
1. gender follows a beta prior
2. hours follows a normal prior
3. time follows a student_t
Run Code Online (Sandbox Code Playgroud)
我将如何实施这些信息?
感谢任何帮助,谢谢!
我正在使用 2 个分类变量构建二项式回归模型。这是来自《Statistical rethinking》一书中的一个例子。在书中,在使用 rethinking 包时,我们可以为每个分类变量设置先验,如下所示
m11.5 <- ulam(
alist(
pulled_left ~ dbinom( 1 , p ) ,
logit(p) <- a[actor] + b[treatment] ,
a[actor] ~ dnorm( 0 , 1.5 ),
b[treatment] ~ dnorm( 0 , 0.5 )
) ,
data=d , chains=4 , log_lik=TRUE )
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 brms 中做同样的事情。
priors <- c(prior(normal(0, 1.5), class = b, coef = "actor"),
prior(normal(0, 0.5), class = b, coef = "treatment"))
m11.5 <- brm(data = d, family = binomial,
formula = pulled_left | trials(1) …Run Code Online (Sandbox Code Playgroud) 我正在python/django建立一个网站,想要预测用户提交是否有效或者是垃圾邮件.
用户对其提交的内容具有接受率,如本网站所示.
用户可以审核其他用户的提交内容; 这些调节后来由管理员进行元模式化.
鉴于这种:
如何预测A的帖子被垃圾邮件的可能性?
编辑:我制作了一个模拟这种情况的python脚本:
#!/usr/bin/env python
import random
def submit(p):
"""Return 'ham' with (p*100)% probability"""
return 'ham' if random.random() < p else 'spam'
def moderate(p, ham_or_spam):
"""Moderate ham as ham and spam as spam with (p*100)% probability"""
if ham_or_spam == 'spam':
return 'spam' if random.random() < p else 'ham'
if ham_or_spam == 'ham':
return 'ham' if random.random() < p else 'spam'
NUMBER_OF_SUBMISSIONS = 100000
USER_A_HAM_RATIO = 0.6 # Will submit 60% ham
USER_B_PRECISION = …Run Code Online (Sandbox Code Playgroud) (let ((g (* 2 (or (gethash word good) 0)))
(b (or (gethash word bad) 0)))
(unless (< (+ g b) 5)
(max .01
(min .99 (float (/ (min 1 (/ b nbad))
(+ (min 1 (/ g ngood))
(min 1 (/ b nbad)))))))))
Run Code Online (Sandbox Code Playgroud) 我正在使用scikit-learn来查找文档的Tf-idf权重,然后使用朴素
贝叶斯分类器对文本进行分类.但是文档中所有单词的Tf-idf权重都是负数,除了少数.但据我所知,负值意味着不重要的术语.那么有必要将整个Tf-idf值传递给贝叶斯分类器吗?如果我们只需要通过其中的一小部分,我们该怎么做呢?与linearSVC相比,贝叶斯分类器有多好或多坏?除了使用Tf-idf之外,还有更好的方法在文本中查找标签吗?
谢谢
我已经和Weka一起工作了一段时间,在我的研究中,我发现很多代码示例都使用了测试和训练集.例如,通过Discretization和Bayesian Networks,他们的示例几乎总是使用测试和训练集来显示.我可能在这里缺少对数据处理的一些基本理解,但我不明白为什么这似乎总是如此.我在一个项目中使用Discretization和Bayesian Networks,对于他们两个,我没有使用测试或训练集,也不明白为什么我需要.我正在BayesNet上进行交叉验证,所以我正在测试它的准确性.我误解了测试和训练集用于什么?哦,请使用最简单的术语; 我对数据处理的世界还不是很有经验.
我对JAGS相当陌生,所以这可能是一个愚蠢的问题。我正在尝试在JAGS中运行一个模型,该模型预测一维随机游走过程将在越过边界B之前越过边界A的概率。可以通过以下逻辑模型来解析求解该模型:
Pr(A,B)= 1 /(1 + exp(-2 *(d / sigma)* theta))
其中“ d”是平均漂移率(正值表示向边界A的漂移),“ sigma”是该漂移率的标准偏差,“ theta”是起点和边界之间的距离(假定对于两个边界)。
我的数据集包含50个参与者,每个参与者提供1800个观察值。我的模型假设d由观察到的环境变量(我将其简称为“ x”)和将x与d相关的加权系数(我将其称为“ beta”)的特定组合确定。因此,存在三个参数:β,sigma和theta。我想为每个参与者估计一组参数。我的意图是最终运行一个层次模型,其中组级别参数会影响各个级别参数。但是,为简单起见,在这里我仅考虑一个模型,在该模型中,我为一个参与者估算一组参数(因此该模型不是分层的)。
我的模型rjags如下:
model{
for ( i in 1:Ntotal ) {
d[i] <- x[i] * beta
probA[i] <- 1/(1+exp(-2 * (d[i]/sigma) * theta ) )
y[i] ~ dbern(probA[i])
}
beta ~ dunif(-10,10)
sigma ~ dunif(0,10)
theta ~ dunif(0,10)
}
Run Code Online (Sandbox Code Playgroud)
该模型运行良好,但需要一段时间才能运行。我不确定JAGS是如何执行代码的,但是如果此代码在R中运行,则效率会非常低下,因为它将不得不遍历案例,分别为每种案例运行模型。因此,随着样本量的增加,运行分析所需的时间将迅速增加。我有一个相当大的样本,所以这是一个问题。
有没有一种方法可以对此代码进行矢量化处理,以便它可以一次计算所有数据点的似然性?例如,如果我将其作为简单的最大似然模型来运行。我将对模型进行矢量化处理,并针对参与者提供的所有1800种情况,在给定特定参数值的情况下计算数据的概率(因此不需要for循环)。然后,我将这些可能性的日志记录下来,并将它们全部加在一起,以便为参与者给出的所有观察结果提供一个对数可能性。这种方法可节省大量时间。有没有办法在JAGS中做到这一点?
编辑
感谢您的答复,并指出我显示的模型中的参数可能无法识别。我应该指出,该模型是简化版本。完整模型如下:
model{
for ( i in 1:Ntotal ) {
aExpectancy[i] <- 1/(1+exp(-gamma*(aTimeRemaining[i] - aDiscrepancy[i]*aExpectedLag[i]) ) )
bExpectancy[i] <- 1/(1+exp(-gamma*(bTimeRemaining[i] - bDiscrepancy[i]*bExpectedLag[i]) …Run Code Online (Sandbox Code Playgroud) 我有一个在pymc3中描述的模型,使用以下内容:
from pymc3 import *
basic_model = Model()
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=18)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
Run Code Online (Sandbox Code Playgroud)
但是,我的Ys不是正常分布的,而是二进制的(所以,伯努利,我认为).我无法弄清楚如何改变NormalY的分布,Bernoulli因为我无法弄清楚Y_obs在这种情况下params会是什么.
我有一些降雪观测:
x <- c(98.044, 107.696, 146.050, 102.870, 131.318, 170.434, 84.836, 154.686,
162.814, 101.854, 103.378, 16.256)
Run Code Online (Sandbox Code Playgroud)
我被告知它遵循正态分布,已知标准偏差为25.4,但未知均值mu.我必须推断mu使用贝叶斯公式.
这是关于之前的信息 mu
mean of snow | 50.8 | 76.2 | 101.6 | 127.0 | 152.4 | 177.8
---------------------------------------------------------------
probability | 0.1 | 0.15 | 0.25 |0.25 | 0.15 | 0.1
---------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
以下是我到目前为止所尝试的内容,但最后一行post无法正常工作.得到的图只是给出一条水平线.
library(LearnBayes)
midpts <- c(seq(50.8, 177.8, 30))
prob <- c(0.1, 0.15, 0.25, 0.25, 0.15, 0.1)
p <- seq(50, 180, length = 40000)
histp <- histprior(p, midpts, prob) …Run Code Online (Sandbox Code Playgroud) bayesian ×10
python ×3
r ×3
pymc ×2
pymc3 ×2
jags ×1
lisp ×1
mcmc ×1
networking ×1
plot ×1
probability ×1
rstan ×1
rstanarm ×1
scikit-learn ×1
scikits ×1
stan ×1
statistics ×1
testing ×1
weka ×1