oas#

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

使用 Oracle 近似收缩估算协方差。

Read more in the User Guide.

参数:
Xshape 为 (n_samples, n_features) 的 array-like

Data from which to compute the covariance estimate.

assume_centeredbool, default=False

如果为 True,在计算前数据将不会被中心化。这对于均值显著等于零但并不完全为零的数据很有用。如果为 False,数据将在计算前被中心化。

返回:
shrunk_covarray-like of shape (n_features, n_features)

收缩协方差。

shrinkagefloat

用于计算收缩估计量的凸组合系数。

注意事项

正则化协方差为

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

其中 mu = trace(cov) / n_features,shrinkage 由 OAS 公式给出(见 [1])。

此处实现的 shrinkage 公式与 [1] 中的公式 (23) 不同。在原始文章中,公式 (23) 指出 2/p(p 是特征数)在分子和分母中都乘以 Trace(cov*cov),但此操作被省略,因为对于较大的 p,2/p 的值非常小,以至于它不会影响估计器(estimator)的值。

References

示例

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