.. _covariance: =================================================== 协方差估计 =================================================== .. currentmodule:: sklearn.covariance 许多统计问题需要估计一个总体的协方差矩阵,这可以看作是对数据集散点图形状的估计。大多数情况下,这种估计必须在样本上进行,样本的属性(大小、结构、同质性)对估计的质量有很大影响。:mod:`sklearn.covariance` 包提供了在各种设置下准确估计总体协方差矩阵的工具。 我们假设观测值是独立同分布的(i.i.d.)。 经验协方差 ==================== 数据集的协方差矩阵已知可以通过经典的*最大似然估计器*(或“经验协方差”)很好地近似,前提是观测值的数量相对于特征数量(描述观测值的变量)足够大。更准确地说,样本的最大似然估计器是相应总体协方差矩阵的渐近无偏估计器。 样本的经验协方差矩阵可以使用包中的 :func:`empirical_covariance` 函数计算,或者通过使用 :meth:`EmpiricalCovariance.fit` 方法将 :class:`EmpiricalCovariance` 对象拟合到数据样本来计算。请注意,结果取决于数据是否已中心化,因此可能需要准确使用 ``assume_centered`` 参数。更准确地说,如果 ``assume_centered=False`` ,则测试集应具有与训练集相同的均值向量。如果不是,两者都应由用户中心化,并使用 ``assume_centered=True`` 。 .. rubric:: 示例 * 参见 :ref:`sphx_glr_auto_examples_covariance_plot_covariance_estimation.py` 以了解如何将 :class:`EmpiricalCovariance` 对象拟合到数据的示例。 .. _shrunk_covariance: 收缩协方差 ========== 基本收缩 -------- 尽管最大似然估计器是协方差矩阵的渐近无偏估计器,但它并不是协方差矩阵特征值的良好估计器,因此通过其逆运算得到的精度矩阵并不准确。有时,由于数值原因,经验协方差矩阵甚至无法求逆。为了避免这种求逆问题,引入了经验协方差矩阵的变换: ``收缩`` 。 在 scikit-learn 中,这种变换(带有用户定义的收缩系数)可以直接应用于预先计算的协方差矩阵,使用 :func:`shrunk_covariance` 方法。此外,协方差矩阵的收缩估计器可以通过 :class:`ShrunkCovariance` 对象及其 :meth:`ShrunkCovariance.fit` 方法拟合数据。同样,结果取决于数据是否居中,因此可能需要准确使用 ``assume_centered`` 参数。 从数学上讲,这种收缩在于减少经验协方差矩阵的最小和最大特征值之间的比率。可以通过简单地将每个特征值根据给定的偏移量进行移动来实现,这相当于找到协方差矩阵的 l2 惩罚最大似然估计器。实际上,收缩归结为一个简单的凸变换::math:`\Sigma_{\rm shrunk} = (1-\alpha)\hat{\Sigma} + \alpha\frac{{\rm Tr}\hat{\Sigma}}{p}\rm Id` 。 选择收缩量 :math:`\alpha` 相当于设置偏差/方差权衡,这将在下面讨论。 .. rubric:: 示例 * 请参阅 :ref:`sphx_glr_auto_examples_covariance_plot_covariance_estimation.py` 以了解如何将 :class:`ShrunkCovariance` 对象拟合到数据的示例。 Ledoit-Wolf 收缩 ----------------- 在他们 2004 年的论文 [1]_ 中,O. Ledoit 和 M. Wolf 提出了一种公式 计算最优收缩系数 :math:`\alpha` ,该系数最小化估计的协方差矩阵与真实协方差矩阵之间的均方误差。 Ledoit-Wolf 协方差矩阵估计器可以在样本上通过 :mod:`sklearn.covariance` 包中的 :meth:`ledoit_wolf` 函数计算,或者通过将 :class:`LedoitWolf` 对象拟合到同一样本来获得。 .. note:: **当总体协方差矩阵为各向同性时的情形** 需要注意的是,当样本数量远大于特征数量时,预期不需要进行收缩。背后的直觉是,如果总体协方差是满秩的,随着样本数量的增加,样本协方差也将变为正定矩阵。因此,不需要进行收缩,方法应该自动实现这一点。 然而,在 Ledoit-Wolf 过程中,当总体协方差恰好是单位矩阵的倍数时,情况并非如此。在这种情况下,随着样本数量的增加,Ledoit-Wolf 收缩估计趋近于 1。这表明在 Ledoit-Wolf 意义上,协方差矩阵的最优估计是单位矩阵的倍数。由于总体协方差已经是单位矩阵的倍数,Ledoit-Wolf 解决方案确实是一个合理的估计。 .. rubric:: 示例 * 参见 :ref:`sphx_glr_auto_examples_covariance_plot_covariance_estimation.py` 示例,了解如何将 :class:`LedoitWolf` 对象拟合到数据,并可视化 Ledoit-Wolf 估计器在似然性方面的性能。 .. rubric:: 参考文献 .. [1] O. Ledoit 和 M. Wolf,"A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices",《多元分析杂志》,第 88 卷,第 2 期,2004 年 2 月,第 365-411 页。 .. _oracle_approximating_shrinkage: Oracle 近似收缩 ------------------------------ 在假设数据呈高斯分布的前提下,Chen 等人 [2]_ 推导出一个公式,旨在选择一个收缩系数,使其产生的均方误差小于 Ledoit 和 Wolf 公式给出的均方误差。由此得到的估计器被称为 Oracle 收缩近似估计器(Oracle Shrinkage Approximating estimator)。 协方差矩阵的 OAS 估计器可以通过 :mod:`sklearn.covariance` 包中的 :meth:`oas` 函数在样本上计算,或者通过将 :class:`OAS` 对象拟合到同一样本来获得。 .. figure:: ../auto_examples/covariance/images/sphx_glr_plot_covariance_estimation_001.png :target: ../auto_examples/covariance/plot_covariance_estimation.html :align: center :scale: 65% 设置收缩时的偏差-方差权衡:比较 Ledoit-Wolf 和 OAS 估计器的选择 .. rubric:: 参考文献 .. [2] :arxiv:`"Shrinkage algorithms for MMSE covariance estimation.", Chen, Y., Wiesel, A., Eldar, Y. C., & Hero, A. O. IEEE Transactions on Signal Processing, 58(10), 5016-5029, 2010. <0907.4698>` .. rubric:: 示例 * 参见 :ref:`sphx_glr_auto_examples_covariance_plot_covariance_estimation.py` 了解如何将 :class:`OAS` 对象拟合到数据的示例。 * 参见 :ref:`sphx_glr_auto_examples_covariance_plot_lw_vs_oas.py` 以可视化 :class:`LedoitWolf` 和 :class:`OAS` 协方差估计器之间的均方误差差异。 .. figure:: ../auto_examples/covariance/images/sphx_glr_plot_lw_vs_oas_001.png :target: ../auto_examples/covariance/plot_lw_vs_oas.html :align: center :scale: 75% .. _sparse_inverse_covariance: 稀疏逆协方差 ========================== 协方差矩阵的逆矩阵,通常称为精度矩阵,与偏相关矩阵成比例。它给出了部分独立关系。换句话说,如果两个特征在给定其他特征的情况下是条件独立的,则精度矩阵中的相应系数将为零。因此,估计稀疏精度矩阵的非零系数相当于选择相互依赖的特征子集。 在其他条件独立的情况下,精度矩阵中对应的系数将为零。这就是为什么估计一个稀疏精度矩阵是有意义的:通过从数据中学习独立关系,协方差矩阵的估计会得到更好的条件。这被称为*协方差选择*。 在小样本情况下,即 ``n_samples`` 的数量级与 ``n_features`` 相当或更小,稀疏逆协方差估计器往往比收缩协方差估计器效果更好。然而,在相反的情况下,或者对于高度相关的数据,它们在数值上可能不稳定。此外,与收缩估计器不同,稀疏估计器能够恢复非对角线结构。 :class:`GraphicalLasso` 估计器使用 l1 惩罚来强制精度矩阵的稀疏性:其 ``alpha`` 参数越高,精度矩阵越稀疏。相应的 :class:`GraphicalLassoCV` 对象使用交叉验证来自动设置 ``alpha`` 参数。 .. figure:: ../auto_examples/covariance/images/sphx_glr_plot_sparse_cov_001.png :target: ../auto_examples/covariance/plot_sparse_cov.html :align: center :scale: 60% *在非常小样本设置下,最大似然估计、收缩估计和稀疏估计的协方差和精度矩阵的比较。* .. note:: **结构恢复** 从数据中的相关性恢复图形结构是一件具有挑战性的事情。如果你对这种恢复感兴趣,请记住以下几点: * 从相关矩阵恢复比从协方差矩阵恢复更容易:在运行 :class:`GraphicalLasso` 之前标准化你的观测值 * 如果底层图中的节点比平均节点有更多的连接,算法将错过其中的一些连接。 * 如果你的观测数量相对于底层图中的边数不大,你将无法恢复它。 * 即使你处于有利的恢复条件下,交叉验证选择的alpha参数(例如使用:class:`GraphicalLassoCV` 对象)将导致选择过多的边。然而,相关边的权重会比无关边更重。 数学公式如下: .. math:: \hat{K} = \mathrm{argmin}_K \big( \mathrm{tr} S K - \mathrm{log} \mathrm{det} K + \alpha \|K\|_1 \big) 其中:math:`K` 是待估计的精度矩阵,:math:`S` 是样本协方差矩阵。:math:`\|K\|_1` 是:math:`K` 的非对角系数的绝对值之和。用于解决此问题的算法是Friedman 2008年Biostatistics论文中的GLasso算法。它与R语言中的 ``glasso`` 包使用的算法相同。 .. rubric:: 示例 * :ref:`sphx_glr_auto_examples_covariance_plot_sparse_cov.py` : 在合成数据上的示例,展示了一些结构的恢复,并与其他协方差估计器进行比较。 * :ref:`sphx_glr_auto_examples_applications_plot_stock_market.py` : 在真实股票市场数据上的示例,找出哪些符号之间联系最紧密。 .. rubric:: 参考文献 * Friedman等人, `"Sparse inverse covariance estimation with the graphical lasso" `_ ,Biostatistics 9,第432页,2008年 .. _robust_covariance: 鲁棒协方差估计 ================ 实际数据集往往受到测量或记录错误的影响。由于各种原因,也可能出现常规但罕见的观测值。非常不常见的观测值被称为异常值。上述的经验协方差估计器和收缩协方差估计器对数据中的异常值非常敏感。因此,应使用鲁棒协方差估计器来估计实际数据的协方差。 集合。或者,可以使用稳健的协方差估计器进行异常值检测,并根据对数据的进一步处理丢弃/降低某些观测值的权重。 ``sklearn.covariance`` 包实现了一个稳健的协方差估计器,即最小协方差行列式 [3]_。 最小协方差行列式 ------------------ 最小协方差行列式估计器是由 P.J. Rousseeuw 在 [3]_ 中引入的一种数据集协方差的稳健估计器。其思想是找到给定比例(h)的“良好”观测值,这些观测值不是异常值,并计算它们的经验协方差矩阵。然后,该经验协方差矩阵会进行缩放以补偿所执行的观测值选择(“一致性步骤”)。计算出最小协方差行列式估计器后,可以根据观测值的马氏距离为其赋予权重,从而得到数据集协方差矩阵的重新加权估计(“重新加权步骤”)。 Rousseeuw 和 Van Driessen [4]_ 开发了 FastMCD 算法,以计算最小协方差行列式。当将 MCD 对象拟合到数据时,scikit-learn 中使用了该算法。FastMCD 算法同时也会计算数据集位置的稳健估计。 原始估计值可以通过 :class:`MinCovDet` 稳健协方差估计器对象的 ``raw_location_`` 和 ``raw_covariance_`` 属性访问。 .. rubric:: 参考文献 .. [3] P. J. Rousseeuw. Least median of squares regression. J. Am Stat Ass, 79:871, 1984. .. [4] A Fast Algorithm for the Minimum Covariance Determinant Estimator, 1999, American Statistical Association and the American Society for Quality, TECHNOMETRICS. .. rubric:: 示例 * 请参阅 :ref:`sphx_glr_auto_examples_covariance_plot_robust_vs_empirical_covariance.py` ,了解如何将 :class:`MinCovDet` 对象拟合到数据,并查看尽管存在异常值,估计值仍然保持准确。 * 参见 :ref:`sphx_glr_auto_examples_covariance_plot_mahalanobis_distances.py` ,以 可视化 :class:`EmpiricalCovariance` 和 :class:`MinCovDet` 协方差估计器在马氏距离方面的差异 (从而我们也能更好地估计精度矩阵)。 .. |robust_vs_emp| image:: ../auto_examples/covariance/images/sphx_glr_plot_robust_vs_empirical_covariance_001.png :target: ../auto_examples/covariance/plot_robust_vs_empirical_covariance.html :scale: 49% .. |mahalanobis| image:: ../auto_examples/covariance/images/sphx_glr_plot_mahalanobis_distances_001.png :target: ../auto_examples/covariance/plot_mahalanobis_distances.html :scale: 49%