# 2.6. 協方差估計
校驗者:
[@李昊偉](https://github.com/apachecn/scikit-learn-doc-zh)
[@小瑤](https://github.com/apachecn/scikit-learn-doc-zh)
翻譯者:
[@檸檬](https://github.com/apachecn/scikit-learn-doc-zh)
許多統計問題在某一時刻需要估計一個總體的協方差矩陣,這可以看作是對數據集散點圖形狀的估計。 大多數情況下,基于樣本的估計(基于其屬性,如尺寸,結構,均勻性), 對估計質量有很大影響。 sklearn.covariance 方法的目的是 提供一個能在各種設置下準確估計總體協方差矩陣的工具。
我們假設觀察是獨立的,相同分布的 (i.i.d.)。
已知數據集的協方差矩陣與經典 *maximum likelihood estimator(最大似然估計)* (或 “經驗協方差”) 很好地近似,條件是與特征數量(描述觀測值的變量)相比,觀測數量足夠大。 更準確地說,樣本的最大似然估計是相應的總體協方差矩陣的無偏估計。
樣本的經驗協方差矩陣可以使用 [`empirical_covariance`](generated/sklearn.covariance.empirical_covariance.html#sklearn.covariance.empirical_covariance "sklearn.covariance.empirical_covariance") 包的函數計算 , 或者通過 [`EmpiricalCovariance`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") 使用 [`EmpiricalCovariance.fit`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance.fit "sklearn.covariance.EmpiricalCovariance.fit")方法將對象與數據樣本擬合 。 要注意,取決于數據是否居中,結果會有所不同,所以可能需要準確使用參數 `assume_centered`。 如果使用 `assume_centered=False` ,則結果更準確。且測試集應該具有與訓練集相同的均值向量。 如果不是這樣,兩者都應該使用中心值, `assume_centered=True` 應該使用。
例子:
- See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](../auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) for an example on how to fit an [`EmpiricalCovariance`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") object to data.
## 2.8.1. 基本收斂
盡管是協方差矩陣的無偏估計, 最大似然估計不是協方差矩陣的特征值的一個很好的估計, 所以從反演得到的精度矩陣是不準確的。 有時,甚至出現數學原因,經驗協方差矩陣不能反轉。 為了避免這樣的反演問題,引入了經驗協方差矩陣的一種變換方式:`shrinkage` 。
在 scikit-learn 中,該變換(具有用戶定義的收縮系數) 可以直接應用于使用 [`shrunk_covariance`](generated/sklearn.covariance.shrunk_covariance.html#sklearn.covariance.shrunk_covariance "sklearn.covariance.shrunk_covariance") 方法預先計算協方差。 此外,協方差的收縮估計可以用 [`ShrunkCovariance`](generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance "sklearn.covariance.ShrunkCovariance") 對象 及其 [`ShrunkCovariance.fit`](generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance.fit "sklearn.covariance.ShrunkCovariance.fit") 方法擬合到數據中。 再次,根據數據是否居中,結果會不同,所以可能要準確使用參數 `assume_centered` 。
在數學上,這種收縮在于減少經驗協方差矩陣的最小和最大特征值之間的比率。 可以通過簡單地根據給定的偏移量移動每個特征值來完成, 這相當于找到協方差矩陣的l2懲罰的最大似然估計器(l2-penalized Maximum Likelihood Estimator)。在實踐中,收縮歸結為簡單的凸變換: .
選擇收縮量,  相當于設置偏差/方差權衡,下面將討論。
示例:
- See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](../auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) for an example on how to fit a [`ShrunkCovariance`](generated/sklearn.covariance.ShrunkCovariance.html#sklearn.covariance.ShrunkCovariance "sklearn.covariance.ShrunkCovariance") object to data.
## 2.8.2. Ledoit-Wolf 收斂
在他們的 2004 年的論文 [\[1\]](#id6) 中, O.Ledoit 和 M.Wolf 提出了一個公式, 用來計算優化的收斂系數  , 它使得估計協方差和實際協方差矩陣之間的均方差進行最小化。
在 sklearn.covariance 包中,可以使用 [`ledoit_wolf`](generated/sklearn.covariance.ledoit_wolf.html#sklearn.covariance.ledoit_wolf "sklearn.covariance.ledoit_wolf") 函數來計算樣本的 基于 Ledoit-Wolf estimator 的協方差, 或者可以針對同樣的樣本 通過擬合 [`LedoitWolf`](generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") 對象來獲得。
例子:
- See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](../auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py)關于如何將 [`LedoitWolf`](generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") 對象與數據擬合, 并將 Ledoit-Wolf 估計器的性能進行可視化的示例。
參考文獻:
[\[1\]](#id5)O. Ledoit and M. Wolf, “A Well-Conditioned Estimator for Large-Dimensional Covariance Matrices”, Journal of Multivariate Analysis, Volume 88, Issue 2, February 2004, pages 365-411.
## 2.8.3. Oracle 近似收縮
在數據為高斯分布的假設下,Chen et al. 等 [\[2\]](#id8) 推導出了一個公式,旨在 產生比 Ledoit 和 Wolf 公式具有更小均方差的收斂系數。 所得到的估計器被稱為協方差的 Oracle 收縮近似估計器。
在 sklearn.covariance 包中, OAS 估計的協方差可以使用函數 [`oas`](generated/sklearn.covariance.oas.html#sklearn.covariance.oas "sklearn.covariance.oas") 對樣本進行計算,或者可以通過將 [`OAS`](generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") 對象擬合到相同的樣本來獲得。
[](../auto_examples/covariance/plot_covariance_estimation.html)設定收縮時的偏差方差權衡:比較 Ledoit-Wolf 和 OAS 估計量的選擇
參考文獻:
[\[2\]](#id7)Chen et al., “Shrinkage Algorithms for MMSE Covariance Estimation”, IEEE Trans. on Sign. Proc., Volume 58, Issue 10, October 2010.
示例:
- See [Shrinkage covariance estimation: LedoitWolf vs OAS and max-likelihood](../auto_examples/covariance/plot_covariance_estimation.html#sphx-glr-auto-examples-covariance-plot-covariance-estimation-py) for an example on how to fit an [`OAS`](generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") object to data.
- See [Ledoit-Wolf vs OAS estimation](../auto_examples/covariance/plot_lw_vs_oas.html#sphx-glr-auto-examples-covariance-plot-lw-vs-oas-py) to visualize the Mean Squared Error difference between a [`LedoitWolf`](generated/sklearn.covariance.LedoitWolf.html#sklearn.covariance.LedoitWolf "sklearn.covariance.LedoitWolf") and an [`OAS`](generated/sklearn.covariance.OAS.html#sklearn.covariance.OAS "sklearn.covariance.OAS") estimator of the covariance.
[](../auto_examples/covariance/plot_lw_vs_oas.html)
協方差矩陣的逆矩陣,通常稱為精度矩陣(precision matrix),它與部分相關矩陣(partial correlation matrix)成正比。 它給出部分獨立性關系。換句話說,如果兩個特征在其他特征上有條件地獨立, 則精度矩陣中的對應系數將為零。這就是為什么估計一個稀疏精度矩陣是有道理的: 通過從數據中學習獨立關系,協方差矩陣的估計能更好處理。這被稱為協方差選擇。
在小樣本的情況,即 `n_samples` 是數量級 `n_features` 或更小, 稀疏的逆協方差估計往往比收斂的協方差估計更好。 然而,在相反的情況下,或者對于非常相關的數據,它們可能在數值上不穩定。 此外,與收斂估算不同,稀疏估計器能夠恢復非對角線結構 (off-diagonal structure)。
[`GraphLasso`](generated/sklearn.covariance.GraphLasso.html#sklearn.covariance.GraphLasso "sklearn.covariance.GraphLasso") 估計器使用 L1 懲罰執行關于精度矩陣的稀疏性: `alpha` 參數越高,精度矩陣的稀疏性越大。 相應的 [`GraphLassoCV`](generated/sklearn.covariance.GraphLassoCV.html#sklearn.covariance.GraphLassoCV "sklearn.covariance.GraphLassoCV") 對象使用交叉驗證來自動設置 `alpha` 參數。
[](../auto_examples/covariance/plot_sparse_cov.html)
Note
**結構恢復**
從數據中的相關性恢復圖形結構是一個具有挑戰性的事情。如果您對這種恢復感興趣,請記住:
- 相關矩陣的恢復比協方差矩陣更容易:在運行 [`GraphLasso`](generated/sklearn.covariance.GraphLasso.html#sklearn.covariance.GraphLasso "sklearn.covariance.GraphLasso") 前先標準化觀察值
- 如果底層圖具有比平均節點更多的連接節點,則算法將錯過其中一些連接。
- 如果您的觀察次數與底層圖形中的邊數相比不大,則不會恢復。
- 即使您具有良好的恢復條件,通過交叉驗證(例如使用GraphLassoCV對象)選擇的 Alpha 參數將導致選擇太多邊。 然而,相關邊緣將具有比不相關邊緣更重的權重。
數學公式如下:

其中: 是要估計的精度矩陣(precision matrix),  是樣本的協方差矩陣。  是非對角系數  (off-diagonal coefficients)的絕對值之和。 用于解決這個問題的算法是來自 Friedman 2008 Biostatistics 論文的 GLasso 算法。 它與 R 語言 `glasso` 包中的算法相同。
例子:
- [Sparse inverse covariance estimation](../auto_examples/covariance/plot_sparse_cov.html#sphx-glr-auto-examples-covariance-plot-sparse-cov-py):
合成數據示例,顯示結構的一些恢復,并與其他協方差估計器進行比較。
- [Visualizing the stock market structure](../auto_examples/applications/plot_stock_market.html#sphx-glr-auto-examples-applications-plot-stock-market-py): 真實股票市場數據示例,查找哪些信號最相關。
參考文獻:
- Friedman et al, [“Sparse inverse covariance estimation with the graphical lasso”](http://biostatistics.oxfordjournals.org/content/9/3/432.short), Biostatistics 9, pp 432, 2008
實際數據集通常是會有測量或記錄錯誤。合格但不常見的觀察也可能出于各種原因。 每個不常見的觀察稱為異常值。 上面提出的經驗協方差估計器和收縮協方差估計器對數據中異常觀察值非常敏感。 因此,應該使用更好的協方差估計(robust covariance estimators)來估算其真實數據集的協方差。 或者,可以使用更好的協方差估計器(robust covariance estimators)來執行異常值檢測, 并根據數據的進一步處理,丟棄/降低某些觀察值。
`sklearn.covariance` 包實現了 robust estimator of covariance, 即 Minimum Covariance Determinant [\[3\]](#id14) 。
## 2.10.1. 最小協方差決定
最小協方差決定(Minimum Covariance Determinant)估計器是 由 P.J. Rousseeuw 在 [\[3\]](#id14) 中引入的數據集協方差的魯棒估計 (robust estimator)。 這個想法是找出一個給定比例(h)的 “好” 觀察值,它們不是離群值, 且可以計算其經驗協方差矩陣。 然后將該經驗協方差矩陣重新縮放以補償所執行的觀察選擇(”consistency step(一致性步驟)”)。 計算最小協方差決定估計器后,可以根據其馬氏距離(Mahalanobis distance)給出觀測值的權重, 這導致數據集的協方差矩陣的重新加權估計(”reweighting step(重新加權步驟)”)。
Rousseeuw 和 Van Driessen [\[4\]](#id15) 開發了 FastMCD 算法,以計算最小協方差決定因子(Minimum Covariance Determinant)。 在 scikit-learn 中,該算法在將 MCD 對象擬合到數據時應用。FastMCD 算法同時計算數據集位置的魯棒估計。
Raw估計可通過 [`MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 對象的 `raw_location_` 和 `raw_covariance_` 屬性獲得。
參考文獻:
\[3\]*([1](#id10), [2](#id12))* P. J. Rousseeuw. Least median of squares regression. J. Am Stat Ass, 79:871, 1984.[\[4\]](#id13)A Fast Algorithm for the Minimum Covariance Determinant Estimator, 1999, American Statistical Association and the American Society for Quality, TECHNOMETRICS.
例子:
- See [Robust vs Empirical covariance estimate](../auto_examples/covariance/plot_robust_vs_empirical_covariance.html#sphx-glr-auto-examples-covariance-plot-robust-vs-empirical-covariance-py)關于如何將對象 [`MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 與數據擬合的示例, 盡管存在異常值,但估計結果仍然比較準確。
- See [Robust covariance estimation and Mahalanobis distances relevance](../auto_examples/covariance/plot_mahalanobis_distances.html#sphx-glr-auto-examples-covariance-plot-mahalanobis-distances-py)馬氏距離(Mahalanobis distance),針對協方差估計器 [`EmpiricalCovariance`](generated/sklearn.covariance.EmpiricalCovariance.html#sklearn.covariance.EmpiricalCovariance "sklearn.covariance.EmpiricalCovariance") 和 [`MinCovDet`](generated/sklearn.covariance.MinCovDet.html#sklearn.covariance.MinCovDet "sklearn.covariance.MinCovDet") 之間的差異進行可視化。(所以我們得到了精度矩陣的更好估計)
Influence of outliers on location and covariance estimatesSeparating inliers from outliers using a Mahalanobis distance[](../auto_examples/covariance/plot_robust_vs_empirical_covariance.html)[](../auto_examples/covariance/plot_mahalanobis_distances.html)
- scikit-learn 0.19 中文文檔
- 用戶指南
- 1. 監督學習
- 1.1. 廣義線性模型
- 1.2. 線性和二次判別分析
- 1.3. 內核嶺回歸
- 1.4. 支持向量機
- 1.5. 隨機梯度下降
- 1.6. 最近鄰
- 1.7. 高斯過程
- 1.8. 交叉分解
- 1.9. 樸素貝葉斯
- 1.10. 決策樹
- 1.11. 集成方法
- 1.12. 多類和多標簽算法
- 1.13. 特征選擇
- 1.14. 半監督學習
- 1.15. 等式回歸
- 1.16. 概率校準
- 1.17. 神經網絡模型(有監督)
- 2. 無監督學習
- 2.1. 高斯混合模型
- 2.2. 流形學習
- 2.3. 聚類
- 2.4. 雙聚類
- 2.5. 分解成分中的信號(矩陣分解問題)
- 2.6. 協方差估計
- 2.7. 經驗協方差
- 2.8. 收斂協方差
- 2.9. 稀疏逆協方差
- 2.10. Robust 協方差估計
- 2.11. 新奇和異常值檢測
- 2.12. 密度估計
- 2.13. 神經網絡模型(無監督)
- 3. 模型選擇和評估
- 3.1. 交叉驗證:評估估算器的表現
- 3.2. 調整估計器的超參數
- 3.3. 模型評估: 量化預測的質量
- 3.4. 模型持久化
- 3.5. 驗證曲線: 繪制分數以評估模型
- 4. 數據集轉換
- 4.1. Pipeline(管道)和 FeatureUnion(特征聯合): 合并的評估器
- 4.2. 特征提取
- 4.3. 預處理數據
- 4.4. 無監督降維
- 4.5. 隨機投影
- 4.6. 內核近似
- 4.7. 成對的矩陣, 類別和核函數
- 4.8. 預測目標 (y) 的轉換
- 5. 數據集加載工具
- 6. 大規模計算的策略: 更大量的數據
- 7. 計算性能
- 教程
- 使用 scikit-learn 介紹機器學習
- 關于科學數據處理的統計學習教程
- 機器學習: scikit-learn 中的設置以及預估對象
- 監督學習:從高維觀察預測輸出變量
- 模型選擇:選擇估計量及其參數
- 無監督學習: 尋求數據表示
- 把它們放在一起
- 尋求幫助
- 處理文本數據
- 選擇正確的評估器(estimator)
- 外部資源,視頻和談話