如何在python中使没有簇质心的簇不可见?

问题描述

我有一个包含 15 个集群的 kmeans 集群对象。我重新排列了对象的 cluster_centers 并从该列表中删除了 5 个特定的聚类中心。现在我想可视化我的对象和聚类中心。但我找不到让一些集群不可见的方法

我最初的聚类数据是:

enter image description here

当我尝试使用新的簇质心可视化我的 kmeans 数据对象时,我得到以下输出

enter image description here

我想让没有“X”标记的集群不可见。我该怎么做?

我用这段代码绘制了上面的图:

plt.scatter(X_train[:,0],X_train[:,1],c=TrainData[1],cmap='gist_rainbow')
plt.scatter(new_centroids[:,new_centroids[:,s = 150,c = 'black',label = 'Centroid',marker="x")
plt.show()

解决方法

您可以构建过滤器以排除不需要的值。 您需要使用 TrainData[1]np.array(TrainData[1]) 转换为 numpy 数组(如果还没有)。

以下是使用 sklearns KMeans 的示例:


import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import numpy as np

X_train = np.random.normal(size=(5000,2))
kmeans_result = KMeans(n_clusters=15).fit(X_train)
new_centroids = kmeans_result.cluster_centers_
cluster_ids = kmeans_result.labels_
# cluster_ids = np.array(TrainData[1])

undesired1 = 3
undesired2 = 5
undesired3 = 7
filter = (cluster_ids != undesired1) & (cluster_ids != undesired2) & (cluster_ids != undesired3)
plt.scatter(X_train[filter,0],X_train[filter,1],c=cluster_ids[filter],cmap='gist_rainbow',alpha=0.4)
desired_centroid_ids = np.array([i for i in range(len(new_centroids)) if i not in [undesired1,undesired2,undesired3]])
plt.scatter(new_centroids[desired_centroid_ids,new_centroids[desired_centroid_ids,s=150,c='black',label='Centroid',marker="x")
plt.show()

example plot