python實現(xiàn):
#coding:utf-8
'''
KNN算法
'''
fromnumpyimport*
importoperator
defclassify0(inX,dataSet,labels,k):
'''
:paraminX:輸入變量
:paramdataSet:訓(xùn)練樣本
:paramlabels: 標(biāo)簽向量
:paramk:最近鄰的數(shù)目
:return: 輸入變量的類別
'''
dataSetSize=dataSet.shape[0] #樣本行數(shù)
diffMat=tile(inX,(dataSetSize,1))-dataSet
sqlDiffMat=diffMat**2
sqlDistances=sqlDiffMat.sum(axis=1) #矩陣按行求和
distances=sqlDiffMat**0.5 #距離
sortedDistIndicies=distances.argsort() #從小到大排序,返回索引
classCount={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]]
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
returnsortedClassCount[0][0]