1. 程式人生 > >R語言分類演算法之距離判別(Distance Discrimination)

R語言分類演算法之距離判別(Distance Discrimination)

1.距離判別原理分析
根據待判定樣本與已知類別樣本之間的距離遠近做出判斷.根據已知類別樣本資訊建立距離判別函式式,再將各待判定樣本的屬性資料逐一代入式中計算,得到距離值,再根據此將樣本判入距離值最小的類別的樣本簇.
K最近鄰演算法則是距離判別法中使用最為廣泛的,他的思路是如果 一個樣本在特徵空間中的K個最相似/最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別.
圖中3個實心表示樣本點,其周圍分佈著若干分別用圓形,三角形,正方形空心點表示出的三種已知類別的樣本點.現在我們取K=5,即圈出與待分類樣本點最相近的5個樣本點,然後檢視他們的類別.這5個點中屬於哪個類別的樣本多,該未知樣本就屬於哪個類別.易得未知樣本(從左到右)依次屬於圓形,三角形,正方形.
K最近鄰方法進行判別時,由於其主要依靠周圍有限鄰近樣本的資訊,而不是靠判別類域的方法來確定所屬類別,因此對於類域的交叉或重疊較多的待份樣本集來說,該方法較其他方法更為合適.
距離判別


2.在R語言中的應用
在K最近鄰(K-Nearest Neighbor,KNN)演算法中我們主要用到了class包裡面的
knn(train,test,cl,k=1,1=0,prob=FALSE,use.all=TRUE)函式。
而在有權重的k最近鄰(Weighted K-NearestNeighbor,KKNN)我們主要用到了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=”contrl.rodinal”))
函式。
3.以iris資料集為例進行判別分析
1)應用模型並觀察輸出結果

library(kknn)
fit_pre_kknn=kknn(Species~.,data_train,data_test[,-5],k=5)
fit_pre_kknn[1:length(fit_pre_kknn)]

R語言分類演算法之距離判別
R語言分類演算法之距離判別
R語言分類演算法之距離判別

2)檢測模型準確度

table(data_test$Species, fit_pre_kknn$fitted.values)
sum(as.numeric(as.numeric(fit_pre_kknn $fitted.values)!=as.numeric(data_test$Species
)))/nrow(data_test)

R語言分類演算法之距離判別