sklearn.covariance.OAS¶
class sklearn.covariance.OAS(*, store_precision=True, assume_centered=False)
Oracle收缩近似估计器。
在用户指南中阅读更多内容。
Chen等人在IEEE Trans. Sign.Proc发表的“ MMSE协方差估计的收缩算法”中描述了OAS是一种特殊的收缩形式,第58卷,第10期,2010年10月。
这里使用的公式与文章中给出的公式不对应。在原始文章中,公式(23)指出在分子和分母中将2 / p乘以Trace(cov * cov),但是这里省略了这个运算,因为对于比较大的p,2 / p的值将会特别小,不会影响估计器的值。
参数 | 说明 |
---|---|
store_precision | bool, default=True 是否存储估计的精度。 |
assume_centered | bool, default=False 如果为True,则计算之前数据不会中心化。这在处理均值几乎为零但不完全为零的数据时很有用。如果为False(默认),则在计算之前将数据中心化。 |
属性 | 说明 |
---|---|
covariance_ | ndarray of shape (n_features, n_features) 估计的协方差矩阵。 |
location_ | ndarray of shape (n_features,) 估计位置,即估计平均值。 |
precision_ | ndarray of shape (n_features, n_features) 估计的伪逆矩阵。(仅在store_precision为True时存储) |
shrinkage_ | float 用于收缩估计的凸组合系数,范围是[0,1]。 |
注
正则协方差为:
(1-收缩率)* cov +收缩率* mu * np.identity(n_features)
其中mu = trace(cov)/ n_features,收缩率由OAS公式给出(请参阅参考资料)
参考资料
“Shrinkage Algorithms for MMSE Covariance Estimation” Chen et al., IEEE Trans. on Sign. Proc., Volume 58, Issue 10, October 2010.
示例
>>> import numpy as np
>>> from sklearn.covariance import OAS
>>> from sklearn.datasets import make_gaussian_quantiles
>>> real_cov = np.array([[.8, .3],
... [.3, .4]])
>>> rng = np.random.RandomState(0)
>>> X = rng.multivariate_normal(mean=[0, 0],
... cov=real_cov,
... size=500)
>>> oas = OAS().fit(X)
>>> oas.covariance_
array([[0.7533..., 0.2763...],
[0.2763..., 0.3964...]])
>>> oas.precision_
array([[ 1.7833..., -1.2431... ],
[-1.2431..., 3.3889...]])
>>> oas.shrinkage_
0.0195...
方法
方法 | 说明 |
---|---|
error_norm (self, comp_cov[, norm, scaling, …]) |
计算两个协方差估计量之间的均方误差。 |
fit (self, X[, y]) |
根据给定的训练数据和参数拟合Oracle近似收缩协方差模型。 |
get_params (self[, deep]) |
获取此估计器的参数。 |
get_precision (self) |
获取精准度矩阵。 |
mahalanobis (self, X) |
计算给定观测值的平方马氏距离。 |
score (self, X_test[, y]) |
使用self.covariance_ 计算高斯数据集的对数似然值,作为其协方差矩阵的估计量。 |
set_params (self, **params) |
设置此估算器的参数。 |
__init__(self, *, store_precision=True, assume_centered=False)
初始化self. 请参阅help(type(self))以获得准确的说明。
error_norm(self, comp_cov, norm='frobenius', scaling=True, squared=True)
计算两个协方差估计量之间的均方误差。(在Frobenius规范的意义上)。
参数 | 说明 |
---|---|
comp_cov | array-like of shape (n_features, n_features) 要比较的协方差。 |
norm | {“frobenius”, “spectral”}, default=”frobenius” 用于计算误差的规范类型,可用的误差类型: - ‘frobenius’ (default):sqrt(tr(A^t.A)) - ‘spectral’:sqrt(max(eigenvalues(A^t.A)),这里的A是 (comp_cov - self.covariance_) 的误差 |
scaling | bool, default=True 如果为True(默认),则平方误差范数除以n_features。如果为False,则不会重新调整平方误差范数。 |
squared | bool, default=True 是计算平方误差范数还是误差范数。如果为True(默认),则返回平方误差范数。如果为False,则返回误差范数。 |
返回值 | 说明 |
---|---|
result | floatself 和comp_cov 协方差估计量之间的均方误差(按照Frobenius范式的含义) 。 |
fit(self,X,y = None )
根据给定的训练数据和参数,拟合Oracle近似收缩协方差模型。
参数 | 说明 |
---|---|
X | array-like of shape (n_samples, n_features) 训练数据,其中 n_samples 是样本数量,n_features 是特征数量。 |
y | Ignored 未使用,出于API一致性目的而存在。 |
返回值 | 说明 |
---|---|
self | object |
get_params(self, deep=True)
获取此估计器的参数。
参数 | 说明 |
---|---|
deep | bool, default=True 如果为True,则将返回此估计器与其所包含子对象的参数。 |
返回值 | 说明 |
---|---|
params | mapping of string to any 参数名称映射到其值。 |
get_precision(self)
获取精确度矩阵。
返回值 | 说明 |
---|---|
precision_ | array-like of shape (n_features, n_features) 与当前协方差对象关联的精度矩阵。 |
mahalanobis(self, X)
计算给定观测值的平方马氏距离。
参数 | 说明 |
---|---|
X | array-like of shape (n_samples, n_features) 观测值,用来计算马氏距离。假定观测值与fit中使用的数据来自相同的分布。 |
返回值 | 说明 |
---|---|
dist | ndarray of shape (n_samples,) 观测值的平方马氏距离。 |
score(self, X_test, y=None)
使用self.covariance_
作为协方差矩阵的估计值来计算高斯数据集的对数似然 。
参数 | 说明 |
---|---|
X_test | array-like of shape (n_samples, n_features) 计算似然性的测试数据集,其中n_samples是样本数,n_features是特征数。假定X_test与拟合(包括中心化)使用的数据来自相同的分布。 |
y | Ignored 未使用,出于API一致性目的而存在。 |
返回值 | 说明 |
---|---|
res | float 数据集以 self.covariance_ 作为其协方差矩阵的估计量的似然性。 |
set_params(self, **params)
设置此估计器的参数。
该方法适用于简单的估计器以及嵌套对象(例如管道)。后者具有形式参数<component>__<parameter>
以便可以更新嵌套对象的每个组件。
参数 | 说明 |
---|---|
**params | dict 估计器参数。 |
返回值 | 参数 |
---|---|
self | object 估计器对象。 |