2.6. 协方差估计#

许多统计问题需要估计总体协方差矩阵,这可以看作是对数据集散点图形状的估计。大多数情况下,这种估计必须在样本上进行,而样本的特性(大小、结构、同质性)对估计质量有很大影响。sklearn.covariance 包提供了在各种设置下准确估计总体协方差矩阵的工具。

我们假设观测值是独立同分布(i.i.d.)的。

2.6.1. 经验协方差#

当观测值的数量足够大且相对于特征数量(描述观测值的变量)而言时,数据集的协方差矩阵可以通过经典的最大似然估计器(或“经验协方差”)很好地近似。更精确地说,样本的最大似然估计器是相应总体协方差矩阵的渐近无偏估计器。

样本的经验协方差矩阵可以使用包中的 empirical_covariance 函数计算,或者通过将 EmpiricalCovariance 对象与数据样本拟合,使用 EmpiricalCovariance.fit 方法来计算。请注意,结果取决于数据是否中心化,因此可能需要准确使用 assume_centered 参数。更精确地说,如果 assume_centered=True,则训练集和测试集中的所有特征都应具有零均值。如果不是,用户应自行中心化,或使用 assume_centered=False

示例

2.6.2. 收缩协方差#

2.6.2.1. 基本收缩#

尽管最大似然估计器是协方差矩阵的渐近无偏估计器,但它对协方差矩阵的特征值并不是一个好的估计器,因此通过其反演得到的精度矩阵并不准确。有时甚至会出现经验协方差矩阵因数值原因而无法反演的情况。为了避免这种反演问题,引入了一种对经验协方差矩阵的变换:收缩

在 scikit-learn 中,这种变换(带有用户定义的收缩系数)可以使用 shrunk_covariance 方法直接应用于预先计算的协方差。此外,可以使用 ShrunkCovariance 对象及其 ShrunkCovariance.fit 方法将收缩估计器拟合到数据。同样,结果取决于数据是否中心化,因此可能需要准确使用 assume_centered 参数。

从数学上讲,这种收缩包括减小经验协方差矩阵的最小和最大特征值之间的比率。这可以通过简单地根据给定的偏移量平移每个特征值来实现,这等效于找到协方差矩阵的 l2 惩罚最大似然估计器。在实践中,收缩归结为一个简单的凸变换:\(\Sigma_{\rm shrunk} = (1-\alpha)\hat{\Sigma} + \alpha\frac{{\rm Tr}\hat{\Sigma}}{p}\rm Id\)

选择收缩量 \(\alpha\) 相当于设置偏差/方差权衡,这将在下面讨论。

示例

2.6.2.2. Ledoit-Wolf 收缩#

在 2004 年的论文 [1] 中,O. Ledoit 和 M. Wolf 提出了一个公式来计算最小化估计协方差矩阵与真实协方差矩阵之间均方误差的最佳收缩系数 \(\alpha\)

Ledoit-Wolf 协方差矩阵估计器可以使用 sklearn.covariance 包中的 ledoit_wolf 函数计算,或者通过将 LedoitWolf 对象拟合到同一样本来获得。

注意

总体协方差矩阵为各向同性时的情形

值得注意的是,当样本数量远大于特征数量时,人们会期望不需要收缩。这背后的直觉是,如果总体协方差是满秩的,当样本数量增加时,样本协方差也将变为正定。因此,不需要收缩,方法应自动执行此操作。

然而,当总体协方差恰好是单位矩阵的倍数时,Ledoit-Wolf 过程中并非如此。在这种情况下,Ledoit-Wolf 收缩估计值随着样本数量的增加而接近 1。这表明 Ledoit-Wolf 意义上的协方差矩阵的最佳估计是单位矩阵的倍数。由于总体协方差已经是单位矩阵的倍数,Ledoit-Wolf 解决方案确实是一个合理的估计。

示例

References

2.6.2.3. Oracle Approximating Shrinkage(OAS)#

在数据呈高斯分布的假设下,Chen 等人 [2] 推导了一个公式,旨在选择一个收缩系数,使其产生的均方误差小于 Ledoit 和 Wolf 公式给出的均方误差。由此产生的估计器被称为 Oracle Approximating Shrinkage 协方差估计器。

OAS 协方差矩阵估计器可以使用 sklearn.covariance 包中的 oas 函数计算,或者通过将 OAS 对象拟合到同一样本来获得。

