kNN.py
1 from numpy import *#引入科学计算包 2 import operator #经典python函数库。运算符模块。 3 4 #创建数据集 5 def createDataSet(): 6 group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) 7 labels=['A','A','B','B'] 8 return group,labels 9 10 #算法核心 11 #inX:用于分类的输入向量。即将对其进行分类。 12 #dataSet:训练样本集 13 #labels:标签向量 14 def classfy0(inX,dataSet,labels,k): 15 #距离计算 16 dataSetSize =dataSet.shape[0]#得到数组的行数。即训练样本个数 17 diffMat =tile(inX,(dataSetSize,1))-dataSet#tile:numpy中的函数,行数扩充4倍,列扩充1倍。diffMat得到了目标与训练数值之间的差值。
tile([0,0],[4,1])-dataSet
18 sqDiffMat =diffMat**2#各个元素分别平方
19 sqDistances =sqDiffMat.sum(axis=1)#对应列相加,得到a2+b2
20 distances =sqDistanxes**0.5#开方,得到距离。 21 sortedDistIndicies=distances.argsort()#数组值对应的索引从小到大排列 22 #选择距离最小的k个点。 23 classCount={} 24 for i in range(k): 25 voteIlabel=labels[sortedDistIndicies[i]] 26 classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 27 #排序 28 sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) 29 return sortedClassCount[0][0]
测试:
from kNN import *
group,labels=createDataSet()
classify0([10,10],group,labels,3)
结果为A