在上半部分中,我们了解了贝叶斯方法步骤和高斯推论,也将贝叶斯方法应用到一个实际问题中,今天我主要介绍贝叶斯在Python中实现最终的后验分布。
后预测检查
后验预测检验(PPCs)是验证模型的一种很好的方法。其思想是使用来自后验图的参数从模型中生成数据。
现在我们已经计算了后验,我们将说明如何使用模拟结果来推导预测。
下面的函数将从跟踪中随机抽取1000个参数样本。然后,对于每个样本,它将从该样本中μ和σ值指定的正态分布中提取25798个随机数。
ppc = pm.sample_posterior_predictive(trace_g, samples=1000, model=model_g)
np.asarray(ppc['y']).shape
现在,ppc包含1000个生成的数据集(每个数据集包含25798个样本),每个数据集使用与后验不同的参数设置。
_, ax = plt.subplots(figsize=(10, 5))
ax.hist([y.mean() for y in ppc['y']], bins=19, alpha=0.5)
ax.axvline(data.price.mean())
ax.set(title='Posterior predictive of the mean', xlabel='mean(x)', ylabel='Frequency');
推断的平均值与实际的火车票价格平均值非常接近。
分组比较
我们可能对不同票价类型下的价格比较感兴趣。我们将着重于估计效应的大小,即量化两类票价之间的差异。为了比较票价类别,我们将使用每种票价类型的平均值。因为我们是贝叶斯,所以我们将努力获得票价类别之间的均值差异的后验分布。
我们创建了三个变量:
价格变量,表示票价。
idx变量,一个用数字编码票价类别的分类虚拟变量。
最后是组变量,包含票价类别的数量(6)
price = data['price'].values
idx = pd.Categorical(data['fare'],
categories=['Flexible', 'Promo