1.2. 線性與二次判別分析#
線性判別分析 (LinearDiscriminantAnalysis
) 和二次判別分析 (QuadraticDiscriminantAnalysis
) 是兩種經典的分類器,顧名思義,它們分別具有線性與二次的決策邊界。
這些分類器之所以吸引人,是因為它們具有可以輕鬆計算的閉式解、本質上是多類別的、已被證明在實踐中效果良好,而且沒有需要調整的超參數。
該圖顯示了線性判別分析和二次判別分析的決策邊界。底行演示了線性判別分析只能學習線性邊界,而二次判別分析可以學習二次邊界,因此更具彈性。
範例
具有共變異數橢圓的線性與二次判別分析:比較 LDA 和 QDA 在合成資料上的表現。
1.2.1. 使用線性判別分析進行降維#
LinearDiscriminantAnalysis
可以通過將輸入資料投影到一個線性子空間來執行監督式降維,該子空間由最大化類別之間分離的方向組成(在下面數學部分討論的精確意義上)。輸出的維度必然小於類別的數量,因此這通常是一個相當強的降維,並且僅在多類別設定中才有意義。
這在 transform
方法中實現。可以使用 n_components
參數設定所需的維度。此參數對 fit
和 predict
方法沒有影響。
範例
Iris 資料集的 LDA 和 PCA 2D 投影比較:比較 LDA 和 PCA 對 Iris 資料集進行降維的表現
1.2.2. LDA 和 QDA 分類器的數學公式#
LDA 和 QDA 都可以從簡單的機率模型中推導出來,這些模型為每個類別 \(k\) 建模資料的類別條件分佈 \(P(X|y=k)\)。然後,對於每個訓練樣本 \(x \in \mathcal{R}^d\),可以使用貝氏規則獲得預測值
我們選擇使此後驗機率最大化的類別 \(k\)。
更具體地說,對於線性與二次判別分析,\(P(x|y)\) 被建模為具有密度的多元高斯分佈
其中 \(d\) 是特徵的數量。
1.2.2.1. QDA#
根據上述模型,後驗的對數為
其中常數項 \(Cst\) 對應於分母 \(P(x)\),以及高斯分佈中的其他常數項。預測的類別是使此對數後驗值最大化的類別。
注意
與高斯樸素貝氏的關係
如果在 QDA 模型中假設共變異數矩陣是對角的,則假設輸入在每個類別中都是條件獨立的,並且產生的分類器等效於高斯樸素貝氏分類器 naive_bayes.GaussianNB
。
1.2.2.2. LDA#
LDA 是 QDA 的一個特例,其中假設每個類別的高斯分佈共享相同的共變異數矩陣:所有 \(k\) 的 \(\Sigma_k = \Sigma\)。這將對數後驗值簡化為
項 \((x-\mu_k)^t \Sigma^{-1} (x-\mu_k)\) 對應於樣本 \(x\) 和平均值 \(\mu_k\) 之間的馬氏距離。馬氏距離會告知 \(x\) 與 \(\mu_k\) 的接近程度,同時也考慮了每個特徵的變異數。因此,我們可以將 LDA 解釋為將 \(x\) 分配給其平均值在馬氏距離方面最接近的類別,同時也考慮了類別先驗機率。
LDA 的對數後驗值也可以寫成 [3]
其中 \(\omega_k = \Sigma^{-1} \mu_k\) 且 \(\omega_{k0} = -\frac{1}{2} \mu_k^t\Sigma^{-1}\mu_k + \log P (y = k)\)。這些量分別對應於 coef_
和 intercept_
屬性。
從上述公式可以清楚地看出,LDA 具有線性決策面。在 QDA 的情況下,對於高斯分佈的共變異數矩陣 \(\Sigma_k\) 沒有假設,因此產生二次決策面。有關更多詳細資訊,請參閱 [1]。
1.2.3. LDA 降維的數學公式#
首先請注意,K 平均值 \(\mu_k\) 是 \(\mathcal{R}^d\) 中的向量,並且它們位於維度最多為 \(K - 1\) 的仿射子空間 \(H\) 中(2 個點位於一條線上,3 個點位於一個平面上等等)。
如上所述,我們可以將 LDA 解釋為將 \(x\) 分配給其平均值 \(\mu_k\) 在馬氏距離方面最接近的類別,同時也考慮了類別先驗機率。或者,LDA 等效於首先將資料球形化,以便共變異數矩陣是單位矩陣,然後將 \(x\) 分配給歐氏距離方面最接近的平均值(仍然考慮類別先驗值)。
在這個 d 維空間中計算歐幾里得距離,等同於先將資料點投影到 \(H\),然後在那裡計算距離(因為其他維度在距離上對每個類別的貢獻是相同的)。換句話說,如果 \(x\) 在原始空間中最接近 \(\mu_k\),那麼在 \(H\) 中也會是如此。這表明,LDA 分類器中隱含著將資料線性投影到 \(K-1\) 維空間的降維操作。
我們可以將維度進一步降低到選定的 \(L\),方法是投影到線性子空間 \(H_L\),該子空間可以最大化投影後 \(\mu^*_k\) 的變異數(實際上,我們是對轉換後的類別均值 \(\mu^*_k\) 進行一種 PCA)。此 \(L\) 對應於 transform
方法中使用的 n_components
參數。詳情請參閱 [1]。
1.2.4. 收縮和共變異數估計器#
收縮是一種正規化形式,用於在訓練樣本數量相對於特徵數量較少的情況下,改善共變異數矩陣的估計。在這種情況下,經驗樣本共變異數是一個較差的估計器,而收縮有助於提高分類器的泛化性能。可以透過將 LinearDiscriminantAnalysis
類別的 shrinkage
參數設定為 ‘auto’ 來使用收縮 LDA。這會依照 Ledoit 和 Wolf 提出的引理 [2],以解析方式自動確定最佳的收縮參數。請注意,目前收縮僅在將 solver
參數設定為 ‘lsqr’ 或 ‘eigen’ 時才有效。
shrinkage
參數也可以手動設定在 0 和 1 之間。特別是,值 0 對應於不收縮(這表示將使用經驗共變異數矩陣),而值 1 對應於完全收縮(這表示將使用變異數的對角矩陣作為共變異數矩陣的估計)。將此參數設定為這兩個極值之間的值,將會估計出收縮版本的共變異數矩陣。
共變異數的收縮 Ledoit 和 Wolf 估計器可能並不總是最佳選擇。例如,如果資料的分佈是常態分佈,則 Oracle Approximating Shrinkage 估計器 sklearn.covariance.OAS
會產生比使用收縮=”auto” 時 Ledoit 和 Wolf 公式所給的均方誤差更小的均方誤差。在 LDA 中,假設資料在條件上是以類別為條件的高斯分佈。如果這些假設成立,則使用具有 OAS 共變異數估計器的 LDA 將會產生比使用 Ledoit 和 Wolf 或經驗共變異數估計器更好的分類準確度。
可以使用 discriminant_analysis.LinearDiscriminantAnalysis
類別的 covariance_estimator
參數來選擇共變異數估計器。共變異數估計器應該具有 fit 方法和 covariance_
屬性,就像 sklearn.covariance
模組中的所有共變異數估計器一樣。
範例
用於分類的常態、Ledoit-Wolf 和 OAS 線性判別分析:比較具有經驗、Ledoit Wolf 和 OAS 共變異數估計器的 LDA 分類器。
1.2.5. 估計演算法#
使用 LDA 和 QDA 需要計算對數後驗機率,這取決於類別先驗機率 \(P(y=k)\)、類別均值 \(\mu_k\) 和共變異數矩陣。
‘svd’ 求解器是用於 LinearDiscriminantAnalysis
的預設求解器,也是 QuadraticDiscriminantAnalysis
唯一可用的求解器。它可以執行分類和轉換(對於 LDA)。由於它不依賴於共變異數矩陣的計算,因此在特徵數量較多的情況下,‘svd’ 求解器可能更佳。‘svd’ 求解器不能與收縮一起使用。對於 QDA,使用 SVD 求解器是基於以下事實:共變異數矩陣 \(\Sigma_k\) 依照定義等於 \(\frac{1}{n - 1} X_k^tX_k = \frac{1}{n - 1} V S^2 V^t\),其中 \(V\) 來自(中心化)矩陣的 SVD:\(X_k = U S V^t\)。事實證明,我們可以在不必顯式計算 \(\Sigma\) 的情況下計算上述對數後驗機率:透過 \(X\) 的 SVD 計算 \(S\) 和 \(V\) 就足夠了。對於 LDA,將計算兩個 SVD:中心化輸入矩陣 \(X\) 的 SVD 和類別均值向量的 SVD。
‘lsqr’ 求解器是一種僅適用於分類的高效演算法。它需要顯式計算共變異數矩陣 \(\Sigma\),並支援收縮和自訂共變異數估計器。此求解器透過求解 \(\Sigma \omega = \mu_k\) 來計算係數 \(\omega_k = \Sigma^{-1}\mu_k\),從而避免顯式計算逆矩陣 \(\Sigma^{-1}\)。
‘eigen’ 求解器基於類別間散佈與類別內散佈比率的優化。它可以用於分類和轉換,並且支援收縮。但是,‘eigen’ 求解器需要計算共變異數矩陣,因此可能不適用於特徵數量較多的情況。
參考文獻