【发布时间】:2017-12-04 18:40:11
【问题描述】:
我几乎是一个初学者,但我很难过,我觉得我不应该这样做。
我正在学习使用 numpy 的 kNN 算法。代码如下:
def kNN_classify(query, dataset, labels, k):
dataSetSize = dataset.shape[0]
diffMat = tile(query, (dataSetSize,1)) - dataset
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
sortedIndices = distances.argsort()
classCount = dict()
for i in range(k):
voteIlabel = labels[sortedIndices[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
sortedClassCount = sorted(classCount.items(), key =
operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
我首先使用基本的毕达哥拉斯来获取到查询点的距离数组。在这个数组中,距离的排序与原始数据中的点一样,与标签相同。然后我使用 argsort 得到一个数组,它给了我距离的排序顺序。然后我遍历这个数组并为标签投票,该标签具有 distances.argsort 的第 k 个元素的索引。
我知道它有效,我已经对其进行了测试,但我不知道如何。我错过了什么?
【问题讨论】:
-
你能修复你的缩进吗?
-
是否有特定的代码你不明白?
-
是的,argsort 和对结果数组的迭代如何导致对 k 个最近点进行投票。