以下模型(取自贝叶斯黑客方法)与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_定义还是其他问题(需要采样器)。
答案 0 :(得分:0)
泊松分布模型很重要。
它还可以用于队列网络之类的模型来模拟单个客户的到达时间。请注意,客户的预期到货时间将是费率参数(通常为lambda)的倒数。
一个人可以将数据作为每个固定采样时间间隔的计数馈入Poisson流程,例如您每天获得多少客户。
使用指数分布来模拟一些过渡时间。这不是一个计数过程。它是一个连续的过程,其离散模拟是几何分布。
泊松分布用于对离散数据和离散计数进行建模,这些离散计数和连续计数之间的时间呈指数分布。
它们看起来很相似,但性质不同。
输入到指数分布中的计数数据可能会混淆整个过程。
换句话说,由于指数分布无法理解给定的数据,因此它不是合适的模型。