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
,則為形狀為()
的純量。- 傳回類型:
另請參閱
jax.numpy.corrcoef()
:計算相關係數,共變異數矩陣的正規化版本。
範例
考慮這兩個完全相關變數的觀測值。在這種情況下,共變異數矩陣是 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]]