判別分析判斷樣本所屬的類別,其依據是那些已知類別樣本的屬性資訊。
主流的三大判別分析演算法費希爾判別、貝葉斯判別和距離判別
費希爾判別的基本思想就是投影,即將高維空間的點向低維空間投影,從而簡化問題進行處理
投影軸的要求,保證每一類之內的投影值所形成的類內離差盡可能小,不同類之間的投影所形成的類間離差盡可能大,
貝葉斯判別
根據已知的先驗概率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 概率密度函式如下 其中 是 的行列式,是協方差矩陣,而且是對稱半正定的。當 是二...