Dirichlet¶
狄利克雷分布(Dirichlet distribution)是一类在实数域以正单纯形(standard simplex)为支撑集的高维连续概率分布,是 Beta 分布在高维情形的推广。
对独立同分布(independent and identically distributed, iid)的连续随机变量 \(\boldsymbol X \in R_k\),和支撑集 \(\boldsymbol X \in (0,1), ||\boldsymbol X|| = 1\),其概率密度函数(pdf)为:
\[f(\boldsymbol X; \boldsymbol \alpha) = \frac{1}{B(\boldsymbol \alpha)} \prod_{i=1}^{k}x_i^{\alpha_i-1}\]
其中,\(\boldsymbol \alpha = {\alpha_1,...,\alpha_k}, k \ge 2\) 是无量纲分布参数,\(B(\boldsymbol \alpha)\) 是多元 Beta 函数。
\[B(\boldsymbol \alpha) = \frac{\prod_{i=1}^{k} \Gamma(\alpha_i)}{\Gamma(\alpha_0)}\]
\(\alpha_0=\sum_{i=1}^{k} \alpha_i\) 是分布参数的和,\(\Gamma(\alpha)\) 为 Gamma 函数。
参数¶
concentration (Tensor) - 浓度参数,即上述公式 \(\alpha\) 参数。当 concentration 维度大于 1 时,最后一维表示参数,参数形状
event_shape=concentration.shape[-1:]
,其余维为 Batch 维,batch_shape=concentration.shape[:-1]
.
代码示例¶
import paddle
dirichlet = paddle.distribution.Dirichlet(paddle.to_tensor([1., 2., 3.]))
print(dirichlet.entropy())
# Tensor(shape=[], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
# -1.24434423)
print(dirichlet.prob(paddle.to_tensor([.3, .5, .6])))
# Tensor(shape=[], dtype=float32, place=CUDAPlace(0), stop_gradient=True,
# 10.80000114)