oas#

sklearn.covariance.oas(X, *, assume_centered=False)[source]#

使用 Oracle Approximating Shrinkage 估計共變異數。

詳情請參閱使用者指南

參數:
Xarray-like,形狀為 (n_samples, n_features)

用於計算共變異數估計的資料。

assume_centeredbool,預設值為 False

若為 True,則在計算前不會將資料置中。適用於平均值顯著等於零但並非精確為零的資料。若為 False,則在計算前會將資料置中。

回傳:
shrunk_covarray-like,形狀為 (n_features, n_features)

收縮共變異數。

shrinkagefloat

用於計算收縮估計的凸組合中的係數。

注意

正規化的共變異數為

(1 - shrinkage) * cov + shrinkage * mu * np.identity(n_features),

其中 mu = trace(cov) / n_features,而 shrinkage 由 OAS 公式給出 (請參閱 [1])。

此處實作的收縮公式與 [1] 中的方程式 23 不同。在原始文章中,公式 (23) 指出分子和分母都乘以 2/p (p 為特徵數量),但此操作被省略,因為對於較大的 p 值,2/p 的值非常小,不會影響估計器的值。

參考文獻

範例

>>> import numpy as np
>>> from sklearn.covariance import oas
>>> rng = np.random.RandomState(0)
>>> real_cov = [[.8, .3], [.3, .4]]
>>> X = rng.multivariate_normal(mean=[0, 0], cov=real_cov, size=500)
>>> shrunk_cov, shrinkage = oas(X)
>>> shrunk_cov
array([[0.7533..., 0.2763...],
       [0.2763..., 0.3964...]])
>>> shrinkage
np.float64(0.0195...)