1. 程式人生 > >R語言 判別分析小結

R語言 判別分析小結

判別分析(discriminant analysis)是一種分類技術。它通過一個已知類別的“訓練樣本”來建立判別準則,並通過預測變數來為未知類別的資料進行分類。

判別分析的方法大體上有三類,即距離判別、Fisher判別和Bayes判別和。距離判別思想是根據已知分類的資料計算各類別的重心,對未知分類的資料,計算它與各類重心的距離,與某個重心距離最近則歸於該類。Fisher判別思想是投影降維,使多維問題簡化為一維問題來處理。選擇一個適當的投影軸,使所有的樣品點都投影到這個軸上得到一個投影值。對這個投影軸的方向的要求是:使每一組內的投影值所形成的組內離差儘可能小,而不同組間的投影值所形成的類間離差儘可能大。Bayes判別思想是根據先驗概率求出後驗概率,並依據後驗概率分佈作出統計推斷。

用R進行判別分析的方法在MASS包,裡面有lda(線性)和qda(二次)
注意使用條件:1、正態總體,2、協方差相同(線性)/不同(二次)

1、線性的判別分析

#載入相關包和資料集
library(MASS)
library(sampling)
#把iris重新賦值,並加入分類標記和行號標記
i<-iris
i$lv<-as.numeric(i$Species)
i$lv<-as.factor(i$lv)
i$id<-c(1:150)
#進行分層抽樣,每個類別隨機抽出10個作為預測集,剩下的作為訓練集
i.s<-strata(data=i,stratanames="lv",size=c(10,10,10),method="srswor",description=F)
i.train<-i[!(i$id %in% i.s$ID_unit),]
i.predict<-i[(i$id %in% i.s$ID_unit),]
#擬合線性判別lda
fit<-lda(lv~.-id-Species,data=i.train)
#預測訓練集和預測集
Y<-predict(fit,i.train)
YN<-predict(fit,i.predict)
#檢視擬合情況
table(Y$class,i.train$lv)
table(YN$class,i.predict$lv)

2、二次判別

#當協方差矩陣不相同時(即來自不同總體),沿用上一個已經做好的資料
fit2<-qda(lv~.-id-Species,data=i.train,cv=T)
#再進行結果的擬合
Y2<-predict(fit,i.train)
YN2<-predict(fit,i.predict)
#檢視擬合情況
table(Y2$class,i.train$lv)
table(YN2$class,i.predict$lv)
#所得結果是一樣的,不知道是否為資料的協方差是一樣的原因。