【问题标题】:Find the distance between each element and the centroid based on distance matrix?根据距离矩阵找到每个元素与质心之间的距离?
【发布时间】:2021-09-23 14:12:15
【问题描述】:

我有一个距离矩阵(元素之间的成对距离),我想找到集合的质心并获取每个元素与质心之间的距离。

我试图使用 k-means 来做到这一点并设置 n_clusters=1

km = KMeans(n_clusters=1)
km.fit(distance_matrix)
km.cluster_centers_

cluster_centers_ 返回坐标列表,但我不确定这是否代表每个元素与质心之间的距离。

如果 k-means 不是解决这个问题的正确方法,我应该使用哪种算法?

【问题讨论】:

标签: python scikit-learn data-science k-means distance-matrix


【解决方案1】:
# To obtain the centers of the clusters
centroids = km.cluster_centers_

假设数据集是一个数据框(m*n 维)。

# distances 
distances = np.empty((0,len(dataset.axes[0])), float)

# getting points and distances
for i, center_elem in enumerate(centroids):
    print(len(center_elem))
    # cdist is used to calculate the distance between center and other points
    distances = np.append(distances, cdist([center_elem],dataset[clusters == i],'euclidean')) 

所以,现在距离是点到对应质心的距离。

【讨论】:

    【解决方案2】:

    K-Means 不使用成对距离。所以距离矩阵对于这个算法是没有用的。 K-Means 接受 2D 或更多数据样本。为您的数据集定义您的特征(维度)并相应地提供数据,构建矩阵,然后像上面那样将矩阵传递给 K-Means。

    km.cluster_centers_ 将返回质心列表。

    您至少需要一些参考地来计算质心,至少需要计算点的坐标。然后,您甚至可以使用 k-means 来计算各种集群中的质心。然后你可以计算每个点到质心的距离。如果没有给出点之间的坐标,距离矩阵在这里是没有用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 2018-12-02
      • 2021-01-14
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多