2.6. 协方差估计#

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

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

2.6.1. 经验协方差#

已知数据集的协方差矩阵可以通过经典的最大似然估计(或“经验协方差”)很好地近似,前提是观测值的数量足够大,以至于与特征的数量(描述观测值的变量)相比。更准确地说,样本的最大似然估计是相应总体协方差矩阵的渐近无偏估计。

可以使用包的 empirical_covariance 函数计算样本的经验协方差矩阵,或者通过将 EmpiricalCovariance 对象使用 EmpiricalCovariance.fit 方法拟合到数据样本中。请注意,结果取决于数据是否居中,因此可能需要使用 assume_centered 参数来准确地进行操作。更准确地说,如果 assume_centered=False,则假设测试集具有与训练集相同的均值向量。如果不是,则用户应该对两者进行居中,并使用 assume_centered=True

示例

2.6.2. 收缩协方差#

2.6.2.1. 基本收缩#

尽管最大似然估计量是协方差矩阵的渐近无偏估计量,但它不是协方差矩阵特征值的良好估计量,因此从其逆矩阵获得的精度矩阵并不准确。有时,由于数值原因,经验协方差矩阵甚至无法求逆。为了避免这种求逆问题,引入了经验协方差矩阵的变换:shrinkage

在 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\),该系数可以最小化估计协方差矩阵与真实协方差矩阵之间的均方误差。

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

注意

总体协方差矩阵各向同性时的案例

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

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

示例

参考文献

2.6.2.3. Oracle 近似收缩#

在数据服从高斯分布的假设下,Chen 等人 [2] 推导出一个公式,旨在选择一个收缩系数,该系数产生的均方误差小于 Ledoit 和 Wolf 公式给出的均方误差。得到的估计量被称为 Oracle 收缩近似协方差估计量。

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

../_images/sphx_glr_plot_covariance_estimation_001.png

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

参考文献

示例

../_images/sphx_glr_plot_lw_vs_oas_001.png

2.6.3. 稀疏逆协方差#

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

在小样本情况下,其中 n_samples 的数量级与 n_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 年的生物统计学论文。它与 R glasso 包中的算法相同。

示例

参考文献

2.6.4. 鲁棒协方差估计#

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

sklearn.covariance 包实现了协方差的鲁棒估计量,即最小协方差行列式 [3]

2.6.4.1. 最小协方差行列式#

最小协方差行列式估计量是 P.J. Rousseeuw 在 [3] 中引入的数据集协方差的鲁棒估计量。其思想是找到一定比例 (h) 的“良好”观测值,这些观测值不是异常值,并计算它们的经验协方差矩阵。然后对该经验协方差矩阵进行重新缩放,以补偿执行的观测值选择(“一致性步骤”)。在计算出最小协方差行列式估计量后,可以根据观测值的马氏距离为其分配权重,从而得到数据集协方差矩阵的重新加权估计(“重新加权步骤”)。

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

原始估计可以作为 MinCovDet 鲁棒协方差估计量对象的 raw_location_raw_covariance_ 属性访问。

参考文献

示例


异常值对位置和协方差估计的影响

使用马氏距离将内点与异常值分离

robust_vs_emp

mahalanobis