K近鄰(KNN)算法R語言實踐
第一步:數據集分為訓練集和測試集
index <-sample(1:nrow(iris), 100)iris.train <-iris[index, ]iris.test <-iris[-index, ]
第二步:加載能夠做k近鄰的class包
library(class)
## ?Warning: package 'class'was built under R version 3.1.3
第三步:利用kNN算法對測試集進行分類
result.KNN<-knn(train=subset(iris.train,select=-Species),test=subset(iris.test,select=-Species), cl=iris.train$Species)
第四步:生成結果集的混淆矩陣
table(result.KNN, iris.test$Species)
result.KNN/? setosa? versicolor? virginica
setosa? ? ? ? 21? ? ? 0? ? ? ? ? ? 0
versicolor? ? 0? ? ? ? 11? ? ? ? ? 1
virginica? ? 0? ? ? ? 1? ? ? ? ? ? 16
kNN算法原理
1、K最近鄰(k-NearestNeighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:如果一個樣本在特征空間中的k個最相似(即特征空間中最鄰近)的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別。
2、KNN算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。KNN方法雖然從原理上也依賴于極限定理,但在類別決策時,只與極少量的相鄰樣本有關。由于KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對于類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更為適合。
3、KNN算法不僅可以用于分類,還可以用于回歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的屬性的平均值賦給該樣本,就可以得到該樣本的屬性。更有用的方法是將不同距離的鄰居對該樣本產生的影響給予不同的權值(weight),如權值與距離成正比。
參考文獻:
本文轉載自 ? ?http://www.360doc.com/userhome.aspx?userid=26290960&cid=10