2.6. 协方差估计#

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

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

2.6.1. 经验协方差#

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

样本的经验协方差矩阵可以使用包中的 empirical_covariance 函数计算,或者通过使用 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\),该系数能使估计协方差矩阵与真实协方差矩阵之间的均方误差最小化。

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

注意

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

值得注意的是,当样本数量远大于特征数量时,通常预期不需要收缩。其直觉在于,如果总体协方差是满秩的,那么随着样本数量的增加,样本协方差也将变为正定。因此,不需要收缩,方法应该自动完成这一点。

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

示例

参考文献

2.6.2.3. Oracle 近似收缩(OAS)#

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

协方差矩阵的 OAS 估计器可以使用 sklearn.covariance 包中的 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_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 年的生物统计学论文。它与 R 语言 glasso 包中的算法相同。

示例

参考文献

2.6.4. 鲁棒协方差估计#

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

sklearn.covariance 包实现了一个鲁棒的协方差估计器:最小协方差行列式(Minimum Covariance Determinant)[3]

2.6.4.1. 最小协方差行列式(MCD)#

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

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

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

参考文献

示例


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

使用马氏距离区分正常值和异常值

robust_vs_emp

mahalanobis