官术网_书友最值得收藏!

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可以學到二次邊界,因此更加靈活。

(a) (c)(b) (d)

圖2-6 LDA和QDA的效果比較

QDA和LDA的算法相似,它們之間的區別主要受方差和偏差兩個因素的影響。模型的預測值和實際值之間的差異可以分解為方差和偏差,方差較高、誤差較低的模型通常比較靈敏,這種情況的模型并沒有變化,只是樣本數據改變,其預測結果會產生較大的變化。反之,誤差較高、方差較低的模型一般會比較遲鈍,即使模型發生變化,依然不會使預測值改變。因此在其中如何取舍,就成了一個很重要的問題。

LDA的結果中方差較低,而QDA算法的相對誤差更低。因此,在協方差矩陣很難估計準確時(例如在樣本集比較少的情況下)適合采用LDA算法。而當樣本集很大,或者類間協方差矩陣差異比較大的時候,采用QDA更加合適。

主站蜘蛛池模板: 襄樊市| 平阳县| 广昌县| 佛山市| 颍上县| 当阳市| 达尔| 南京市| 靖西县| 深州市| 额尔古纳市| 江安县| 定陶县| 林州市| 公主岭市| 攀枝花市| 景泰县| 福州市| 泽普县| 乌兰县| 炎陵县| 微山县| 固阳县| 汉源县| 阆中市| 绥芬河市| 河东区| 西林县| 平谷区| 湘潭市| 多伦县| 大关县| 武城县| 黄浦区| 五华县| 安福县| 六盘水市| 大洼县| 广昌县| 广州市| 琼中|