【问题标题】:PyMC3 - Poisson works with switch point, Exponential does notPyMC3 - 泊松适用于开关点,指数不适用
【发布时间】:2017-05-10 06:22:17
【问题描述】:

以下模型(取自 Bayesian Methods for Hackers)适用于 Poisson。

count_data = np.loadtxt("data/txtdata.csv")
n_count_data = len(count_data) 

with pm.Model() as model:
alpha = 1.0/count_data.mean()  # Recall count_data is the
                               # variable that holds our txt counts
lambda_1 = pm.Exponential("lambda_1", alpha)
lambda_2 = pm.Exponential("lambda_2", alpha)

tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1)

idx = np.arange(n_count_data) # Index
lambda_ = pm.math.switch(tau >= idx, lambda_1,lambda_2)

observation = pm.Poisson("obs", lambda_, observed=count_data)

step = [pm.Metropolis(), pm.NUTS()]
trace = pm.sample(10000, tune=5000,step=step)
pm.traceplot(trace, ['lambda_1', 'lambda_2', 'tau'])
plt.show()

使用泊松分布:

但是,在此模型中使用指数随机变量时:

observation = pm.Exponential("obs", lambda_, observed=count_data)

我明白了:

指数分布:

我希望使用指数分布的原因是使用非整数。

我不确定问题出在 lambda_ 定义还是其他问题(为此所需的采样器)。

【问题讨论】:

    标签: python pymc pymc3


    【解决方案1】:

    泊松分布模型很重要。

    它还可以用于队列网络等事物,以模拟单个客户的到达间隔时间。请注意,客户的预期到达间隔时间将是速率参数(通常为 lambda)的倒数。

    可以将数据作为每个固定采样时间间隔的计数提供给泊松过程,例如您每天获得多少客户。

    指数分布用于模拟一些过渡时间。这不是一个计数过程。它是一个连续过程,其离散模拟是几何分布。

    泊松分布用于对离散数据和离散计数进行建模,连续计数之间的时间呈指数分布。

    它们看起来非常相似,但性质不同。

    输入指数分布的计数数据很可能混淆了整个过程。

    换句话说,指数分布不是合适的模型,因为它无法理解给定的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多