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...)