R語(yǔ)言線性判別分析(LDA),二次判別分析(QDA)和正則判別分析(RDA)
原文鏈接:http://tecdat.cn/?p=5689
?
判別分析包括可用于分類和降維的方法。線性判別分析(LDA)特別受歡迎,因?yàn)樗仁欠诸惼饔质墙稻S技術(shù)。二次判別分析(QDA)是LDA的變體,允許數(shù)據(jù)的非線性分離。最后,正則化判別分析(RDA)是LDA和QDA之間的折衷。
本文主要關(guān)注LDA,并探討其在理論和實(shí)踐中作為分類和可視化技術(shù)的用途。由于QDA和RDA是相關(guān)技術(shù),我不久將描述它們的主要屬性以及如何在R中使用它們。
線性判別分析
LDA是一種分類和降維技術(shù),可以從兩個(gè)角度進(jìn)行解釋。第一個(gè)是解釋是概率性的,第二個(gè)是更多的程序解釋,歸功于費(fèi)舍爾。第一種解釋對(duì)于理解LDA的假設(shè)是有用的。第二種解釋可以更好地理解LDA如何降低維數(shù)。
??
Fisher的LDA優(yōu)化標(biāo)準(zhǔn)
Fisher的LDA優(yōu)化標(biāo)準(zhǔn)規(guī)定組的質(zhì)心應(yīng)盡可能分散。這相當(dāng)于找到一個(gè)線性組合?=?a?XZ=aTX,使得aTaT相對(duì)于類內(nèi)方差的類間方差最大化。?
?
LDA模型的復(fù)雜性
LDA的有效參數(shù)的數(shù)量可以通過(guò)以下方式導(dǎo)出。有KK手段μ^kμ^k被估計(jì)。協(xié)方差矩陣不需要額外的參數(shù),因?yàn)樗呀?jīng)由質(zhì)心定義。由于我們需要估計(jì)KK判別函數(shù)(以獲得判定邊界),這就產(chǎn)生了涉及p個(gè)元素的KK計(jì)算。另外,我們有?-1為自由參數(shù)?前科。因此,有效LDA參數(shù)的數(shù)量是Kp+(K-1)。?
LDA摘要
在這里,我總結(jié)了LDA的兩個(gè)觀點(diǎn),并總結(jié)了該模型的主要特性。
概率論
LDA使用貝葉斯規(guī)則來(lái)確定觀察xx屬于kk類的后驗(yàn)概率。由于LDA的正常假設(shè),后驗(yàn)由多元高斯定義,其協(xié)方差矩陣假定對(duì)于所有類是相同的。新的點(diǎn)通過(guò)計(jì)算判別函數(shù)分類δkδk(后驗(yàn)概率的枚舉器)并返回類kk具有最大δkδk。判別變量可以通過(guò)類內(nèi)和類間方差的特征分解來(lái)獲得。
費(fèi)舍爾的觀點(diǎn)
根據(jù)Fisher,LDA可以理解為降維技術(shù),其中每個(gè)連續(xù)變換是正交的并且相對(duì)于類內(nèi)方差最大化類間方差。此過(guò)程將特征空間轉(zhuǎn)換為具有K?1K?1維度的仿射空間。在對(duì)輸入數(shù)據(jù)進(jìn)行擴(kuò)展之后,可以通過(guò)在考慮類先驗(yàn)的情況下確定仿射空間中的最接近的質(zhì)心來(lái)對(duì)新點(diǎn)進(jìn)行分類。
LDA的特性
LDA具有以下屬性:
LDA假設(shè)數(shù)據(jù)是高斯數(shù)據(jù)。更具體地說(shuō),它假定所有類共享相同的協(xié)方差矩陣。
LDA在K?1K?1維子空間中找到線性決策邊界。因此,如果自變量之間存在高階相互作用,則不適合。
LDA非常適合于多類問(wèn)題,但是當(dāng)類分布不平衡時(shí)應(yīng)該小心使用,因?yàn)楦鶕?jù)觀察到的計(jì)數(shù)來(lái)估計(jì)先驗(yàn)。因此,觀察很少被分類為不常見(jiàn)的類別。
與PCA類似,LDA可用作降維技術(shù)。請(qǐng)注意,LDA的轉(zhuǎn)換本質(zhì)上與PCA不同,因?yàn)長(zhǎng)DA是一種考慮結(jié)果的監(jiān)督方法。
數(shù)據(jù)集
為了舉例說(shuō)明線性判別分析,我們將使用音素語(yǔ)音識(shí)別數(shù)據(jù)集。該數(shù)據(jù)集對(duì)于展示判別分析很有用,因?yàn)樗婕拔宸N不同的結(jié)果。
library(RCurl)
f <- getURL('phoneme.csv')
df <- read.csv(textConnection(f), header=T)
print(dim(df))
## [1] 4509 ?259
?
為了以后評(píng)估模型,我們將每個(gè)樣本分配到培訓(xùn)或測(cè)試集中:
#logical vector: TRUE if entry belongs to train set, FALSE else
train <- grepl("^train", df$speaker)
# remove non-feature columns
to.exclude <- c("row.names", "speaker""g")
feature.df <- df[, !colnames(df) %<strong>in</strong>% to.exclude]
test.set <- subset(feature.df, !train)
train.set <- subset(feature.df, train)
train.responses <- subset(df, train)$g
test.responses <- subset(df, !train)$g
在R中擬合LDA模型
我們可以通過(guò)以下方式擬合LDA模型:
library(MASS)
lda.model <- lda(train.set, grouping = train.responses)
?
LDA作為可視化技術(shù)
我們可以通過(guò)在縮放數(shù)據(jù)上應(yīng)用變換矩陣將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換為規(guī)范坐標(biāo)。要獲得與predict.lda
函數(shù)返回的結(jié)果相同的結(jié)果,我們需要首先圍繞加權(quán)平均數(shù)據(jù)居中:
## [1] TRUE
我們可以使用前兩個(gè)判別變量來(lái)可視化數(shù)據(jù):

