oas#
- sklearn.covariance.oas(X, *, assume_centered=False)[源码]#
使用 Oracle Approximating Shrinkage 估计协方差。
在用户指南中阅读更多信息。
- 参数:
- X形状为 (n_samples, n_features) 的类数组对象
用于计算协方差估计的数据。
- assume_centered布尔值,默认值=False
如果为 True,数据在计算前不会被中心化。这对于平均值显著为零但不完全为零的数据很有用。如果为 False,数据在计算前会被中心化。
- 返回:
- shrunk_cov形状为 (n_features, n_features) 的类数组对象
收缩协方差。
- shrinkage浮点数
用于计算收缩估计的凸组合中的系数。
备注
正则化协方差为
(1 - shrinkage) * cov + shrinkage * mu * np.identity(n_features),
其中 mu = trace(cov) / n_features,收缩率由 OAS 公式给出(参见[1])。
此处实现的收缩公式与[1]中的公式 (23) 不同。在原文中,公式 (23) 指出,在分子和分母中,Trace(cov*cov) 都乘以 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)