【问题标题】:k-Nearest Neighbors rundownk-最近邻列表
【发布时间】:2018-04-08 14:01:02
【问题描述】:

我正在尝试遵循 k-Nearest Neighbors 的示例,但我不确定 numpy 命令语法。我应该进行矩阵距离计算,给出的代码是

def classify(inputVector, trainingData,labels,k):
     dataSetSize=trainingData.shape[0]
     diffMat=tile(inputVector,(dataSetSize,1))-trainingData
     sqDiffMat = diffMat**2
     sqDistances = sqDiffMat.sum(axis=1)
     distances = sqDistances**0.5
     sortedDistIndicies = distances.argsort()     
for i in range(k):
    voteIlabel = labels[sortedDistIndicies[i]]
    classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

def createDataSet():
     group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
     labels = ['A','A','B','B']
     return group, labels

我的问题是sqDistances**0.5 如何等于距离方程((A[0]-B[0])+(A[1]-B[1]))^1/2?我不了解 tile 是如何影响它的,具体而言,矩阵是如何由 (datasetsize,1) 训练数据构成的。

【问题讨论】:

  • 也许您可以展示一小部分 inputVector 和 trainingData,我们只能假设它们是数组
  • 这是其余的代码段。希望这会有所帮助

标签: python python-2.7 numpy machine-learning


【解决方案1】:

我希望下面将解释工作原理。

Numpy 磁贴:https://docs.scipy.org/doc/numpy/reference/generated/numpy.tile.html

使用此函数,您可以从与训练数据形状相同的输入向量创建矩阵。从这个矩阵中,您减去训练数据,这将为您提供您提到的 test[0]-train[0] 的一部分,即元素方面的差异。

然后您使用diffMat**2 对每个获得的元素进行平方,然后沿axis = 1 (https://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html) 求和。这导致了像(test[0] - train[0])^2 + (test[1] - train[1])^2 这样的等式。

接下来通过sqDistances**0.5,它将给出欧几里得距离。

要计算欧几里得距离,这可能会有所帮助 https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.euclidean.html#scipy.spatial.distance.euclidean

【讨论】:

  • 从参考资料中我发现 .shape[0] 在这种情况下为 (tile) 保留行值和代表的格式是 (dataSetSize,1))-trainingData。我不明白为什么会这样。还有axis =1
  • 我真正想知道的是 datSetSize 在 tile 中使用时是如何定义的。我不确定 datSetSize,1 是做什么的
  • 要减去矩阵,您需要两个矩阵大小相同。所以你需要知道训练数据中有多少训练样本。这就是 datSetSize 存在的原因。请参阅为 Numpy 磁贴提供的链接,页面上的最后一个示例显示了 datSetSize,1 的作用。它将输入向量复制到“datSetSize”次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2014-05-14
  • 2011-12-06
  • 1970-01-01
  • 2013-03-21
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多