1 from numpy import * 2 import operator 3 #需要用到的两个模块 4 dataSet=array([[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15],[16,17,18]])#自定义了一个6*3的训练集 5 labels=['A','B','B','A','B','B']#训练集的标签,6个 6 inX=array([6,9,17])#输入向量,需要和训练集中的特征个数(3)一致 7 k=3#取最近的3个点作判断 8 #start 9 dataSetSize=dataSet.shape[0]#求取训练集的行数 10 diffMat=tile(inX,(dataSetSize,1))-dataSet#铺砖按行延拓输入向量,求差矩阵 11 sqDiffMat=diffMat**2#求出差矩阵的平方 12 sqDistances=sqDiffMat.sum(axis=1)#平方项按列相加 13 distances=sqDistances**0.5#求方根,算出距离 14 sortedDistIndicies=distances.argsort()#按照距离大小从小到大进行排序,返回其下标所组成的的序列 15 classCount={}#创建字典 16 for i in range(k): 17 voteIlabel=labels[sortedDistIndicies[i]] 18 classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#在字典中按键值对进行计数 19 sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)#对字典中的键按值从大到小排序。 20 print(dataSet) 21 print(diffMat) 22 print(distances) 23 print(sortedDistIndicies) 24 print(classCount) 25 print(sortedClassCount)#打印上述中间结果
结果如下
dataSet=
[[ 1 2 3] [ 4 5 6] [ 7 8 9] [10 11 12] [13 14 15] [16 17 18]]
diffMat= [[ 5 7 14] [ 2 4 11] [ -1 1 8] [ -4 -2 5] [ -7 -5 2] [-10 -8 -1]]
distances= [16.43167673 11.87434209 8.1240384 6.70820393 8.83176087 12.84523258]
sortedDistIndicies= [3 2 4 1 5 0]
classCount= {'A': 1, 'B': 2}
sortedClassCount= [('B', 2), ('A', 1)]