maxframe.tensor.random.multivariate_normal#

maxframe.tensor.random.multivariate_normal(mean, cov, size=None, check_valid=None, tol=None, chunk_size=None, gpu=None, dtype=None)[源代码]#

从多变量正态分布中抽取随机样本。

多变量正态分布(也称为多元正态分布或高斯分布)是一维正态分布向高维的推广。这种分布由其均值和协方差矩阵指定。这些参数类似于一维正态分布的均值(平均值或“中心”)和方差(标准差,或“宽度”的平方)。

参数:
  • mean (1-D array_like, of length N) -- N维分布的均值。

  • cov (2-D array_like, of shape (N, N)) -- 分布的协方差矩阵。为了正确采样,它必须是对称且半正定的。

  • size (int or tuple of ints, optional) -- 例如,给定形状 (m,n,k),将生成 m*n*k 个样本,并排列成 mnk 层的形式。由于每个样本是 N 维的,输出形状为 (m,n,k,N)。如果未指定形状,则返回一个 (N 维) 样本。

  • check_valid ({ 'warn', 'raise', 'ignore' }, optional) -- 当协方差矩阵不是半正定时的行为。

  • tol (float, optional) -- 检查协方差矩阵中的奇异值时的容差。

  • chunk_size (int or tuple of int or tuple of ints, optional) -- 每个维度上期望的分块大小

  • gpu (bool, optional) -- 如果为 True,则在 GPU 上分配张量,默认为 False

  • dtype (data-type, optional) -- 返回张量的数据类型。

返回:

out -- 抽取的样本,形状为 *size*(如果提供了该参数)。否则形状为 (N,)。换句话说,每个条目 out[i,j,...,:] 是一个从该分布中抽取的 N 维值。

返回类型:

Tensor

备注

均值是 N 维空间中的一个坐标,表示样本最可能被生成的位置。这类似于一维或单变量正态分布的钟形曲线的峰值。

协方差表示两个变量共同变化的程度。从多变量正态分布中,我们抽取 N 维样本 \(X = [x_1, x_2, ... x_N]\)。协方差矩阵元素 \(C_{ij}\)\(x_i\)\(x_j\) 的协方差。元素 \(C_{ii}\)\(x_i\) 的方差(即其“散布”程度)。

除了指定完整的协方差矩阵,常用的近似包括:

  • 球面协方差(cov 是单位矩阵的倍数)

  • 对角协方差(cov 只在对角线上有非负元素)

这个几何特性可以通过绘制生成的数据点在二维空间中观察到:

>>> mean = [0, 0]
>>> cov = [[1, 0], [0, 100]]  # diagonal covariance

对角协方差意味着点沿着 x 轴或 y 轴方向排列:

>>> import matplotlib.pyplot as plt
>>> import maxframe.tensor as mt
>>> x, y = mt.random.multivariate_normal(mean, cov, 5000).T
>>> plt.plot(x.execute(), y.execute(), 'x')
>>> plt.axis('equal')
>>> plt.show()

请注意,协方差矩阵必须是半正定的(也称为非负定)。否则,此方法的行为是未定义的,并且不保证向后兼容性。

引用

示例

>>> mean = (1, 2)
>>> cov = [[1, 0], [0, 1]]
>>> x = mt.random.multivariate_normal(mean, cov, (3, 3))
>>> x.shape
(3, 3, 2)

以下内容可能是正确的,因为 0.6 大约是标准差的两倍:

>>> list(((x[0,0,:] - mean) < 0.6).execute())
[True, True]