从 100 个数据点中找出 10 个最相似的数据点?

数据挖掘 scikit-学习 聚类 相似
2022-03-09 22:35:28

我正在尝试解决一个问题,即我需要将彼此最相似的电池单元分组以形成可靠的电池组。这似乎是一个聚类问题,但我只需要从 100 个中找到前 10 个最相似的单元格。

有什么办法可以解决这个问题吗?

2个回答

这通常称为最近邻搜索

最常见的方法需要距离度量。考虑到电池组的特性,它们之间的距离有多近?

正如您所提到的,它可以通过聚类来解决,但鉴于您需要彼此的前 n 个,您可以执行以下操作:

假设您有 nxm 的矩阵 X(n-电池 m-每个的特征/属性)

  1. 定义距离度量(欧几里得、马氏距离等)
  2. 计算电池 j 与所有其他电池 i - j 之间的距离
  3. 对距电池的前 n 个距离进行排序

在伪代码中,它将是这样的:

def kclosest(frame, battery_id, metric = "euclidean", top = 10):
    """
    Return the top n closest from battery id
    """
    distances = list()
    for index, row in frame.iterrows():
        d = metric(frame[frame.id == battery_id].values, row)
        distances.append(d)
    return sorted(distances)[1:top] # The closest point will always be the itself that's why we get from 1 to top