python - 使用 PyMC3 的贝叶斯 : PatsyError

标签 python bayesian pymc3 pymc


我正在尝试使用 PyMC3 来应用贝叶斯线性回归。
我想根据一些测量结果来预测年龄。
我发现了一个很棒的示例,并想将其与一些数据一起应用。
下面是代码。

import pandas as pd
import numpy as np
import pymc3 as pm
from sklearn.model_selection import train_test_split

data = pd.read_csv('data.csv')
X = data.drop(['User_ID','Gender','Age'], axis = 1)   # the features
Y = data['Age']  
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
print(X_train.shape)
print(X_test.shape)

Formula = 'Age ~ ' + ' + '.join(['%s' % variable for variable in X_train.columns[0:]])
print(Formula)

with pm.Model() as normal_model:    
   f = pm.glm.families.Normal()    
   pm.GLM.from_formula(Formula, data = X_train, family = f)   
   normal_trace = pm.sample(draws=2000, chains = 2, tune = 500)

当我运行它时,我收到此错误

PatsyError: Error evaluating factor: NameError: name 'Age' is not defined
Age ~ Height + Weight + Duration + Heart_Rate + Body_Temp + Calories
^^^

但是,如果我将年龄保留在 X 中,效果很好,但在这种情况下,年龄也参与了公式,这不应该是因为年龄是因变量,而其他变量是自变量。
知道如何修复它吗?
提前致谢

最佳答案

要使用 pm.GLM.from_formula() 方法,DataFrame data 参数必须包含所有变量(预测变量和响应)。修改当前代码来执行此操作的一个简单方法是重新附加响应变量:

pm.GLM.from_formula(Formula, data=pd.concat([X_train, y_train], axis=1), family=f)

关于python - 使用 PyMC3 的贝叶斯 : PatsyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60015658/

相关文章:

python - 关于exec的使用

python - Optimized_execution() 需要 1 个位置参数,但给出了 2 个

python - 在类里面使用带有 self 的装饰器

r - 在 R 中使用 MCMC Metropolis-Hastings 算法对多维度后验分布进行采样

python - 将句子拆分成它的标记作为字符注释 Python

python - 安装和导入后,colaboratory 将不承认 arviz

r - 如何从 MCMCregress 计算模型残差

python - 在 PyMC3 中处理大型数据集时出现 "Bracket nesting level exceeded maximum"

python - 是否可以使用分类随机变量在 PyMC3 中创建分层模型?

pymc3 - 如何向 PyMC3 模型添加约束?