線性判別分析(LDA)及其在R中實現

線性判別分析(LDA)及其在R中實現
線性判別分析(Linear Discriminant AnalysisLDA)是一種用於資料降維以及分類預測的機器學習方法,由RA Fisher1936)提出,也稱為Fisher判別式。
最初的LDA只能處理兩種分類問題,Rao1948)拓展了“多類別線性判別分析”或稱“多元判別分析”,將LDA推廣至適用於多分類的情形。
LDA概述
LDA目的是將資料集投影到具有良好分類特徵的低維空間上,投影后類內方差最小、類間方差最大,用於表徵資料結構以及識別分類,因此它在高維資料集的分析中非常流行。
與其它機器學習演算法(例如神經網路、隨機森林等)相比,LDA的主要優點是可更好避免過擬合以及計算簡單。
LDA資料準備
已知分類
需要已知樣本的歸屬,支援兩組或多組情況。已知樣本分類將為降維過程提供監督,實現判別的目的。
刪除異常值
考慮從資料中刪除異常值,它們通常會對LDA的精度產生影響。
正態性與方差齊性
LDA最初是為多元正態分佈資料開發的,也就是LDA的前提假設資料滿足多元正態性。即便資料集整體不呈正態分佈,但也應至少滿足在每個分組內的子資料集均應呈正態分佈。
LDA對方差齊性沒有很嚴格的要求。這意味著如果以圖形展示資料,則每個分組內的資料分佈都可描述為一個橢圓體(取決於正態性),並允許橢圓體位置、形狀(代表了組間均值、方差)等有所不同。
儘管如此,通常推薦在執行LDA前透過標準化資料的方法,將已服從正態性但方差不等的各變數標準化為等方差(如均值0,標準差1)的結構,即讓資料滿足方差齊性。資料標準化對於消除變數間的量綱差異或者較大方差變數的權重時非常有效。
LDA原理簡述
直觀理解,當代表每個分組的橢圓體具有如下所示的相似排列和形狀時(表徵了資料分佈模式),可選擇使用LDA;當橢圓體具有明顯不同的排列或形狀時,一種稱為二次判別分析(Quadratic Discriminant AnalysisQDA)的方法更為合適(因此通常QDA更靈活)。
本篇暫不討論QDA,以下是LDA的工作原理概述。
以包含2個變數,9個物件(其中5個屬於分組14個屬於分組2,即上圖示例)的資料矩陣為例。首先將物件投影到變數空間上,一個變數代表一個維度,這裡共2個變數所以就是二維變數空間。
考慮圖a中的代表兩組資料中物件分佈的橢圓,它們具有相似的結構,執行LDA。在圖上定義任意的直線,並將橢圓中心(代表變數集的均值位置)垂直投影到直線上(圖b),稱為正交投影。類似的過程,將所有變數也投影到直線上(圖c)。
由於各組內的資料均呈正態分佈,因此對於每個橢圓的投影資料也均為正態分佈(圖d),均值表示投影中心,並具有一定的方差,方差反映了離散程度。由於投影直線是任意指定的,因此可存在n種投影情況,具有不同的均值和方差。然後就需從中確定最佳投影直線,所謂最佳,即資料的投影能夠最大限度地區分組內和組間特徵。

