kNN分类算法实现
kNN算法就是计算每个点到其他所有点的距离,选出距离最小的k个点。在这k个点里,哪个类别的最多,就把待分类的点归到哪类。
kNN.py:
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 def classfy0(inX,dataSet,labels,k): 10 dataSize=dataSet.shape[0]#数据有几行 11 diffMat=tile(inX,(dataSize,1))-dataSet#想求距离,差的平方和开根号 12 sqDiffMat=diffMat**2 13 sqDistances=sqDiffMat.sum(axis=1) 14 distances=sqDistances**0.5 15 16 classCount={} 17 sortedDistIndicies=distances.argsort()#按照距离排序,注意argsort这个函数,返回的是从小到大的索引,例如数组是3,1,2,那么返回结果是1,2,0 18 for i in range(k): 19 votelabel=labels[sortedDistIndicies[i]]#前k个是什么标签 20 classCount[votelabel]=classCount.get(votelabel,0)+1 21 22 sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)#按照第二个元素的值进行排序,逆序就是从大到小 23 return sortedClassCount[0][0]
调用: