2

我试图了解如何在 Tensorflow 概率中实现以下模型。

  1. 角度 ,theta在 范围内具有一致的先验概率[-pi / 2, +pi / 2]
  2. 方向翻转概率 ,beta在 范围内具有一致的先验概率[0, 1]
  3. theta'设置为:
    • theta' = theta + pi有概率beta; 或者
    • theta' = theta有概率(1 - beta);
  4. 浓度c具有HalfCauchy先验概率;和
  5. 从von Mises 分布alpha中得出一个观察结果,以集中为中心。theta'c

到目前为止,我尝试过的是

import tensorflow_probability as tfp
import numpy as np
tfd = tfp.distributions

model = tfd.JointDistributionSequential(
    [
        tfd.Uniform(-np.pi / 2, +np.pi / 2, name='theta'), # theta
        tfd.Uniform(0.0, 1.0, name='beta'), # beta
        tfd.HalfCauchy(loc=0, scale=1), # c
        lambda c, beta, theta: tfd.VonMises(
            loc=theta + np.pi * tfd.Binomial(probs=beta),
            concentration=c,
            name='observed'
        ), # Observation, alpha
    ]
)

调用它会在二项式部分出现错误:TypeError: __init__() missing 1 required positional argument: 'total_count'. 我究竟做错了什么?

2020-03-17 更新

最新代码如下。我仍在尝试找出如何实现模型的第 (3) 部分,即theta通过添加pi概率来翻转我的角度方向beta。对此的任何帮助将不胜感激!到目前为止我所拥有的不起作用,因为我无法将伯努利对象乘以浮点数。

model = tfd.JointDistributionSequential(
    [
        tfd.Uniform(-np.pi / 2, +np.pi / 2, name='theta'), # theta
        tfd.Uniform(0.0, 1.0, name='beta'), # beta
        tfd.HalfCauchy(loc=0, scale=1), # c
        lambda c, beta, theta: tfd.VonMises(
            loc=theta + np.pi * tfd.Bernoulli(probs=beta, dtype=tf.float32),
            concentration=c,
            name='observed'
        ), # Observation, alpha
    ]
)
4

2 回答 2

3

loc在参数计算中将数字乘以分布的问题可以通过从伯努利分布中采样来解决,即

...
loc=theta + np.pi*tfd.Bernoulli(probs=beta, dtype=tf.float32).sample(),
...

这允许从联合分布中抽样,但我不确定它是否正确。

另一种方法是flip使用双射器提取随机变量和缩放,即

tpb = tfp.bijectors
model = tfd.JointDistributionSequential(
[
    tfd.Uniform(-np.pi / 2, +np.pi / 2, name='theta'), # theta
    tfd.Uniform(0.0, 1.0, name='beta'), # beta
    lambda beta, theta: tfb.Scale(np.pi)(tfd.Bernoulli(probs=beta, dtype=tf.float32)), #flip
    tfd.HalfCauchy(loc=0, scale=1), # c
    lambda c, flip, beta, theta: tfd.VonMises(
        loc=theta + flip ,
        concentration=c,
        name='observed'
    ), # Observation, alpha
]

)

这也允许从联合分布中进行采样,并具有能够看到何时发生翻转的优势。

于 2020-04-05T10:41:48.243 回答
1

将伯努利换成二项式。二项式是total_count多次伯努利平局的总和。

于 2020-03-10T14:19:30.743 回答