../_images/sphx_glr_plot_covariance_estimation_001.png

设置收缩时的偏差-方差权衡:比较 Ledoit-Wolf 和 OAS 估计器的选择#

References

示例

../_images/sphx_glr_plot_lw_vs_oas_001.png

2.6.3. 稀疏逆协方差#

协方差矩阵的逆矩阵,通常称为精度矩阵,与偏相关矩阵成比例。它给出了偏独立关系。换句话说,如果两个特征在以其他特征为条件的情况下是独立的,则精度矩阵中相应的系数将为零。这就是估计稀疏精度矩阵有意义的原因:通过从数据中学习独立关系,协方差矩阵的估计条件会更好。这被称为协方差选择

在小样本情况下,其中 n_samplesn_features 大小相近或更小,稀疏逆协方差估计器往往比收缩协方差估计器效果更好。然而,在相反的情况下,或者对于高度相关的数据,它们可能会在数值上不稳定。此外,与收缩估计器不同,稀疏估计器能够恢复非对角线结构。

GraphicalLasso 估计器使用 l1 惩罚来强制精度矩阵稀疏:alpha 参数越高,精度矩阵越稀疏。相应的 GraphicalLassoCV 对象使用交叉验证自动设置 alpha 参数。

../_images/sphx_glr_plot_sparse_cov_001.png

在非常小的样本设置中,最大似然、收缩和稀疏协方差和精度矩阵估计的比较。#

注意

结构恢复

从数据中的相关性恢复图形结构是一项具有挑战性的任务。如果您对此类恢复感兴趣,请记住:

  • 从相关矩阵比从协方差矩阵恢复更容易:在运行 GraphicalLasso 之前对观测值进行标准化

  • 如果底层图中的某些节点连接数远多于平均节点,则算法会漏掉其中一些连接。

  • 如果观测值数量相对于底层图中的边数不够大,您将无法恢复它。

  • 即使您处于有利的恢复条件下,通过交叉验证选择的 alpha 参数(例如使用 GraphicalLassoCV 对象)也会导致选择过多的边。然而,相关的边将比不相关的边具有更大的权重。

数学公式如下:

\[\hat{K} = \mathrm{argmin}_K \big( \mathrm{tr} S K - \mathrm{log} \mathrm{det} K + \alpha \|K\|_1 \big)\]

其中 \(K\) 是要估计的精度矩阵,\(S\) 是样本协方差矩阵。\(\|K\|_1\)\(K\) 的非对角线系数的绝对值之和。用于解决此问题的算法是 GLasso 算法,来自 Friedman 2008 Biostatistics 论文。它与 R glasso 包中的算法相同。

示例

References

2.6.4. 稳健协方差估计#

真实数据集经常受到测量或记录错误的影响。由于各种原因,也可能出现常规但不常见的观测值。非常不常见的观测值称为离群值。上面介绍的经验协方差估计器和收缩协方差估计器对数据中离群值的存在非常敏感。因此,应该使用稳健协方差估计器来估计真实数据集的协方差。或者,稳健协方差估计器可用于执行离群值检测,并根据数据的进一步处理来丢弃/降低某些观测值的权重。

sklearn.covariance 包实现了协方差的稳健估计器,即最小协方差行列式(Minimum Covariance Determinant)[3]

2.6.4.1. 最小协方差行列式#

最小协方差行列式估计器是 P.J. Rousseeuw 在 [3] 中引入的数据集协方差的稳健估计器。其思想是找到给定比例 (h) 的“好”观测值(非离群值)并计算它们的经验协方差矩阵。然后对这个经验协方差矩阵进行重新缩放,以补偿所执行的观测值选择(“一致性步骤”)。计算出最小协方差行列式估计器后,可以根据观测值的马氏距离赋予权重,从而得到数据集协方差矩阵的重新加权估计(“重新加权步骤”)。

Rousseeuw 和 Van Driessen [4] 开发了 FastMCD 算法来计算最小协方差行列式。在 scikit-learn 中,将 MCD 对象拟合到数据时使用此算法。FastMCD 算法同时计算数据集位置的稳健估计。

原始估计值可以通过 MinCovDet 稳健协方差估计器对象的 raw_location_raw_covariance_ 属性访问。

References

示例


离群值对位置和协方差估计的影响

使用马氏距离分离内点和离群值

robust_vs_emp

mahalanobis