# 1.2. 線性和二次判別分析
校驗者:
[@AnybodyHome](https://github.com/AnybodyHome)
[@numpy](https://github.com/apachecn/scikit-learn-doc-zh)
翻譯者:
[@FAME](https://github.com/apachecn/scikit-learn-doc-zh)
Linear Discriminant Analysis(線性判別分析)([`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis")) 和 Quadratic Discriminant Analysis (二次判別分析)([`discriminant_analysis.QuadraticDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis.html#sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis "sklearn.discriminant_analysis.QuadraticDiscriminantAnalysis")) 是兩個經典的分類器。 正如他們名字所描述的那樣,他們分別代表了線性決策平面和二次決策平面。
這些分類器十分具有吸引力,因為他們可以很容易計算得到閉式解(即解析解),其天生具有多分類的特性,在實踐中已經被證明很有效,并且無需調參。
**[](../auto_examples/classification/plot_lda_qda.html)**
以上這些圖像展示了 Linear Discriminant Analysis (線性判別分析)以及 Quadratic Discriminant Analysis (二次判別分析)的決策邊界。其中,最后一行表明了線性判別分析只能學習線性邊界, 而二次判別分析則可以學習二次邊界,因此它相對而言更加靈活。
示例:
[Linear and Quadratic Discriminant Analysis with covariance ellipsoid](../auto_examples/classification/plot_lda_qda.html#sphx-glr-auto-examples-classification-plot-lda-qda-py): LDA和QDA在特定數據上的對比
## 1.2.1. 使用線性判別分析來降維
[`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") 通過把輸入的數據投影到由最大化類之間分離的方向所組成的線性子空間,可以執行有監督降維(詳細的內容見下面的數學推導)。輸出的維度必然會比原來的類別數量更少的。因此它總體而言是十分強大的降維方式,同樣也僅僅在多分類環境下才能感覺到。
實現方式在 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform") 中。關于維度的數量可以通過 `n_components` 參數來調節。 值得注意的是,這個參數不會對 [`discriminant_analysis.LinearDiscriminantAnalysis.fit`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.fit") 或者 [`discriminant_analysis.LinearDiscriminantAnalysis.predict`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.predict") 產生影響。
示例:
[Comparison of LDA and PCA 2D projection of Iris dataset](../auto_examples/decomposition/plot_pca_vs_lda.html#sphx-glr-auto-examples-decomposition-plot-pca-vs-lda-py): 在 Iris 數據集對比 LDA 和 PCA 之間的降維差異
## 1.2.2. LDA 和 QDA 分類器的數學公式
LDA 和 QDA 都是源于簡單的概率模型,這些模型對于每一個類別  的相關分布  都可以通過貝葉斯定理所獲得。

我們選擇最大化條件概率的類別 .
更具體地說,對于線性以及二次判別分析,  被建模成密度多變量高斯分布:

為了把該模型作為分類器使用,我們只需要從訓練數據中估計出類的先驗概率  (通過每個類  的實例的比例得到) 類別均值  (通過經驗樣本的類別均值得到)以及協方差矩陣(通過經驗樣本的類別協方差或者正則化的估計器 estimator 得到: 見下面的 shrinkage 章節)。
在 LDA 中,每個類別  的高斯分布共享相同的協方差矩陣: for all 。這導致了兩者之間的線性決策表面,這可以通過比較對數概率比看出來![\log[P(y=k | X) / P(y=l | X)]](https://box.kancloud.cn/2e5e74a2d4b71700e220d404ee867cf7_221x19.jpg) 。
在 QDA 中,沒有關于高斯協方差矩陣  的假設,因此有了二次決策平面. 更多細節見 [\[3\]](#id7) .
Note
**與高斯樸素貝葉斯的關系**
如果在QDA模型中假設協方差矩陣是對角的,則輸入被假設為在每個類中是條件獨立的,所得的分類器等同于高斯樸素貝葉斯分類器 [`naive_bayes.GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 相同。
## 1.2.3. LDA 的降維數學公式
為了理解 LDA 在降維上的應用,從上面解釋的 LDA 分類規則的幾何重構開始是十分有用的。我們用  表示目標類別的總數。 由于在 LDA 中我們假設所有類別都有相同估計的協方差  ,所以我們可重新調節數據從而讓協方差相同。

在縮放之后對數據點進行分類相當于找到與歐幾里得距離中的數據點最接近的估計類別均值。但是它也可以在投影到  個由所有  個類生成的仿射子空間 之后完成。這也表明,LDA 分類器中存在一個利用線性投影到  個維度空間的降維工具。通過投影到線性子空間  上,我們可以進一步將維數減少到一個選定的  ,從而使投影后的  的方差最大化(實際上,為了實現轉換類均值 ,我們正在做一種形式的 PCA)。 這里的  對應于 [`discriminant_analysis.LinearDiscriminantAnalysis.transform`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform "sklearn.discriminant_analysis.LinearDiscriminantAnalysis.transform") 方法中使用的 `n_components` 參數。 詳情參考 [\[3\]](#id7) 。
## 1.2.4. Shrinkage(收縮)
收縮是一種在訓練樣本數量相比特征而言很小的情況下可以提升的協方差矩陣預測(準確性)的工具。 在這個情況下,經驗樣本協方差是一個很差的預測器。收縮 LDA 可以通過設置 [`discriminant_analysis.LinearDiscriminantAnalysis`](generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis "sklearn.discriminant_analysis.LinearDiscriminantAnalysis") 類的 `shrinkage` 參數為 ‘auto’ 來實現。
`shrinkage` parameter (收縮參數)的值同樣也可以手動被設置為 0-1 之間。特別地,0 值對應著沒有收縮(這意味著經驗協方差矩陣將會被使用), 而 1 值則對應著完全使用收縮(意味著方差的對角矩陣將被當作協方差矩陣的估計)。設置該參數在兩個極端值之間會估計一個(特定的)協方差矩陣的收縮形式
**[](../auto_examples/classification/plot_lda.html)**
## 1.2.5. 預估算法
默認的 solver 是 ‘svd’。它可以進行classification (分類) 以及 transform (轉換),而且它不會依賴于協方差矩陣的計算(結果)。這在特征數量特別大的時候十分具有優勢。然而,’svd’ solver 無法與 shrinkage (收縮)同時使用。
‘lsqr’ solver 則是一個高效的算法,它僅用于分類使用。它支持 shrinkage (收縮)。
‘eigen’(特征) solver 是基于 class scatter (類散度)與 class scatter ratio (類內離散率)之間的優化。 它可以被用于 classification (分類)以及 transform (轉換),此外它還同時支持收縮。然而,該解決方案需要計算協方差矩陣,因此它可能不適用于具有大量特征的情況。
Examples:
[Normal and Shrinkage Linear Discriminant Analysis for classification](../auto_examples/classification/plot_lda.html#sphx-glr-auto-examples-classification-plot-lda-py): Comparison of LDA classifiers with and without shrinkage.
References:
\[3\]*([1](#id4), [2](#id5))* “The Elements of Statistical Learning”, Hastie T., Tibshirani R., Friedman J., Section 4.3, p.106-119, 2008.\[4\]Ledoit O, Wolf M. Honey, I Shrunk the Sample Covariance Matrix. The Journal of Portfolio Management 30(4), 110-119, 2004.
- 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)
- 外部資源,視頻和談話