jax.numpy.cov#
- jax.numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)[源代码]#
估计加权样本协方差。
numpy.cov()
的 JAX 实现。变量 i 和变量 j 之间的协方差 \(C_{ij}\) 定义为
\[cov[X_i, X_j] = E[(X_i - E[X_i])(X_j - E[X_j])]\]给定变量 \(X_i\) 和 \(X_j\) 的 N 个观测值数组,可以通过样本协方差进行估计
\[C_{ij} = \frac{1}{N - 1} \sum_{n=1}^N (X_{in} - \overline{X_i})(X_{jn} - \overline{X_j})\]其中 \(\overline{X_i} = \frac{1}{N} \sum_{k=1}^N X_{ik}\) 是观测值的平均值。
- 参数:
m (ArrayLike) – 形状为
(M, N)
(如果rowvar
为 True)或(N, M)
(如果rowvar
为 False)的数组,表示M
个变量的N
个观测值。m
也可以是一维的,表示单个变量的N
个观测值。y (ArrayLike | None) – 可选的附加观测值集,与
m
的形式相同。如果指定,则将y
与m
组合,即对于默认的rowvar = True
情况,m
变为jnp.vstack([m, y])
。rowvar (bool) – 如果为 True(默认),则
m
的每一行代表一个变量。如果为 False,则每一列代表一个变量。bias (bool) – 如果为 False(默认),则将协方差除以
N - 1
进行归一化。如果为 True,则将协方差除以N
进行归一化。ddof (int | None) – 指定自由度。如果
bias
为 False,则默认为1
,如果bias
为 True,则默认为0
。fweights (ArrayLike | None) – 可选的整数频率权重数组,形状为
(N,)
。这是一个绝对权重,指定每次计算中包含每个观测值的次数。aweights (ArrayLike | None) – 可选的观测值权重数组,形状为
(N,)
。这是一个相对权重,指定每个观测值的“重要性”。在ddof=0
的情况下,它相当于为每个观测值分配概率。
- 返回:
形状为
(M, M)
的协方差矩阵,如果M = 1
,则为形状为()
的标量。- 返回类型:
另请参阅
jax.numpy.corrcoef()
:计算相关系数,协方差矩阵的归一化版本。
示例
考虑对两个完全相关的变量的这些观测值。 在这种情况下,协方差矩阵是一个 2x2 的单位矩阵
>>> x = jnp.array([[0, 1, 2], ... [0, 1, 2]]) >>> jnp.cov(x) Array([[1., 1.], [1., 1.]], dtype=float32)
现在考虑对两个完全反相关的变量的这些观测值。 在这种情况下,协方差矩阵在非对角线上有
-1
>>> x = jnp.array([[-1, 0, 1], ... [ 1, 0, -1]]) >>> jnp.cov(x) Array([[ 1., -1.], [-1., 1.]], dtype=float32)
等效地,这些序列可以指定为单独的参数,在这种情况下,它们在继续计算之前被堆叠在一起。
>>> x = jnp.array([-1, 0, 1]) >>> y = jnp.array([1, 0, -1]) >>> jnp.cov(x, y) Array([[ 1., -1.], [-1., 1.]], dtype=float32)
通常,协方差矩阵的条目可以是任何正或负实数值。 例如,这是从 3 维标准正态分布中抽取的 100 个点的协方差
>>> key = jax.random.key(0) >>> x = jax.random.normal(key, shape=(3, 100)) >>> with jnp.printoptions(precision=2): ... print(jnp.cov(x)) [[0.9 0.03 0.1 ] [0.03 1. 0.01] [0.1 0.01 0.85]]