kNN

 1 def classify0(inX, dataSet, labels, k):
 2     dataSetSize = dataSet.shape[0]
 3     diffMat = tile(inX, (dataSetSize,1)) - dataSet
 4     sqDiffMat = diffMat**2
 5     sqDistances = sqDiffMat.sum(axis=1)
 6     distances = sqDistances**0.5
7 sortedDistIndicies = distances.argsort() 8 classCount={}
9 for i in range(k): 10 voteIlabel = labels[sortedDistIndicies[i]] 11 classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 12 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) 13 return sortedClassCount[0][0]

1-6是计算欧式距离

7-8是根据距离排序,注意argsort 返回的list是索引值

9-13是计算距离最小的k个中不同label数目。

其中 tile argsort均在另外的随笔中介绍过了

classCount是一个dict  ,dict.get(key,default),返回的是key为xx的个数,如果没有就返回default 值,这里设置为了0.

所以这一步是在计数。

熟悉 sort的用法。operator.itemgetter(1) 命令返回的是一个函数,key=func之后就按照func来处理每一个数据 然后再进行排序。

operator.itemgetter(1)

猜你喜欢

转载自www.cnblogs.com/nzmx123/p/8954940.html
kNN