我目前正在尝试在共区域化高斯过程的平均函数内实现贝叶斯变量选择。均值函数是一个线性模型,我想为这个线性模型的参数指定尖峰和平板先验。
我找不到任何有关如何在 gpflow 中为参数指定自定义先验的信息。任何有关如何执行此操作的指导,或者我正在尝试的操作在 gpflow 中是否可行或实用,将不胜感激。
我正在 python 中使用 gpflow。我试图为变量创建一个伯努利先验(下面的代码),但我真的不确定如何在 gpflow 中编写自定义先验,所以这可能是不正确的。
class Bernoulli_prior(gpflow.priors.Prior):
def __init__(self, p):
super().__init__()
self.p = p
def logp(self, X):
X = tf.cast(X, tf.float32)
sumx = tf.math.reduce_sum(X)
n = tf.cast(tf.size(X), tf.float32)
j = tf.math.log(self.p)
k = tf.math.log(1 - self.p)
return sumx*j + (n-sumx)*k
def sample(self, shape=(1,)):
lis = np.zeros(shape)
for i in range(shape[0]):
lis[i] = np.random.binomial(1, self.p)
return lis
def __str__(self):
"B(" +str(self.p) + ")"