這裡假設兩組資料在各個變數維度的均值分別為μ1μ2,方差為σ21σ22,則變數空間中存在點M,可在各個變數維度透過公式1-M)221+(μ2-M)/σ22得到一個最小值,即獲得最小均值差。對於經過M點的直線,稱為分割線(separating line),最佳投影直線與分割線正交,且保證各物件在該直線上的投影具有更小的組內方差,以及更大的組間方差,使組內方差與組間方差之比最大化(圖e,兩組資料等方差時,M點在兩橢圓中心點的中間位置;或f,兩組資料不等方差時,M點靠近具有較小方差的橢圓)。
該投影直線也稱為超平面(hyperplane),最終實現降維的目的,並可根據物件點在超平面中投影位置進行分類。
如上簡單概括了由二維降維至一維的過程。LDA最終可獲得的維度k≤n-1n為變數數量。對於多維情況,各維(LDA軸)計算的原理同上,且各軸之間正交。
再補充一點關於資料的正態性問題
由上述過程也不難看出,對於違反正態性的資料,理論上無法根據公式準確計算M點的位置,因此最終分類結果也不準確。
儘管如此,違反正態性假設的資料仍可嘗試執行LDA,有些情況下仍可以得到較好的效果。例如Duda等(2001)指出,LDA在人臉和物體識別的任務中經常取得良好的表現,儘管經常與正態性假設違背。
LDA與PCA
LDA主成分分析PCA)均是線性降維技術,通用的LDA方法與PCA比較相似,但是除了找到使資料方差最大的成分軸外,還對最大化多個類之間距離的軸感興趣。
因此二者的主要區別在於,PCA屬於“無監督”演算法,它在降維時不關注資料的分組(類)關係,目標是找到代表資料集最大化方差方向的一系列正交的主成分(特徵向量);LDA則是“監督”演算法,考慮已知的類別關係,透過線性判別式定義一系列表示最大化類別之間距離的正交軸。

儘管聽起來很直觀,對於已知類別標籤的資料而言,LDA似乎優於PCA,但並非總是如此。Martinez等(2011)在比較PCALDA排序圖中展示的分組關係後表明,如果每類資料中涉及的物件數量相對較少,PCA的效能反而優於LDA
R包MASS的LDA
接下來,展示R語言執行LDA的過程,以MASS包的方法為例。
資料集
iris資料集,記錄了150朵鳶尾花的花朵性狀測量值。
這些鳶尾花來自三種物種,分別為setosan=50)、versicolorn=50)和virginican=50)。
包含四種性狀,分別為萼片長度(sepal lengthcm)、萼片寬度(sepal widthcm)、花瓣長度(petal lengthcm)和花瓣寬度(petal widthcm)。

#資料集,詳情 ?iris

data(iris)

head(iris)

接下來期望從中找到合適的“變數組合”,作為區分不同鳶尾花的代表特徵。
* 探索性分析
首先不妨檢視一下各變數的數值分佈,哪些花朵性狀在不同物種之間具有明顯的區別。
#變數分佈

library(ggplot2)
ggplot(reshape2::melt(iris, id = 'Species'), aes(x = value)) +

geom_histogram(aes(fill = Species), color = 'gray') +

facet_wrap(~variable, ncol = 2, scales = 'free')

直方圖清晰地表明,花瓣的長度和寬度似乎可以作為潛在特徵,用以區分三種鳶尾花物種。
相比直接選取部分趨勢明顯的變數作為代表,透過降維技術所確定的變數組合特徵通常是種更為實用的選擇。最首先想到的降維方法,可能就是PCA
#透過 PCA 降維資料,觀測資料特徵

pca <- princomp(iris[1:4])

plot(pca$scores[ ,1], pca$scores[ ,2], col = rep(c('red', 'green', 'blue'), summary(iris$Species)))

PCA顯示,第一主成分可作為區分不同鳶尾花物種花朵性狀的潛在特徵。
接下來接入本篇的方法部分,使用LDA實現資料降維,選擇代表性的變數組合特徵,以及實現分類。
正態性評估及變數標準化
如上文概述中提到,LDA要求輸入資料滿足(多元)正態性,可透過QQ評估。
#QQ-plot 檢驗多元正態性

qqplot(qchisq(ppoints(nrow(iris[1:4])), df = ncol(iris[1:4])), mahalanobis(iris[1:4], colMeans(iris[1:4]), cov(iris[1:4])))

abline(a = 0, b = 1)

QQ圖顯示了示例資料集滿足多元正態性。
如果正態性假設被拒絕,可嘗試轉化資料的方式(如log轉化,但要保證這種轉化方式是合理的),獲得正態分佈的資料。
儘管也可直接使用非正態性的資料直接執行LDA,如概述中提到的。
變數的標準化也是推薦的一步。
使標準化後的資料集保證方差齊性,對於消除變數間的量綱差異或者較大方差變數的權重時非常有效,可提高降維的精度。
#標準化資料,如標準化為均值 0,標準差 1 的結構

