python - python - 如何在python中使没有簇质心的簇不可见?
问题描述
我有一个包含 15 个集群的 kmeans 集群对象。我重新排列了对象的 cluster_centers 并从该列表中删除了 5 个特定的集群中心。现在我想可视化我的对象和集群中心。但我找不到让一些集群不可见的方法。
我最初的聚类数据是:
当我尝试使用其新的集群质心来可视化我的 kmeans 数据对象时,我得到以下输出:
我想让上面没有“X”标记的集群不可见。我怎样才能做到这一点?
我用这段代码来绘制上面的图:
plt.scatter(X_train[:,0], X_train[:,1],c=TrainData[1],cmap='gist_rainbow')
plt.scatter(new_centroids[:,0], new_centroids[:, 1],s = 150, c = 'black', label = 'Centroid', marker="x")
plt.show()
解决方案
您可以构建一个过滤器来排除不需要的值。您需要TrainData[1]
使用np.array(TrainData[1])
.
这是使用 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, 0], new_centroids[desired_centroid_ids, 1], s=150, c='black',
label='Centroid', marker="x")
plt.show()
推荐阅读
- python - 从 txt 文件创建字典
- python - 与类方法并行运行的 SciPy 优化
- html - HTML5 输入类型日期中没有闪烁的光标
- unit-testing - 在 Go 中使用 HTTP 请求测试函数最惯用的方法是什么?
- javascript - Node.js Express - 客户端下载栏?
- convolution - 这个方程是否正确地描述了人工神经网络中卷积层的操作?
- vuex - Feathersjs-Vuex:如何从 sql 查询更新 vuex 状态
- javascript - 如何使用 componentWillUnmount()?
- php - 获取发送表单数据并从 php 接收它
- c++ - 将 char 指针传递给字符串的 push_back 向量