python - 绘制单个集群
问题描述
我正在使用 HDBSCAN,我只想绘制一个数据集群。
这是我当前的代码:
import hdbscan
import pandas as pd
from sklearn.datasets import make_blobs
blobs, labels = make_blobs(n_samples=2000, n_features=10)
clusterer = hdbscan.HDBSCAN(min_cluster_size=15).fit(blobs)
color_palette = sns.color_palette('deep', 8)
cluster_colors = [color_palette[x] if x >= 0
else (0.5, 0.5, 0.5)
for x in clusterer.labels_]
cluster_member_colors = [sns.desaturate(x, p) for x, p in
zip(cluster_colors, clusterer.probabilities_)]
plt.scatter(blobs[:, 2], blobs[:, 5], s=50, linewidth=0, c=cluster_member_colors, alpha=0.25)
plt.show()
我知道数据有 3 个集群,但我怎样才能只绘制其中一个?
如果我有一个聚类点,我怎么知道熊猫数据框的哪一列对应于那个点?
解决方案
我建议将所有相关信息添加到 pandas 数据框中。
df = pd.DataFrame(blobs)
clusterer = hdbscan.HDBSCAN(min_cluster_size=15).fit(blobs)
df['cluster'] = clusterer.labels_
df['probability'] = clusterer.probabilities_
color_palette = sns.color_palette('deep', 8)
def get_member_color(row):
if row['cluster'] >= 0:
c = color_palette[int(row['cluster'])]
else:
c = (0.5, 0.5, 0.5)
member_color = sns.desaturate(c, row['probability'])
return member_color
df['member_color'] = df.apply(get_member_color, axis=1)
现在,您可以轻松地过滤它们所属的集群之后的行。例如,要绘制属于集群 2 的所有样本,我们可以这样做:
df2 = df.loc[df['cluster'] == 2]
plt.scatter(df2.iloc[:, 2], df2.iloc[:, 5], s=50, linewidth=0, c=df2['member_color'], alpha=0.25)
plt.show()
推荐阅读
- c# - 当 streamwriter 语句使用 void 和 int 时,如何解决布尔错误?
- algorithm - 任何关于具有完美信息的有限二部图游戏的游戏/图论?
- angular - 有没有办法在 Angular 7 中为模板 html 属性 *key* 使用变量?
- java - 如何使用eclipse在java中打印带下划线的字符串
- go - httputil.NewSingleHostReverseProxy 调用会增加内存使用量
- python-3.x - 从 Tkinter 中的回调函数中检索信息
- python - 创建时将用户设置为组
- swift - 如何获取要正确更新的实体数量
- python - 当键对相同时,将值从一个嵌套字典复制到另一个嵌套字典
- python - 是否可以更改您在 python 中使用的架构?