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]

调用:

 

posted @ 2019-11-21 21:09  glam  阅读(200)  评论(0)    收藏  举报