对于未知类别属性的数据集中的每个点依次执行一下操作:
(1)计算已知类别中的点与当前点的距离
(2)按照距离递增的次序进行排序
(3)选取与当前点距离最小的K个点
(4)确定前K个点所在类别出现的频率
(5)返回前K个点出现频率最高的类别作为当前预测的分类
基本的算法实现:

1 from numpy import * 2 import operator 3 4 def createDataSet(): 5 group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) 6 labels=['A','A','B','B'] 7 return group,labels 8 9 10 def classify0(inx,dataSet,labels,k): 11 dataSetSize=dataSet.shape[0] 12 13 diffMat=tile(inx,(dataSetSize,1))-dataSet 14 sqDiffMat=diffMat**2 15 sqDistances=sqDiffMat.sum(axis=1) 16 distance=sqDistances**0.5 17 sortedDisIndicies=distance.argsort() 18 classCount={} 19 20 for i in range(k): 21 voteIlabel=labels[sortedDisIndicies[i]] 22 classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 23 sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True) 24 return sortedClassCount[0][0]
classify0()输入:用于分类的输入向量inx,输入的训练样本集dataSet,标签向量labels,选择最近邻居的数目k
关于sorted:http://www.cnblogs.com/65702708/archive/2010/09/14/1826362.html
归一化数值:
newValue=(oldValue-minVals)/(maxValues-minValues)