1.2. 線性與二次判別分析#

線性判別分析 (LinearDiscriminantAnalysis) 和二次判別分析 (QuadraticDiscriminantAnalysis) 是兩種經典的分類器,顧名思義,它們分別具有線性與二次的決策邊界。

這些分類器之所以吸引人,是因為它們具有可以輕鬆計算的閉式解、本質上是多類別的、已被證明在實踐中效果良好,而且沒有需要調整的超參數。

ldaqda

該圖顯示了線性判別分析和二次判別分析的決策邊界。底行演示了線性判別分析只能學習線性邊界,而二次判別分析可以學習二次邊界,因此更具彈性。

範例

1.2.1. 使用線性判別分析進行降維#

LinearDiscriminantAnalysis 可以通過將輸入資料投影到一個線性子空間來執行監督式降維,該子空間由最大化類別之間分離的方向組成(在下面數學部分討論的精確意義上)。輸出的維度必然小於類別的數量,因此這通常是一個相當強的降維,並且僅在多類別設定中才有意義。

這在 transform 方法中實現。可以使用 n_components 參數設定所需的維度。此參數對 fitpredict 方法沒有影響。

範例

1.2.2. LDA 和 QDA 分類器的數學公式#

LDA 和 QDA 都可以從簡單的機率模型中推導出來,這些模型為每個類別 \(k\) 建模資料的類別條件分佈 \(P(X|y=k)\)。然後,對於每個訓練樣本 \(x \in \mathcal{R}^d\),可以使用貝氏規則獲得預測值

\[P(y=k | x) = \frac{P(x | y=k) P(y=k)}{P(x)} = \frac{P(x | y=k) P(y = k)}{ \sum_{l} P(x | y=l) \cdot P(y=l)}\]

我們選擇使此後驗機率最大化的類別 \(k\)

更具體地說,對於線性與二次判別分析,\(P(x|y)\) 被建模為具有密度的多元高斯分佈

\[P(x | y=k) = \frac{1}{(2\pi)^{d/2} |\Sigma_k|^{1/2}}\exp\left(-\frac{1}{2} (x-\mu_k)^t \Sigma_k^{-1} (x-\mu_k)\right)\]

其中 \(d\) 是特徵的數量。

1.2.2.1. QDA#

根據上述模型,後驗的對數為

\[\begin{split}\log P(y=k | x) &= \log P(x | y=k) + \log P(y = k) + Cst \\ &= -\frac{1}{2} \log |\Sigma_k| -\frac{1}{2} (x-\mu_k)^t \Sigma_k^{-1} (x-\mu_k) + \log P(y = k) + Cst,\end{split}\]

其中常數項 \(Cst\) 對應於分母 \(P(x)\),以及高斯分佈中的其他常數項。預測的類別是使此對數後驗值最大化的類別。

注意

與高斯樸素貝氏的關係

如果在 QDA 模型中假設共變異數矩陣是對角的,則假設輸入在每個類別中都是條件獨立的,並且產生的分類器等效於高斯樸素貝氏分類器 naive_bayes.GaussianNB

1.2.2.2. LDA#

LDA 是 QDA 的一個特例,其中假設每個類別的高斯分佈共享相同的共變異數矩陣:所有 \(k\)\(\Sigma_k = \Sigma\)。這將對數後驗值簡化為

\[\log P(y=k | x) = -\frac{1}{2} (x-\mu_k)^t \Sigma^{-1} (x-\mu_k) + \log P(y = k) + Cst.\]

\((x-\mu_k)^t \Sigma^{-1} (x-\mu_k)\) 對應於樣本 \(x\) 和平均值 \(\mu_k\) 之間的馬氏距離。馬氏距離會告知 \(x\)\(\mu_k\) 的接近程度,同時也考慮了每個特徵的變異數。因此,我們可以將 LDA 解釋為將 \(x\) 分配給其平均值在馬氏距離方面最接近的類別,同時也考慮了類別先驗機率。

LDA 的對數後驗值也可以寫成 [3]

\[\log P(y=k | x) = \omega_k^t x + \omega_{k0} + Cst.\]

其中 \(\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 模組中的所有共變異數估計器一樣。

shrinkage

範例

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’ 求解器需要計算共變異數矩陣,因此可能不適用於特徵數量較多的情況。

參考文獻