MultivariateNormal¶
- class paddle.distribution. MultivariateNormal ( loc, covariance_matrix=None, precision_matrix=None, scale_tril=None ) [源代码] ¶
MultivariateNormal 是一种定义在实数域上的多元连续型概率分布,参数 loc
表示均值,以及需要传入以下任意一种矩阵描述其方差: covariance_matrix
、 precision_matrix
、 scale_tril
。
其概率密度函数(pdf)为:
其中:
\(X\) 是 k 维随机向量。
\(\mu\) 是 k 维均值向量。
\(\Sigma\) 是 k 阶协方差矩阵。
参数¶
loc (int|float|Tensor) - 即上述公式中 \(\mu\) 参数,是 MultivariateNormal 的均值向量。如果
loc
的输入数据类型是 int 或 float 则会被转换为数据类型为 paddle 全局默认数据类型的 1-D Tensor。covariance_matrix (Tensor,可选) - 即上述公式中 \(\mu\) 参数,是 MultivariateNormal 的协方差矩阵。
covariance_matrix
的数据类型会被转换为与loc
相同的类型。默认值为 None。precision_matrix (Tensor,可选) - 是 MultivariateNormal 协方差矩阵的逆矩阵。
precision_matrix
的数据类型会被转换为与loc
相同的类型。默认值为 None。scale_tril (Tensor,可选) - 是 MultivariateNormal 协方差矩阵的柯列斯基分解的下三角矩阵。
scale_tril
的数据类型会被转换为与loc
相同的类型。默认值为 None。
代码示例¶
>>> import paddle
>>> from paddle.distribution import MultivariateNormal
>>> paddle.set_device("cpu")
>>> paddle.seed(100)
>>> rv = MultivariateNormal(loc=paddle.to_tensor([2.,5.]), covariance_matrix=paddle.to_tensor([[2.,1.],[1.,2.]]))
>>> print(rv.sample([3, 2]))
Tensor(shape=[3, 2, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[[-0.00339603, 4.31556797],
[ 2.01385283, 4.63553190]],
[[ 0.10132277, 3.11323833],
[ 2.37435842, 3.56635118]],
[[ 2.89701366, 5.10602522],
[-0.46329355, 3.14768648]]])
>>> print(rv.mean)
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[2., 5.])
>>> print(rv.variance)
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[1.99999988, 2. ])
>>> print(rv.entropy())
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
3.38718319)
>>> rv1 = MultivariateNormal(loc=paddle.to_tensor([2.,5.]), covariance_matrix=paddle.to_tensor([[2.,1.],[1.,2.]]))
>>> rv2 = MultivariateNormal(loc=paddle.to_tensor([-1.,3.]), covariance_matrix=paddle.to_tensor([[3.,2.],[2.,3.]]))
>>> print(rv1.kl_divergence(rv2))
Tensor(shape=[], dtype=float32, place=Place(cpu), stop_gradient=True,
1.55541301)
方法¶
sample(shape=())¶
从 MultivariateNormal 分布中生成满足特定形状的样本数据。最终生成样本形状为 sample_shape + batch_shape + event_shape
。
参数
shape (Sequence[int],可选):采样次数。
返回
Tensor,样本数据。其维度为 \(\text{sample shape} + \text{batch shape} + \text{event shape}\) 。数据类型与 self.loc 相同。
rsample(shape=())¶
重参数化采样,生成指定维度的样本。最终生成样本形状为 sample_shape + batch_shape + event_shape
。
参数
shape (Sequence[int],可选):采样次数。
返回
Tensor,样本数据。其维度为 \(\text{sample shape} + \text{batch shape} + \text{event shape}\) 。数据类型与 self.loc 相同。
entropy()¶
计算 MultivariateNormal 分布的信息熵。
返回
多元正态分布的信息熵,数据类型与 self.loc 相同。
kl_divergence(other)¶
相对于另一个多元正态分布的 KL 散度,两个分布需要有相同的 \(\text{batch shape}\) 和 \(\text{event shape}\)。
参数
other (MultivariateNormal) - 输入的另一个多元正态分布。
返回
相对于另一个多元正态分布的 KL 散度,数据类型与 self.loc 相同。