kmeans 集群中节点与质心之间的距离?

新手上路,请多包涵

提取 kmeans 集群中节点和质心之间距离的任何选项。

我已经对文本嵌入数据集进行了 Kmeans 聚类,我想知道在每个聚类中哪些节点远离质心,以便我可以检查各个节点的功能是否有所不同。

提前致谢!

原文由 Arav 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 478
2 个回答

KMeans.transform() 返回每个样本到聚类中心的距离数组。

 import numpy as np

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

import matplotlib.pyplot as plt
plt.style.use('ggplot')
import seaborn as sns

# Generate some random clusters
X, y = make_blobs()
kmeans = KMeans(n_clusters=3).fit(X)

# plot the cluster centers and samples
sns.scatterplot(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1],
                marker='+',
                color='black',
                s=200);
sns.scatterplot(X[:,0], X[:,1], hue=y,
                palette=sns.color_palette("Set1", n_colors=3));

在此处输入图像描述

transform X 并取每行的总和 ( axis=1 ) 以识别离中心最远的样本。

 # squared distance to cluster center
X_dist = kmeans.transform(X)**2

# do something useful...
import pandas as pd
df = pd.DataFrame(X_dist.sum(axis=1).round(2), columns=['sqdist'])
df['label'] = y

df.head()
    sqdist  label
0   211.12  0
1   257.58  0
2   347.08  1
3   209.69  0
4   244.54  0

视觉检查——相同的图,只是这次突出显示了距每个聚类中心最远的点:

 # for each cluster, find the furthest point
max_indices = []
for label in np.unique(kmeans.labels_):
    X_label_indices = np.where(y==label)[0]
    max_label_idx = X_label_indices[np.argmax(X_dist[y==label].sum(axis=1))]
    max_indices.append(max_label_idx)

# replot, but highlight the furthest point
sns.scatterplot(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1],
                marker='+',
                color='black',
                s=200);
sns.scatterplot(X[:,0], X[:,1], hue=y,
                palette=sns.color_palette("Set1", n_colors=3));
# highlight the furthest point in black
sns.scatterplot(X[max_indices, 0], X[max_indices, 1], color='black');

在此处输入图像描述

原文由 Kevin 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您使用的是 Python 和 sklearn。

从这里: https ://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans

你可以获得 labels_cluster_centers_

现在,您确定采用每个节点及其聚类中心的向量的距离函数。按 labels_ 过滤并计算每个标签内每个点的距离。

原文由 avchauzov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进