【问题标题】:Find distance between a centroid and a point查找质心和点之间的距离
【发布时间】:2021-09-09 14:04:47
【问题描述】:

假设我有这个点的特征列表[3.5, 2.5, 7.5] 和一个类的计算质心 - 0.700

我必须找到点和质心之间的欧几里得距离。这就是我迷失的地方,因为我使用的欧几里得距离公式是:

def __euclidean(self, x, y):
    return sqrt(sum(pow(a - b, 2) for a, b in zip(x, y)))

在这种情况下,x 变量是特征列表,y 变量是质心的值 - 0.7。 我错过了什么明显的东西吗?

编辑:我正在添加我正在尝试实现的算法以及质心的公式。

算法:

算法 1 的输入是训练数据,X = {x1, x2,...,xn}、质心邻居的数量 k、用于计算点之间相似度的距离度量 (Dist) 和目标将估计其类的点 p。输出是定义周围邻域的半径 目标点p。

质心公式:

def __compute_centroid(self, points):
    sum_centroid = []
    for p in points:
        sum_centroid.append(sum(p))
    return (1 / len(points)) * sum(sum_centroid)

【问题讨论】:

  • ?您的代码是否产生错误?有什么问题?
  • 不清楚,你的空间是1D还是2D?我只看到一个一维向量作为您的点列表
  • @mozway 不,这是一个具有 3 个特征(x1、x2、x3)的点。我的问题是我没有 y1, y2, y3 因为质心只有 0.7
  • @Him 没有错误只是停留在一些逻辑上
  • 找到 3D 向量 x 和 1D 向量 y 之间的距离是什么意思?

标签: python nearest-neighbor centroid


【解决方案1】:

我认为问题出在compute_centroid 函数上。

对于笛卡尔坐标,质心是独立于其他坐标计算的每个坐标的平均值:

>>> import numpy as np
>>> points = [[1, 2, 3], [4, 5, 6]]
>>> centroid = np.mean(points, axis=0)
>>> centroid
array([2.5, 3.5, 4.5])

这是一个 3 向量,所以现在您可以计算它与另一个数据点之间的距离:

>>> q = np.array([7, 8, 9])
>>> np.linalg.norm(q - centroid)
7.794228634059948

(我认为你的欧几里得函数有效,但我没有测试它。)

【讨论】:

  • 非常感谢!我已根据您的建议更改了 compute_centroid 函数,并保留了 Euclidean 函数。它完美地工作!再次感谢您!
猜你喜欢
  • 2021-06-10
  • 2019-06-11
  • 2019-11-20
  • 1970-01-01
  • 2019-09-16
  • 2012-06-20
  • 2017-05-01
  • 2021-01-14
  • 2021-09-23
相关资源
最近更新 更多