?
繪制兩個(gè)LDA維度中的數(shù)據(jù)顯示三個(gè)集群:
群集1(左)由aa和ao音素組成
群集2(右下角)由dcl和iy音素組成
群集3(右上角)由sh音素組成
這表明兩個(gè)維度不足以區(qū)分所有5個(gè)類別。然而,聚類表明可以非常好地區(qū)分彼此充分不同的音素。
我們還可以使用plot.lda
函數(shù)繪制訓(xùn)練數(shù)據(jù)到所有判別變量對(duì)的映射,其中dimen參數(shù)可用于指定所考慮的維數(shù):

?
為了可視化組的質(zhì)心,我們可以創(chuàng)建自定義圖:

?
解釋后驗(yàn)概率
除了將數(shù)據(jù)轉(zhuǎn)換為由分量x提供的判別變量之外,預(yù)測(cè)函數(shù)還給出后驗(yàn)概率,其可以用于分類器的進(jìn)一步解釋。例如:
## [1] "Posterior of predicted class 'sh' is: 1"
## ? ? ? ?aa ? ?ao ? dcl ? ?iy ? ?sh
## aa ?0.797 0.203 0.000 0.000 0.000
## ao ?0.123 0.877 0.000 0.000 0.000
## dcl 0.000 0.000 0.985 0.014 0.002
## iy ?0.000 0.000 0.001 0.999 0.000
## sh ?0.000 0.000 0.000 0.000 1.000
各個(gè)班級(jí)的后驗(yàn)表格表明該模型對(duì)音素aa和ao最不確定,這與我們對(duì)可視化的期望一致。
?
LDA作為分類器
如前所述,LDA的好處是我們可以選擇用于分類的規(guī)范變量的數(shù)量。在這里,我們?nèi)詫⑼ㄟ^(guò)使用多達(dá)四個(gè)規(guī)范變量進(jìn)行分類來(lái)展示降級(jí)LDA的使用。
## ? Rank Accuracy
## 1 ? ?1 ? ? 0.51
## 2 ? ?2 ? ? 0.71
## 3 ? ?3 ? ? 0.86
## 4 ? ?4 ? ? 0.92
正如從變換空間的視覺(jué)探索所預(yù)期的那樣,測(cè)試精度隨著每個(gè)附加維度而增加。由于具有四維的LDA獲得最大精度,我們將決定使用所有判別坐標(biāo)進(jìn)行分類。
為了解釋模型,我們可以可視化 分類器的性能:

?
在圖中,預(yù)期的音素以不同的顏色顯示,而模型預(yù)測(cè)通過(guò)不同的符號(hào)顯示。具有100%準(zhǔn)確度的模型將為每種顏色分配單個(gè)符號(hào)。
二次判別分析
QDA是LDA的變體,其中針對(duì)每類觀察估計(jì)單個(gè)協(xié)方差矩陣。如果事先知道個(gè)別類別表現(xiàn)出不同的協(xié)方差,則QDA特別有用。QDA的缺點(diǎn)是它不能用作降維技術(shù)。
由于QDA估計(jì)每個(gè)類的協(xié)方差矩陣,因此它具有比LDA更多的有效參數(shù)。我們可以通過(guò)以下方式得出參數(shù)的數(shù)量。
因此,QDA參數(shù)的有效數(shù)量是?-?1?+?K.p?+?K.p?(p?+?1?)2K?1+Kp+Kp(p+1)2。
由于QDA參數(shù)的數(shù)量在pp是二次的,因此當(dāng)特征空間很大時(shí),應(yīng)小心使用QDA。
QDA在R
我們可以通過(guò)以下方式執(zhí)行QDA:
的QDA和LDA對(duì)象之間的主要區(qū)別是,QDA具有p×pp×p的變換矩陣對(duì)于每個(gè)類k∈{1,…,K}k∈{1,…,K}。這些矩陣確保組內(nèi)協(xié)方差矩陣是球形的,但不會(huì)導(dǎo)致子空間減小。因此,QDA不能用作可視化技術(shù)。
讓我們確定QDA在音素?cái)?shù)據(jù)集上是否優(yōu)于LDA:
## [1] "Accuracy of QDA is: 0.84"
QDA的準(zhǔn)確度略低于全級(jí)LDA的準(zhǔn)確度。這可能表明共同協(xié)方差的假設(shè)適合于該數(shù)據(jù)集。
?
規(guī)范的判別分析
由于RDA是一種正則化技術(shù),因此當(dāng)存在許多潛在相關(guān)的特征時(shí)。現(xiàn)在讓我們?cè)u(píng)估音素?cái)?shù)據(jù)集上的RDA。
?
R中的RDA
?
rda.preds <- predict(rda.model, t(train.set), train.responses, t(test.set))
# determine performance for each alpha
rda.perf <- vector(, dim(rda.preds)[1])
for(i in seq(dim(rda.preds)[1])) {
<span style="color:#888888"># performance for each gamma</span>
res <- apply(rda.preds[i,,], 1, function(x) length(which(x == as.numeric(test.responses))) / length(test.responses))
rda.perf[[i]] <- res
}
rda.perf <- do.call(rbind, rda.perf)
rownames(rda.perf) <- alphas
結(jié)論
判別分析對(duì)于多類問(wèn)題特別有用。LDA非常易于理解,因?yàn)樗梢詼p少維數(shù)。使用QDA,可以建模非線性關(guān)系。RDA是一種正則化判別分析技術(shù),對(duì)大量特征特別有用。
?