标签: bayesian

pymc 对多个变量进行观察

我正在使用黑客贝叶斯方法的线性回归示例,但无法将其扩展到我的用途。

我对一个随机变量进行了观察,对该随机变量进行了假设分布,最后对我观察到的该随机变量进行了另一个假设分布。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)

python bayesian mcmc pymc pymc3

4
推荐指数
1
解决办法
2624
查看次数

在 rstanarm 中指定每个预测变量的先验

我正在通过 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)

我将如何实施这些信息?

感谢任何帮助,谢谢!

r bayesian rstan rstanarm

4
推荐指数
1
解决办法
1369
查看次数

brms:如何在分类变量上设置先验?

我正在使用 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)

r bayesian stan

4
推荐指数
1
解决办法
1475
查看次数

计算垃圾邮件概率

我正在python/django建立一个网站,想要预测用户提交是否有效或者是垃圾邮件.

用户对其提交的内容具有接受率,如本网站所示.

用户可以审核其他用户的提交内容; 这些调节后来由管理员进行元模式化.

鉴于这种:

  • 提交接受率为60%的注册用户A提交了一些内容.
  • 用户B将A的帖子作为有效提交进行审核.但是,用户B在70%的时间内都是错误的.
  • 用户C将A的帖子视为垃圾邮件.用户C通常是对的.如果用户C说某些内容是垃圾邮件/没有垃圾邮件,则80%的时间都是正确的.

如何预测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)

probability bayesian

3
推荐指数
1
解决办法
854
查看次数

请帮助破译这个lisp提取物

(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)

lisp spam-prevention bayesian

3
推荐指数
1
解决办法
194
查看次数

朴素贝叶斯分类器使用python

我正在使用scikit-learn来查找文档的Tf-idf权重,然后使用朴素
贝叶斯分类器对文本进行分类.但是文档中所有单词的Tf-idf权重都是负数,除了少数.但据我所知,负值意味着不重要的术语.那么有必要将整个Tf-idf值传递给贝叶斯分类器吗?如果我们只需要通过其中的一小部分,我们该怎么做呢?与linearSVC相比,贝叶斯分类器有多好或多坏?除了使用Tf-idf之外,还有更好的方法在文本中查找标签吗?

谢谢

python machine-learning bayesian scikits scikit-learn

3
推荐指数
2
解决办法
3995
查看次数

何时在Weka中使用测试和训练集?

我已经和Weka一起工作了一段时间,在我的研究中,我发现很多代码示例都使用了测试和训练集.例如,通过Discretization和Bayesian Networks,他们的示例几乎总是使用测试和训练集来显示.我可能在这里缺少对数据处理的一些基本理解,但我不明白为什么这似乎总是如此.我在一个项目中使用Discretization和Bayesian Networks,对于他们两个,我没有使用测试或训练集,也不明白为什么我需要.我正在BayesNet上进行交叉验证,所以我正在测试它的准确性.我误解了测试和训练集用于什么?哦,请使用最简单的术语; 我对数据处理的世界还不是很有经验.

testing networking bayesian weka

3
推荐指数
1
解决办法
2万
查看次数

在JAGS中运行逻辑模型-您可以向量化,而不是遍历单个案例吗?

我对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)

bayesian jags

3
推荐指数
1
解决办法
230
查看次数

如何在pymc3中设置伯努利分布参数

我有一个在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会是什么.

python bayesian pymc pymc3

3
推荐指数
1
解决办法
1938
查看次数

关于正态分布均值的贝叶斯推断的玩具R代码[降雪量数据]

我有一些降雪观测:

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)

statistics plot r normal-distribution bayesian

3
推荐指数
1
解决办法
955
查看次数