HDBSCAN聚类后如何单独绘制单个聚类及匹配pandas数据框列
仅绘制单个聚类的实现方案
首先补全原有代码缺失的依赖导入(现有代码漏了seaborn和matplotlib的导入):
import seaborn as sns import matplotlib.pyplot as plt
之后通过布尔索引筛选目标聚类的样本即可,修改后的完整代码示例如下(以绘制聚类ID为1的簇为例):
import hdbscan import pandas as pd import seaborn as sns import matplotlib.pyplot as plt 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) # 定义你要绘制的目标聚类ID,总共有3个聚类,可选值为0、1、2 target_cluster = 1 # 生成布尔掩码,筛选属于目标聚类的样本 mask = clusterer.labels_ == target_cluster # 仅提取目标聚类的样本、颜色、概率数据 target_blobs = blobs[mask] target_probs = clusterer.probabilities_[mask] color_palette = sns.color_palette('deep', 8) target_color = color_palette[target_cluster] target_colors = [sns.desaturate(target_color, p) for p in target_probs] # 绘图 plt.scatter(target_blobs[:, 2], target_blobs[:, 5], s=50, linewidth=0, c=target_colors, alpha=0.25) plt.show()
注意:标签为-1的是HDBSCAN识别的噪声点,不属于你提到的3个有效聚类,筛选目标聚类时不需要包含该值。如果需要保留其他聚类/噪声点作为灰色背景,不需要做样本过滤,仅把非目标聚类的颜色统一设置为灰色即可。
聚类点关联pandas数据框的方法
首先明确:HDBSCAN输出的聚类标签和输入数据的行(单个样本)是一一对应的,和列(特征字段)没有直接的匹配关系,匹配逻辑如下:
- 如果你是要把聚类结果追加到原始pandas数据框,直接把标签作为新列写入即可:
# 假设你的原始数据框为df,行数和聚类输入的blobs一致 df = pd.DataFrame(blobs, columns=[f'feature_{i}' for i in range(10)]) # 新增聚类标签列,第i行的标签对应第i个样本的聚类结果 df['cluster_label'] = clusterer.labels_
- 如果你要提取某个聚类对应的所有样本数据,直接按标签筛选行即可:
# 提取聚类ID为1的所有样本的全部特征字段 target_cluster_df = df[df['cluster_label'] == 1]
如果你是想问可视化时选择哪两列(特征)绘制散点图,这完全取决于你的分析需求:你现有代码里选的是第3个(索引2)和第6个(索引5)特征,对应上述示例数据框的feature_2和feature_5列,你可以按需换成其他特征列。
内容的提问来源于stack exchange,提问作者Cruz
相关产品推荐
相关产品推荐