iris[1:4] <- scale(iris[1:4], center = TRUE, scale = TRUE)

LDA 降維及分類
為了更好地展示LDA的分類器功能,將示例資料集分為兩部分,一部分作為訓練集用於LDA降維及分類器構建,另一部分作為測試集進一步評估LDA預測分類的功效。
#將資料集隨機分為訓練集(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)

經過幾個準備步驟後,執行LDA
LDA演算法首先查詢使類別之間距離最大化的方向(即LDA軸),作為變數響應分類的最佳線性組合,並透過這種組合進一步預測分類。
library(MASS)
#擬合模型

model <- lda(Species~., data = train.data)

model

lda()確定各組資料的平均值並計算物件屬於不同組的機率,將物件劃分到機率最高的組中。
Prior probabilities of groups,各組的先驗機率,即已知分組中所含物件數量佔總數量的比例。例如在本示例中,隨機抽取的訓練集的setosa組中共含有40個物件(40個鳶尾花觀測個體),佔訓練集所有物件(總計120個鳶尾花觀測個體)的33.3%
Group means,組均值,展示了每個分組中變數的平均值。
Coefficients of linear discriminants線性判別係數,用於形成LDA決策規則的預測變數的線性組合。例如,LD1 = 0.828*Sepal.Length + 1.438*Sepal.Width – 2.179*Petal.Length – 2.656*Petal.Width。可在降維後根據線性判別係數所得表示式,預測訓練集的分類。
Proportion of trace,可以將它理解為各LDA軸的“方差解釋率”,以評估各LDA軸的重要程度,示例結果顯示LDA第一主軸是非常重要的。
#作圖觀測物件在前兩 LDA 軸中的投影

plot(model, col = rep(c('red', 'green', 'blue'), summary(train.data$Species)), dimen = 2)
#或者 ggplot2 作圖

ggplot(cbind(train.data, predict(model)$x), aes(LD1, LD2, color = Species)) +

geom_point() +

stat_ellipse(level = 0.95, show.legend = FALSE)

結果顯而易見了,LDA第一主軸承載了最能體現類間差異的特徵。
對比訓練集中物件的既定分組屬性和由LDA判別的分組屬性的一致性,結果可表徵LDA模型的擬合精度。
#模型擬合精度評估,訓練集

predictions <- predict(model, train.data)
#檢視訓練集物件的後驗機率,即根據機率劃分到高機率的類中

head(predictions$posterior)

#檢視對訓練集物件預測的分類

head(predictions$class)

#比較預測的分類和已知先驗分類屬性的差異,結果反映了準確度資訊

mean(predictions$class == train.data$Species)

結果顯示,98%以上的物件能夠被分類到正確的類別中。
現在更改為測試集,進一步評估LDA分類器精度。
#模型擬合精度評估,測試集

predictions <- predict(model, test.data)

mean(predictions$class == test.data$Species)

結果顯示,約97%以的物件能夠被分類到正確的類別中,LDA分類器的精度是相對可靠的。
參考資料
https://online.stat.psu.edu/stat555/node/101/
http://sebastianraschka.com/Articles/2014_python_lda.html
https://www.writeawriting.com/research/types-discriminant-analysis/
http://www.sthda.com/english/articles/36-classification-methods-essentials/146-discriminant-analysis-essentials-in-r/
Duda R O, Hart P E, Stork D G. Pattern Classification. Wiley, 2001.
Fisher R A. The Use of Multiple Measurements in Taxonomic Problems. Annals of Human Genetics, 1936, 7(7):179-188.
Martinez A M, Kak A C. PCA versus LDA. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2001, 23(2):228-233.
Rao C R. The utilization of multiple measurements in problems of biological classification. Journal of the Royal Statistical Society, 1948, 10(2):159-203.
連結

相關文章