用R實現判別分析

2021-09-12 00:08:52 字數 4549 閱讀 5136

判別分析判斷樣本所屬的類別,其依據是那些已知類別樣本的屬性資訊。

主流的三大判別分析演算法費希爾判別、貝葉斯判別和距離判別

費希爾判別的基本思想就是投影,即將高維空間的點向低維空間投影,從而簡化問題進行處理

投影軸的要求,保證每一類之內的投影值所形成的類內離差盡可能小,不同類之間的投影所形成的類間離差盡可能大,

貝葉斯判別

根據已知的先驗概率p(a|b),求出後驗概率p(b|a)然後選擇最大後驗概率的類作為選擇。其優勢在於不怕雜訊和無關變數,

不足之處在於假設各特徵屬性之間是無關的,假設成立時判別正確率很高,然而現實是個特徵屬性具有較強相關性的。

距離判別

根據已知樣本之間的距離遠近做出判別。

lda()函式

lda(formula, data, ..., subset, na.action)適用於公式fromula

lda(x, grouping, prior = proportions, tol = 1.0e-4,

method, cv = false, nu, ...)適用於資料框data.frame

lda(x, grouping, ..., subset, na.action)適用於矩陣matrix

data資料集名稱和subset納入規則建立過程的樣本都用於formula為物件的函式格式中,

grouping則指明每個觀測樣本所屬類別,prior可以設定各類別的先驗概率,tol用於保證

判別效果預設取0.0001,na.action用於選擇對於缺失值的處理,預設情況若有缺失值,則該函式無法執行,更改設定時自動刪除缺失值

qda()函式

qda(formula, data, ..., subset, na.action)

qda(x, grouping, prior = proportions,

method, cv = false, nu, ...)

qda(x, grouping, ..., subset, na.action)

同lda()函式引數一樣

*****bayes()函式

*****bayes(formula, data, ..., subset, na.action = na.pass)適用於公式

*****bayes(x, grouping, prior, usekernel = false, fl = 0, ...)

na.action預設為na.pass,na.omit表示刪除相應的函式有缺失值的樣本,

usekernel選擇是否使用核密度估計法,fl用於設定拉普拉斯修正的引數值預設取0,樸素貝葉斯對於稀疏資料過於敏感,所以拉普拉斯就可以給未出現的特徵值賦予乙個很小的數

knn()函式

knn(graph, vids = v(graph), weights = null)

預設選擇歐氏距離來尋找所需額k的最近樣本,train,test代表訓練集和測試集;cl用於放置訓練集各已知樣本的類別取值;

k為控制最近鄰域大小的引數,l設定得到確切判別結果所需滿足的最少票數,prob控制輸出「勝出」類別use.all用於選擇再出現「結點」時的處理方式

kknn()函式

kknn(formula = formula(train), train, test, na.action = na.omit(), 

k = 7, distance = 2, kernel = "optimal", ykernel = null, scale=true,

contrasts = c('unordered' = "contr.dummy", ordered = "contr.ordinal"))

distance引數用於選擇計算樣本間的距離的具體方法,1為曼哈頓距離,2為歐式距離

library(kknn)

library(mass)

data(miete)#使用miete資料集

head(miete)

dim(miete)

summary(miete)

#分層抽樣5個等級等量抽取

library(sampling)

n=round(2/3*nrow(miete)/5)#訓練集2/3,計算每一等級應抽取的樣本量

n ?strata

#應為函式問題,最後我隨機抽取的

train_sub=sample(nrow(miete),2/3*nrow(miete))

data_train=miete[train_sub,]

data_test=miete[-train_sub,]

dim(data_train)

fit_lda1=lda(nmkat~.,data_train)#以公式格式執行線性判別

names(fit_lda1)

fit_lda1$prior#先驗概率

fit_lda1$counts#樣本量

fit_lda1$means#均值

fit_lda1

fit_lda2=lda(data_train[,-12],data_train[,12])#排除第十二個變數nmkat

plot(fit_lda1)#輸出圖形

