2.1.7 判別分析
判別分析是通過對類別已知的樣本進行模型判別,來實現對新樣本的類別進行判斷。它包括線性判別分析(Linear Discriminant Analysis,LDA)和二次判別分析(Quadratic Discriminant Analysis,QDA)兩種類型。其中LDA會在2.2節進行詳細說明,下面介紹QDA。
QDA是針對那些服從高斯分布,且均值不同、方差也不同的樣本數據而設計的。它對高斯分布的協方差矩陣不做任何假設,直接使用每個分類下的協方差矩陣,因為數據方差相同的時候,一次判別就可以。但如果類別間的方差相差較大時,就需要使用二次決策平面。
【例2.2】 通過實例比較LDA和QDA的區別和分類效果。基于sklearn開源庫中discriminant_analysis模塊內置的LDA和QDA算法類,對隨機生成的高斯分布的樣本數據集進行分類。數據集的樣本數為50,生成的數據集中一半是具有相同協方差矩陣的,另一半的協方差矩陣不相同。
LDA和QDA的預測過程均很簡單,核心代碼如下所示。
#LDA預測 lda = LinearDiscriminantAnalysis(solver="svd", store_covariance=True) y_pred = lda.fit(X, y).predict(X) splot = plot_data(lda, X, y, y_pred, fig_index=2 * i + 1) #QDA預測 qda = QuadraticDiscriminantAnalysis(store_covariances=True) y_pred = qda.fit(X, y).predict(X) splot = plot_data(qda, X, y, y_pred, fig_index=2 * i + 2)
其中 plot_data()方法為自定義可視化函數,主要用于繪制分類區域和顯示樣本的預測結果等,對于預測錯誤的樣本用五角星顯示。兩種算法的效果比較如圖2-6所示。第一行的樣本數據具有相同協方差矩陣,對于這類數據,LDA和QDA兩種算法都可以預測正確。
圖2-6(c)和圖2-6(d)是針對具有不同協方差矩陣的樣本進行的分類,可見,LDA只能學習到線性邊界,而QDA可以學到二次邊界,因此更加靈活。

圖2-6 LDA和QDA的效果比較
QDA和LDA的算法相似,它們之間的區別主要受方差和偏差兩個因素的影響。模型的預測值和實際值之間的差異可以分解為方差和偏差,方差較高、誤差較低的模型通常比較靈敏,這種情況的模型并沒有變化,只是樣本數據改變,其預測結果會產生較大的變化。反之,誤差較高、方差較低的模型一般會比較遲鈍,即使模型發生變化,依然不會使預測值改變。因此在其中如何取舍,就成了一個很重要的問題。
LDA的結果中方差較低,而QDA算法的相對誤差更低。因此,在協方差矩陣很難估計準確時(例如在樣本集比較少的情況下)適合采用LDA算法。而當樣本集很大,或者類間協方差矩陣差異比較大的時候,采用QDA更加合適。