如何在Gpflow中的均值函数中实现参数的尖峰和平板先验?

时间:2019-06-27 10:17:38

标签: gpflow

我目前正在尝试在共区域化高斯过程的均值函数内实现贝叶斯变量选择。均值函数是一个线性模型,我想为此线性模型的参数指定尖峰和板坯先验。

我找不到有关如何在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) + ")"

0 个答案:

没有答案