這部分筆記是MOOC課程《多元統(tǒng)計(jì)分析及R語(yǔ)言建姆诺洌》第6章第二講“距離判別分析”晒衩。在判別分析及R使用-Part1中提到涌攻,確定性判別可用Fisher判別法逛绵,除此之外還可以用距離判別分析怀各。
兩總體距離判別
老師在講課的時(shí)候畫了張圖,可以直觀的理解什么是距離判別法:
設(shè)术浪,瓢对,,分別為兩個(gè)類胰苏,的均值向量和協(xié)方差矩陣硕蛹。
簡(jiǎn)單來(lái)講,若想知道一個(gè)樣本x屬于哪個(gè)總體硕并,可以計(jì)算并比較x到兩個(gè)總體的距離法焰,距離誰(shuí)近則屬于誰(shuí)。距離計(jì)算方法用的是馬氏距離:
判別準(zhǔn)則:
- 當(dāng)埃仪,則
- 當(dāng),則
- 當(dāng)陕赃,待判卵蛉。
按照與是否相等,距離判別分析又可分為直線判別和曲線判別凯正。
直線判別
當(dāng)時(shí)毙玻,就是直線判別。若想知道一個(gè)未知的點(diǎn)距離誰(shuí)近廊散,可以做減法:
然后把無(wú)傷大雅的2去掉桑滩,就可以把寫成,此時(shí)允睹,运准。這個(gè)其實(shí)就是Fisher判別分析里的,換句話說缭受,當(dāng)兩總體協(xié)方差矩陣相等時(shí)胁澳,距離判別分析和Fisher判別分析是一樣的。
其實(shí)吧米者,上面公式是怎么推倒的韭畸,我還沒整的特別明白宇智,先記錄下來(lái),回頭再扣
曲線判別
曲線判別就是時(shí)的情況胰丁,不等則不能像相等時(shí)將代入展開:
舉例說明
還是之前的天氣的例子随橘,這回我們使用距離判別分析天氣數(shù)據(jù),在R語(yǔ)言中使用qda()
函數(shù)即可:
> qd <- qda(G~x1+x2)
> qp<- predict(qd)
> G2 <- qp$class
> data.frame(G,G1,G2)##G1是使用Fisher判別法時(shí)預(yù)測(cè)的結(jié)果锦庸,不明白的可以去看上一張筆記的內(nèi)容
G G1 G2
1 1 1 2
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 1 2 1
7 1 1 1
8 1 1 1
9 1 1 1
10 1 1 1
11 2 2 2
12 2 2 2
13 2 2 2
14 2 2 2
15 2 1 1
16 2 2 1
17 2 2 2
18 2 2 2
19 2 2 2
20 2 2 2
##計(jì)算正確率
> sum(diag(prop.table( table(G,G2))))
[1] 0.85
##做天氣預(yù)測(cè)
> predict(qd,data.frame(x1=8.1,x2=2.0))
$class
[1] 1
Levels: 1 2
$posterior
1 2
1 0.9939952 0.006004808
多總體距離判別
多總體時(shí)就不能像兩總體那樣做距離的減法了机蔗,需要帶著對(duì)公式進(jìn)行下變換,若協(xié)方差矩陣相同(直線判別):
其中甘萧,萝嘁,當(dāng)扬卷,則牙言。
而協(xié)方差矩陣若不相等(非線性判別),則馬氏距離公式無(wú)法展開邀泉,此時(shí)是當(dāng)時(shí),汇恤。
舉例說明
20個(gè)電視機(jī)庞钢,5種暢銷,8種平銷因谎,7種滯銷基括,試建立判別函數(shù),當(dāng)一新產(chǎn)品其質(zhì)量評(píng)分為8.0财岔,功能評(píng)分為7.5风皿,銷售價(jià)格為65元,問該廠產(chǎn)品的銷售前景如何匠璧?
首先使用直線判別:
> d6.3 <- read.xlsx("/home/my/桌面/MOOC/多元統(tǒng)計(jì)分析/mvstats5.xlsx",sheet="d6.3")
> d6.3
Q C P G3
1 8.3 4.0 29 1
2 9.5 7.0 68 1
3 8.0 5.0 39 1
4 7.4 7.0 50 1
5 8.8 6.5 55 1
6 9.0 7.5 58 2
7 7.0 6.0 75 2
8 9.2 8.0 82 2
9 8.0 7.0 67 2
10 7.6 9.0 90 2
11 7.2 8.5 86 2
12 6.4 7.0 53 2
13 7.3 5.0 48 2
14 6.0 2.0 20 3
15 6.4 4.0 39 3
16 6.8 5.0 48 3
17 5.2 3.0 29 3
18 5.8 3.5 32 3
19 5.5 4.0 34 3
20 6.0 4.5 36 3
> attach(d6.3)
> ld3 <- lda(G3~Q+C+P)
> ld3
Call:
lda(G3 ~ Q + C + P)
Prior probabilities of groups:
1 2 3
0.25 0.40 0.35
Group means:
Q C P
1 8.400000 5.900000 48.200
2 7.712500 7.250000 69.875
3 5.957143 3.714286 34.000
Coefficients of linear discriminants:
LD1 LD2
Q -0.81173396 0.88406311
C -0.63090549 0.20134565
P 0.01579385 -0.08775636
Proportion of trace:
LD1 LD2
0.7403 0.2597
> lp3<- predict(ld3)
> lG3 <- lp3$class
> data.frame(G3,lG3)
G3 lG3
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
6 2 1
7 2 2
8 2 2
9 2 2
10 2 2
11 2 2
12 2 2
13 2 3
14 3 3
15 3 3
16 3 3
17 3 3
18 3 3
19 3 3
20 3 3
> ltab3 <- table(G3,lG3)
> ltab3
lG3
G3 1 2 3
1 5 0 0
2 1 6 1
3 0 0 7
> plot(lp3$x)
> text(lp3$x[,1],lp3$x[,2],lG3,adj=-0.8,cex=0.75)
> predict(ld3,data.frame(Q=8,C=7.5,P=65))
$class
[1] 2
Levels: 1 2 3
$posterior
1 2 3
1 0.2114514 0.786773 0.001775594
$x
LD1 LD2
1 -1.537069 -0.1367865
若協(xié)方差矩陣不等桐款,使用pda()
函數(shù):
> qd3 <- qda(G3~Q+C+P)
> qd3
Call:
qda(G3 ~ Q + C + P)
Prior probabilities of groups:
1 2 3
0.25 0.40 0.35
Group means:
Q C P
1 8.400000 5.900000 48.200
2 7.712500 7.250000 69.875
3 5.957143 3.714286 34.000
> qp3 <- predict(qd3)
> qG3 <- qp3$class
> data.frame(G3,lG3,qG3)
G3 lG3 qG3
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1
5 1 1 1
6 2 1 2
7 2 2 2
8 2 2 2
9 2 2 2
10 2 2 2
11 2 2 2
12 2 2 2
13 2 3 3
14 3 3 3
15 3 3 3
16 3 3 3
17 3 3 3
18 3 3 3
19 3 3 3
20 3 3 3
> qtab3<-table(G3,lG3)
> predict(qd3,data.frame(Q=8,C=7.5,P=6.5))
$class
[1] 2
Levels: 1 2 3
$posterior
1 2 3
1 5.080497e-225 1 1.498709e-158
無(wú)論哪種方法,正確率大于0.8就是可以的夷恍。