本文介绍了K均值簇中节点和质心之间的距离?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
用于提取k均值群集中节点和质心之间距离的任何选项。
我对一个嵌入文本的数据集进行了KMeans聚类,我想知道每个集群中哪些节点远离质心,以便我可以检查各个节点的功能是否有所不同。
提前谢谢!
推荐答案
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');
这篇关于K均值簇中节点和质心之间的距离?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!