1. 簡述:python
簡單地說,谷近鄰算法採用測量不一樣特徵值之間的距離方法進行分類。算法
優勢:精度高、對異常值不敏感、無數據輸入假定。機器學習
缺點:計算複雜度高、空間複雜度高。學習
適用數據範圍:數值型和標稱型。spa
2.工做原理是排序
存在一個樣本數據集合,也稱做訓練樣本集,而且樣本集中每一個數據都存在標籤,即咱們知道樣本集中每一數據與所屬分類的對應關係。輸人沒有標籤的新數據後,將新數據的每一個特徵與樣本集中數據對應的特徵進行比較,而後算法提取樣本集中特徵最類似數據(最近鄰)的分類標籤。通常來講,咱們只選擇樣本數據集中前&個最類似的數據,這就是&-近鄰算法中&的出處,一般*是不大於20的整數。最後,選擇&個最類似數據中出現次數最多的分類,做爲新數據的分類。索引
3.代碼例子:get
1 #!/usr/bin/env pythonit
2 class
3 from numpy import *
4 ## numpy 機器學習的一個python庫,
5 import operator
6
7 def createdata():
8
9 group=array([[1.0,1.2],[1.1,1.1],[0.1,0.2],[0.3,0.1]])
10
11 labels = ['A','A','B','B']
12 return group,labels
13 def classify(intx,dataset,labels,k):
14 datasetsize = dataset.shape[0] ## 返回維度信息
15 diffmat = tile(intx,(datasetsize,1)) -dataset ## 填充,而且作矩陣的相見
16 sqdiffmat = diffmat**2 ## 去平方
17 sqDis = sqdiffmat.sum(axis=1) ## 統一列相見
18 soreddis = sqDis.argsort() ## 索引排序
19 classcount={}
20 for i in range(k):
21
22 votelabel = labels[soreddis[i]]
23 classcount[votelabel] = classcount.get(votelabel,1)+1
24
25 sortclasscount=sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=True)
26 return sortclasscount[0][0]
27
28 if __name__ == '__main__':
29
30 group,labels = createdata()
31
32 print classify([0.5,0.3],group,labels,3)