

LDA與QDA
LDA已在前文作了簡介,其假設每個類別中的觀測值均來自多元正態分佈,並且預測變數的協方差在響應變數Y的所有k個水平上都是相同的,即預設不同分組樣本的協方差矩陣近似相等。QDA提供了另一種思路,儘管QDA同樣要求每個類別中觀測值的正態性,但不再假定預測變數在Y的k個水平上的方差齊性,即允許每個類別的協方差矩陣不等。
也就是可以這樣去理解,如果以圖形展示資料,則每個類別內的資料分佈都可描述為一個橢圓體(取決於正態性)。當代表每個分組的橢圓體具有相似方向時(左圖,代表了各類別近似相等的協方差矩陣),LDA是合適的;否則(右圖,代表了各類別的協方差矩陣不等),QDA更為推薦。

因此與LDA相比,QDA通常更加靈活。
顧名思義,LDA和QDA分別定義了線性決策面和二次決策面。
繼續考慮下圖,在嘗試將觀測資料分為兩個類別時,LDA提供了線性決策邊界,該邊界假設觀測值在所有類別中的變化水平相似(左上),這種情況下可有效判別分類;但當每個類別中觀測值的變異性存在明顯區別時(左下),線性決策邊界將難以準確地劃分資料。而QDA則能分別考慮各類別的不同協方差,並提供更準確的非線性分類決策邊界;在近似等同的協方差矩陣下,LDA和QDA的分類結果無明顯區別(右上,相比左上);但當各類別的協方差矩陣區別明顯時,QDA往往更為可靠(右下,相比左下)。

如下繼續展示一例三組分類的示例,表現QDA比LDA能夠更加準確地識別類間邊界。

儘管看起來很直觀,QDA通常優於LDA,這種優勢主要體現在訓練集資料量較大、或者觀測類別較多時的情況,此時等協方差矩陣的假設經常被拒絕。
當訓練集資料較少時,LDA往往比QDA更好。
R包MASS的QDA
資料集
iris資料集,記錄了150朵鳶尾花的花朵性狀測量值。
這些鳶尾花來自三種物種,分別為setosa(n=50)、versicolor(n=50)和virginica(n=50)。
包含四種性狀,分別為萼片長度(sepal length,cm)、萼片寬度(sepal width,cm)、花瓣長度(petal length,cm)和花瓣寬度(petal width,cm)。

#資料集,詳情 ?iris
data(iris)
head(iris)

接下來期望從中找到合適的“變數組合”,作為區分不同鳶尾花的代表特徵。
執行QDA
QDA同樣要求輸入資料滿足(多元)正態性,如果正態性假設被拒絕,可嘗試轉化資料的方式(如log轉化,但要保證這種轉化方式是合理的),獲得正態分佈的資料。
為了更好地展示QDA的分類器功能,將示例資料集分為兩部分,一部分作為訓練集用於QDA降維及分類器構建,另一部分作為測試集進一步評估QDA預測分類的功效。
library(MASS)
#可選標準化資料
#本示例的 4 個變數的量綱一致(都是以 cm 為單位),且無極端值,理論上不用標準化
#但為了和前文 LDA 的結果相比較(前文資料標準化了),選擇了對它標準化
iris[1:4] <- scale(iris[1:4])
#將資料集隨機分為訓練集(80%)和測試集(20%)
set.seed(123)
training <- sample(rownames(iris), nrow(iris)*0.8)
train.data <- subset(iris, rownames(iris) %in% training)
test.data <- subset(iris, ! rownames(iris) %in% training)
#使用測試集擬合 QDA 模型,詳情 ?qda
model <- qda(Species~., data = train.data)
model

qda()確定各組資料的平均值並計算物件屬於不同組的機率,將物件劃分到機率最高的組中。
Prior probabilities of groups,各組的先驗機率,即已知分組中所含物件數量佔總數量的比例。例如在本示例中,隨機抽取的訓練集的setosa組中共含有40個物件(40個鳶尾花觀測個體),佔訓練集所有物件(總計120個鳶尾花觀測個體)的33.3%。
Group means,組均值,展示了每個分組中變數的平均值。
隨後,構建的分類器將對測試集物件預測分類。
對比訓練集中物件的既定分組屬性和由QDA判別的分組屬性的一致性,結果可表徵QDA模型的擬合精度。
#模型擬合精度,訓練集
predictions <- predict(model, train.data)
#檢視訓練集物件的後驗機率,即根據機率劃分到高機率的類中
head(predictions$posterior)
#檢視對訓練集物件預測的分類
head(predictions$class)
#比較預測的分類和已知先驗分類屬性的差異,結果反映了準確度資訊
mean(predictions$class == train.data$Species)

結果顯示,99%以上的物件能夠被分類到正確的類別中。
現在更改為測試集,進一步評估QDA分類器精度。
#模型擬合精度評估,測試集
predictions <- predict(model, test.data)
mean(predictions$class == test.data$Species)

結果顯示,對於測試集,約97%以的物件能夠被分類到正確的類別中,表明QDA分類器的精度也是可靠的。
#後驗機率也可透過熱圖展示
heatmap(predictions$posterior, Colv = NA, cexRow = 1, cexCol = 1)

實際應用中,還可以透過指定一個後驗機率閾值,過濾模糊識別的結果,只保留較為可信的預測分類資訊以提升優度等。
參考資料



