小白想学习Bayesian inference, 在配环境的地方卡了四五天。搜集各种教程终于配好了,现在记录步骤如下。
(跑是能跑的,只知道报错很多是版本不匹配的问题,但是其中具体原因我也不是很清楚,希望有大佬能指点一下~多谢)
1. 创建环境
conda create -n bayesian python==3.8
conda activate bayesian
2. pip 安装 pym3
pip install pymc3==3.11.5
3. 此时运行会报c++ 的错误(一堆),运行下面两个命令
conda install m2w64-toolchain
conda install mingw libpython
4.如果出现这个警告:
WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.
执行以下命令
conda install mkl
conda install mkl-service
conda install blas
然后在 C:\Users\用户名 下新建文件,命名为 .theanorc.txt ,写入保存
[blas]
Idflags=-lmkl_rt
5. 测试代码
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(123)
alpha = 1
sigma = 1
beta = [1, 2.5]
N = 100
X1 = np.random.randn(N)
X2 = np.random.randn(N)
Y = alpha + beta[0] * X1 + beta[1] * X2 + np.random.randn(N) * sigma
fig1, ax1 = plt.subplots(1, 2, figsize=(10, 4))
ax1[0].scatter(X1, Y)
ax1[0].set_xlabel('X1')
ax1[0].set_ylabel('Y')
ax1[1].scatter(X2, Y)
ax1[1].set_xlabel('X2')
ax1[1].set_ylabel('Y')
fig2 = plt.figure(2)
ax2 = Axes3D(fig2)
ax2.scatter(X1, X2, Y)
ax2.set_xlabel('X1')
ax2.set_ylabel('X2')
ax2.set_zlabel('Y')
import pymc3 as pm
basic_model = pm.Model()
with basic_model:
alpha = pm.Normal('alpha', mu=0, sd=10)
beta = pm.Normal('beta', mu=0, sd=10, shape=2)
sigma = pm.HalfNormal('sigma', sd=1)
mu = alpha + beta[0] * X1 + beta[1] * X2
Y_obs = pm.Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
map_estimate = pm.find_MAP(model=basic_model)
from scipy import optimize
map_estimate2 = pm.find_MAP(model=basic_model)
print(map_estimate)
print(map_estimate2)
6. 运行结果依然有一堆警告但是anyway了
参考:
关于这个例子的教程:PyMC3 概率编程入门