2.6. 协方差估计#

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

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

2.6.1. 经验协方差#

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

可以使用包中的 empirical_covariance 函数计算样本的经验协方差矩阵,或者通过使用 EmpiricalCovariance 对象和 EmpiricalCovariance.fit 方法将 EmpiricalCovariance 对象拟合到数据样本。请注意,结果取决于数据是否居中,因此可能需要准确使用 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\)的非对角线系数的绝对值之和。用于解决此问题的算法是来自 Friedman 2008 Biostatistics 论文的 GLasso 算法。它与 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