判別分析也是一種分類器,與邏輯回歸相比城豁,它具有以下優(yōu)勢:
當(dāng)類別的區(qū)分度高的時候肉迫,邏輯回歸的參數(shù)估計不夠穩(wěn)定验辞,它點在線性判別分析中是不存在的;
如果樣本量n比較小喊衫,而且在每一類響應(yīng)變量中預(yù)測變量X近似服從正態(tài)分布跌造,那么線性判別分析比邏輯回歸更穩(wěn)定;
多于兩類的分類問題時族购,線性判別分析更普遍壳贪。
貝葉斯分類器
貝葉斯分類的基本思想是:對于多分類(大于等于2類)的問題,計算在已知條件下各類別的條件概率寝杖,取條件概率最大的那一類作為分類結(jié)果违施。用公式描述如下:
其中,是第k類的先驗概率瑟幕,是第k類的概率密度(當(dāng)然如果是離散型變量就是條件概率磕蒲,本文考慮連續(xù)型變量)。這個公式就是貝葉斯定理收苏。
線性判別分析(Linear Discriminant Analysis, LDA)
1亿卤、 一元線性判別分析
假設(shè)特征變量滿足正態(tài)分布,即:
線性判別分析有一個重要假設(shè):假設(shè)所有K類的劃分方差相同鹿霸。根據(jù)貝葉斯定理有:
對分子取對數(shù)轉(zhuǎn)換排吴,可見最大等價于下式最大:
(這里十分誠意地附上推導(dǎo)過程,沒興趣的可以直接跳過:)
所以只要找到令上式最大的k值即可懦鼠。從上式可看出钻哩,一共有、肛冶、這三種參數(shù)需要估計擬合街氢。先驗概率可以根據(jù)業(yè)務(wù)知識進行預(yù)先估計,如果不行也可以直接以樣本中第k類的樣本在所有類的總樣本中的比例當(dāng)作先驗概率睦袖,即
至于期望和方差珊肃,直接根據(jù)各類的觀測值計算即可:
從上上式(我就不編號)可看出,是的線性函數(shù),這也是LDA名為“線性”的原因伦乔。
2厉亏、多元線性判別分析
多元LDA由于涉及到多個特征變量,因此用協(xié)方差矩陣來代替一維方差(協(xié)方差矩陣的概念可參考延伸閱讀文獻3)烈和。這里直接給結(jié)論爱只,線性模型就變成:
.
除了方差變成協(xié)方差矩陣,和也變成了向量招刹。注意這里的還是一次恬试,仍然是線性模型。
二次判別分析(Quadratic Discriminant Analysis, QDA)
在LDA中假設(shè)所有的K類方差(或協(xié)方差矩陣)都相同疯暑,但這個假設(shè)有些嚴苛训柴,如果放寬這個假設(shè),允許每一類的觀測都各自服從一個正態(tài)分布缰儿,協(xié)方差矩陣可以不同畦粮,LDA就變成了QDA。這里依然直接給公式:
可見是的二次函數(shù)乖阵,故名“二次判別分析”。
QDA與LDA的關(guān)系類似于多項式回歸與線性回歸的關(guān)系预麸,本質(zhì)上仍是偏差和方差的權(quán)衡瞪浸,這也是Machine Learning領(lǐng)域的一個核心問題。QDA比LDA光滑吏祸,偏差更小对蒲,但方差更大。那么它們的適用條件呢贡翘?
一般而言蹈矮,如果訓(xùn)練觀測數(shù)據(jù)量相對較少,LDA是一個比QDA更好的決策鸣驱,降低模型的方差很有必要泛鸟。相反地,如果訓(xùn)練集非常大踊东,則更傾向于使用QDA北滥,這時分類器的方差不再是一個主要關(guān)心的問題,或者說K類的協(xié)方差矩陣相同的假設(shè)是站不住腳的闸翅。
實戰(zhàn):用LDA(QDA)再次預(yù)測股票漲跌
這里為了方(tou)便(lan)再芋,依然使用延伸閱讀文獻4里的數(shù)據(jù)集,即ISLR包里的Smarket數(shù)據(jù)集坚冀。用不同方法做同樣的事济赎,其實也方便將不同方法進行對比。
> library(ISLR)
> library(MASS)
> attach(Smarket)
> lda.fit=lda(Direction~Lag1+Lag2,data=Smarket, subset=Year<2005)
> lda.fit
Call:
lda(Direction ~ Lag1 + Lag2, data = Smarket, subset = Year <
2005)
Prior probabilities of groups:
Down Up
0.491984 0.508016
Group means:
Lag1 Lag2
Down 0.04279022 0.03389409
Up -0.03954635 -0.03132544
Coefficients of linear discriminants:
LD1
Lag1 -0.6420190
Lag2 -0.5135293
Prior probabilities of groups
是先驗概率,實際上就是各類別在訓(xùn)練集中的比例:
> table(Smarket[Year<2005,9])/nrow(Smarket[Year<2005,])
Down Up
0.491984 0.508016
Group means
是對每類每個變量計算平均司训,用來估計參數(shù)构捡。通過Group means矩陣可看出:當(dāng)股票下跌時,前兩天的投資回報率會趨向于正豁遭;當(dāng)股票上漲時叭喜,前兩天的投資回報率會趨向于負。Coefficients of linear discriminants則是線性模型的系數(shù)蓖谢,說明當(dāng)很大時捂蕴,LDA分類器預(yù)測上漲;很小時闪幽,LDA分類器預(yù)測下跌啥辨。
> plot(lda.fit)
上面的圖是對LDA模型的可視化,實際上它是訓(xùn)練集的分別在Down類和Up類的直方圖盯腌。下面驗證比較一下:
library(dplyr)
Lag1_1 <- Smarket %>% filter(Year<"2005", Direction=="Down") %>% select(Lag1)
Lag2_1 <- Smarket %>% filter(Year<"2005", Direction=="Down") %>% select(Lag2)
Lag1_2 <- Smarket %>% filter(Year<"2005", Direction=="Up") %>% select(Lag1)
Lag2_2 <- Smarket %>% filter(Year<"2005", Direction=="Up") %>% select(Lag2)
lm_1 <- (-0.6420190*Lag1_1-0.5135293*Lag2_1)[,1]
lm_2 <- (-0.6420190*Lag1_2-0.5135293*Lag2_2)[,1]
par(mfrow=c(2,1))
hist(lm_1,breaks=16,freq = F,col="lightblue")
hist(lm_2,breaks=16,freq = F,col="lightblue")
可見直方圖形狀完全一致溉知。
以上在訓(xùn)練集中對LDA模型的訓(xùn)練過程。下面在測試集中驗證LDA模型腕够。
> Smarket.2005=subset(Smarket,Year==2005)
> lda.pred=predict(lda.fit,Smarket.2005)
> class(lda.pred)
[1] "list"
> names(lda.pred)
[1] "class" "posterior" "x"
> data.frame(lda.pred)[1:5,]
class posterior.Down posterior.Up LD1
999 Up 0.4901792 0.5098208 0.08293096
1000 Up 0.4792185 0.5207815 0.59114102
1001 Up 0.4668185 0.5331815 1.16723063
1002 Up 0.4740011 0.5259989 0.83335022
1003 Up 0.4927877 0.5072123 -0.03792892
> table(lda.pred$class,Smarket.2005$Direction)
Down Up
Down 35 35
Up 76 106
> mean(lda.pred$class==Smarket.2005$Direction)
[1] 0.5595238
比較一下上一篇邏輯回歸(延伸閱讀文獻4)中的結(jié)果:
> glm.fit=glm(Direction~Lag1+Lag2,data=Smarket,family=binomial, subset=train)
> glm.probs=predict(glm.fit,newdata=Smarket[!train,],type="response")
> glm.pred=ifelse(glm.probs >0.5,"Up","Down")
> table(glm.pred,Direction.2005)
Direction.2005
glm.pred Down Up
Down 35 35
Up 76 106
> mean(glm.pred==Direction.2005)
[1] 0.5595238
LDA的結(jié)果與邏輯回歸完全一致级乍!以一個數(shù)據(jù)分析獅敏銳的第六感,我們可以大膽猜測:LDA與邏輯回歸這兩種算法可能有某種內(nèi)在聯(lián)系!
這里不做嚴謹?shù)耐茖?dǎo)(深層的推導(dǎo)可參考延伸閱讀文獻6)帚湘,只作一個簡單的驗證比較玫荣。為了簡單起見,只考慮二分類問題大诸,多分類問題可同理類推捅厂。
可見這仍是關(guān)于x的線性函數(shù),與邏輯回歸形式一致资柔!雖然形式一致焙贷,但邏輯回歸的參數(shù)是通過極大似然法估計出來的,LDA的參數(shù)是概率密度函數(shù)計算出來的贿堰。
由于LDA與邏輯回歸形只是擬合過程不同辙芍,因此二者所得的結(jié)果應(yīng)該是接近的。事實上官边,這一情況經(jīng)常發(fā)生沸手,但并非必然。LDA假設(shè)觀測服從每一類的協(xié)方差矩陣都相同的正態(tài)分布注簿,當(dāng)這一假設(shè)近似成立時契吉,LDA效果比邏輯回歸好;相反诡渴,若這個假設(shè)不成立捐晶,則邏輯回歸效果比LDA好菲语。
下面練習(xí)QDA:
> qda.fit=qda(Direction~Lag1+Lag2,data=Smarket,subset=train)
> qda.fit
Call:
qda(Direction ~ Lag1 + Lag2, data = Smarket, subset = train)
Prior probabilities of groups:
Down Up
0.491984 0.508016
Group means:
Lag1 Lag2
Down 0.04279022 0.03389409
Up -0.03954635 -0.03132544
> qda.class=predict(qda.fit,Smarket.2005)$class
> table(qda.class,Direction.2005)
Direction.2005
qda.class Down Up
Down 30 20
Up 81 121
> mean(qda.class==Direction.2005)
[1] 0.5992063
可見QDA的準確率稍高于LDA。
參考文獻
Gareth James et al. An Introduction to Statistical Learning.