对未知类别属性的数据集中的每个点依次执行以下操作:
- 计算已知类别的数据集中的点与当前点之间的距离
- 按距离递增次序排序
- 选取与当前点距离最小的K个点
- 确定前K个点所在类别的出现频率
- 返回前k个点出现频率最高的类别作为当前点的预测分类
import numpy as np
import operator
def createDataSet():
group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels
def classif0(inX,dataSet,labels,k=2):
dataSetSize=dataSet.shape[0]
diffMat=np.tile(inX,(dataSetSize,1))-dataSet
sqDiffMat=diffMat**2
sqDistances=sqDiffMat.sum(axis=1)
distances=sqDistances**0.5
print(distances)
sortedDistIndicies=distances.argsort()#argsort函数返回的是数组值从小到大的索引值
print(sortedDistIndicies)
classCount={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]]
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#dict.get(key, default=None) key -- 字典中要查找的键。default -- 如果指定键的值不存在时,返回该默认值值
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #按第二个价值来排序
return sortedClassCount[0][0]
A=input()
B=[int(x) for x in A.split()]
dataSet,labels=createDataSet()
print(classif0(B,dataSet,labels))