如何在pymc3中设置伯努利分布参数
How to set Bernoulli distribution parameters in pymc3
我有一个在 pymc3 中描述的模型,使用以下内容:
from pymc3 import *
basic_model = Model()
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=18)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
但是,我的 Y
不是正态分布的,而是二进制的(所以,伯努利,我认为)。我不知道如何将 Y 的 Normal
分布更改为 Bernoulli
,因为我不知道在那种情况下 Y_obs
的参数是什么。
您要找的是logistic regression。在这里,您使用逻辑函数将线性模型的输出转换为概率。
在您的示例中,这可以指定如下:
import pyMc3 as pm
import theano.tensor as T
basic_model = pm.Model()
def logistic(l):
return 1 / (1 + T.exp(-l))
with basic_model:
# Priors for unknown model parameters
alpha = pm.Normal('alpha', mu=0, sd=10)
beta = pm.Normal('beta', mu=0, sd=10, shape=18)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3
# Likelihood (sampling distribution) of observations
Y_obs = pm.Bernoulli('Y_obs', p=logistic(mu), observed=Y)
我有一个在 pymc3 中描述的模型,使用以下内容:
from pymc3 import *
basic_model = Model()
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=18)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
但是,我的 Y
不是正态分布的,而是二进制的(所以,伯努利,我认为)。我不知道如何将 Y 的 Normal
分布更改为 Bernoulli
,因为我不知道在那种情况下 Y_obs
的参数是什么。
您要找的是logistic regression。在这里,您使用逻辑函数将线性模型的输出转换为概率。
在您的示例中,这可以指定如下:
import pyMc3 as pm
import theano.tensor as T
basic_model = pm.Model()
def logistic(l):
return 1 / (1 + T.exp(-l))
with basic_model:
# Priors for unknown model parameters
alpha = pm.Normal('alpha', mu=0, sd=10)
beta = pm.Normal('beta', mu=0, sd=10, shape=18)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3
# Likelihood (sampling distribution) of observations
Y_obs = pm.Bernoulli('Y_obs', p=logistic(mu), observed=Y)