jax.numpy.cov#

jax.numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)[原始碼]#

估計加權樣本共變異數。

JAX 版本的 numpy.cov()

變數 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,則為形狀為 () 的純量。

傳回類型:

Array

另請參閱

範例

考慮這兩個完全相關變數的觀測值。在這種情況下,共變異數矩陣是 2x2 的全 1 矩陣

>>> 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]]