【问题标题】:Plot a single cluster绘制单个集群
【发布时间】:2021-11-28 05:49:00
【问题描述】:

我正在使用 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 数据框的哪一列对应于该点?

【问题讨论】:

    标签: python pandas cluster-analysis hdbscan


    【解决方案1】:

    我建议改为将所有相关信息添加到 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()
    

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2019-04-12
      • 2017-07-28
      • 2016-04-29
      • 2019-06-10
      • 1970-01-01
      • 2018-02-24
      • 2014-11-15
      • 2020-08-29
      相关资源
      最近更新 更多