plot(fit_lda1,dimen=1)#對判別規則fit_lda1,輸出1個判別式的圖形

plot(fit_lda1,dimen=2)#對判別規則fit_lda1,輸出2個判別式的圖形

pre_lda1=predict(fit_lda1,data_test)#使用判別規則**data_test中的nmkat變數的類別

pre_lda1$class#輸出**結果

pre_lda1$posterior#後驗概率

table(data_test$nmkat,pre_lda1$class) #生成實際值與**值的混淆矩陣

error_lda1=sum(as.numeric(as.numeric(pre_lda1$class)!=as.numeric(data_test$nmkat)))/nrow(data_test)

error_lda1#錯誤率

#樸素貝葉斯

library(klar)

fit_bayes1=*****bayes(nmkat~.,data_train)#貝葉斯判別

names(fit_bayes1)

plot(fit_bayes1,vars="wfl",n=50,col=c(1,"darkgrey",1,"darkgrey",1))

#對占地面值wfl繪製密度圖

plot(fit_bayes1,vars="mvdauer",n=50,col=c(1,"darkgrey",1,"darkgrey",1))

#對租憑期mvdauer繪製密度圖

plot(fit_bayes1,vars="nmqm",n=50,col=c(1,"darkgrey",1,"darkgrey",1))

#密度圖

fit_bayes2=*****bayes(data_train[,12],data_train[,12])

#排除nmkat

pre_bayes1=predict(fit_bayes1,data_test)

#對測試集進行**

pre_bayes1$class

#顯示**結果

table(data_test$nmkat,pre_bayes1$class)

#生成nmkat的真實值和**值的混淆矩陣

error_bayes1=sum(as.numeric(as.numeric(pre_bayes1$class)!=as.numeric(data_test$nmkat)))/nrow(data_test)

error_bayes1#錯誤率

library(class)

#k最近鄰

fit_pre_knn=knn(data_train[,-12],data_test[,-12],cl=data_train[,12])

fit_pre_knn

table(data_test$nmkat,fit_pre_knn)

error_knn=sum(as.numeric(as.numeric(fit_pre_knn)!=as.numeric(data_test$nmkat)))/nrow(data_test)

error_knn

error_knn=rep(0,20)#將錯誤率的初始值為0

for(i in 1:20)#構造for迴圈

#計算每個k值的錯誤率

error_knn

?plot

plot(error_knn,type="l",xlab="k")#折線圖

library(kknn)

?kknn

fit_pre_kknn=kknn(nmkat~.,data_train,data_test,k=5)

#權重為5的判別,**

summary(fit_pre_kknn)

fit=fitted((fit_pre_kknn))

fittable(data_test$nmkat,fit)

error_kknn=sum(as.numeric(as.numeric(fit)!=as.numeric(data_test$nmkat)))/nrow(data_test)

error_kknn

線性判別分析 線性判別分析總覽

線性判別分析總覽 linea r discriminant analysis,lda 用於資料預處理中的降維 分類任務,其目標是找到能夠最大化類間區分度的座標軸成分。用幾個詞概括lda的特徵,即降維 分類。假設一批患者使用同一種腫瘤藥,一些人效果良好 response 而另一些人無明顯療效 not ...

判別分析基礎

與聚類分析的比較 判別分析是判別樣品所屬型別的一種統計方法。判別分析與聚類分析不同,判別分析是在已知研究物件分成若干型別 或組別 並已取得各種型別的一批已知樣品的觀測資料。在實際中判別分析和聚類分析往往聯合起來用,當總體分類不清楚時,可先用聚類分析對原來的一批樣品進行分類,然後再用判別分析建立判別式...

高斯判別分析

1 多值正態分佈 多變數正態分佈描述的是n 維隨機變數的分布情況,這裡的 變成了向量,也變成了矩陣 寫作n 假設有n 個隨機變數x1 x2,xn。的第i 個分量是e x 而 ii var xi ij cov xi,xj 概率密度函式如下 其中 是 的行列式,是協方差矩陣,而且是對稱半正定的。當 是二...