python - 如何使用训练/测试数据评估 pymc2 模型?

标签 python pymc

我正在 pymc2 中构建一个简单的模型,我想评估训练数据和测试数据。

我尝试使用这部分代码

print('Accuracy on train data = {}%'.format((y.value == Y_train).mean() * 100))

但我认为y.valueY_train相同,所以不能解决我的问题。

我当前的代码是

number_of_samples = 10000
X = np.random.randn(100, 2)
Y = np.tanh(X[:, 0] + X[:, 1])
Y = 1. / (1. + np.exp(-(Y + Y)))
Y_train = Y > 0.5

w11 = pm.Normal('w11', mu=0., tau=1.)
w12 = pm.Normal('w12', mu=0., tau=1.)
w21 = pm.Normal('w21', mu=0., tau=1.)
w22 = pm.Normal('w22', mu=0., tau=1.)
w31 = pm.Normal('w31', mu=0., tau=1.)
w32 = pm.Normal('w32', mu=0., tau=1.)

x1 = X[:, 0]
x2 = X[:, 1]

x3 = pm.Lambda('x3', lambda w1=w11, w2=w12: np.tanh(w1 * x1 + w2 * x2))
x4 = pm.Lambda('x4', lambda w1=w21, w2=w22: np.tanh(w1 * x1 + w2 * x2))

@pm.deterministic
def sigmoid(x=w31 * x3 + w32 * x4):
    return 1. / (1. + np.exp(-x))

y = pm.Bernoulli('y', sigmoid, observed=True, value=Y_train)

model = pm.Model([w11, w12, w21, w22, w31, w32, y])
inference = pm.MCMC(model)

inference.sample(number_of_samples)
print('Accuracy on train data = {}%'.format((y.value == Y_train).mean() * 100))

这就是我想要构建的网络。

my network

我希望根据训练数据和另一个测试数据计算训练模型的准确性,但我不清楚如何做到这一点。

最佳答案

我想你可能想要的是 posterior predictive check ,您可以通过向模型添加额外的随机变量来实现:

y_pred = pm.Bernoulli('y_pred', sigmoid)

model = pm.Model([w11, w12, w21, w22, w31, w32, y, y_pred])

要获得样本内预测,您可以使用一些阈值(例如 0.5)将概率预测从 y_pred 轨迹映射到适合测量准确性的确定性预测:

y_pred_samples = y_pred.trace()
y_pred_threshold = (y_pred_samples.mean(axis=0) > .5)
print('Accuracy on train data = {}%'.format((y_pred_threshold == Y_train).mean() * 100))

这是一个 Jupyter Notebook,将所有这些放在一起:link .

关于python - 如何使用训练/测试数据评估 pymc2 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169191/

相关文章:

python - 如何让 urllib2 以数组形式返回数据

python - PYMC3 贝叶斯预测锥

python - PYMC3 季节性变量

python - 离散浮点网格中的 PyMC DiscreteMetropolis

python - python中如何将一个函数传递给另一个函数

python - 使用 python 写入文本文件时,我需要更新特定列

python - 捕捉 Numpy All-Nan 切片

python sqlalchemy没有填写行

python - 为什么这种分层泊松模型与生成数据中的真实参数不匹配?

pymc - pymc3 中转换的便捷方法