如何获取sklearn K-means聚类后的各簇样本点?
怎么获取KMeans各簇对应的样本点
嘿,这个问题我在项目里碰到好多次了,其实借助sklearn KMeans的自带属性就能轻松解决,我给你拆解下具体步骤~
首先得明确一个核心属性:KMeans.labels_。当你调用kmeans.fit(X)完成聚类后,模型的这个属性会返回一个和样本数量等长的数组,每个元素对应该样本所属的簇的索引(从0开始计数,比如你分了3簇,索引就是0、1、2)。
接下来根据你的数据类型,有两种常用的分组方式:
1. 针对NumPy数组的纯数值数据
如果你的数据集X是NumPy数组,可以直接用布尔索引来筛选每个簇的样本:
# 假设已经拟合好KMeans模型 labels = kmeans.labels_ # 用字典存储每个簇的样本,键是簇ID,值是对应样本数组 cluster_samples = {} for cluster_id in range(kmeans.n_clusters): # 筛选出标签等于当前簇ID的所有样本 cluster_samples[cluster_id] = X[labels == cluster_id]
之后你想查看哪个簇的样本,直接用cluster_samples[0]、cluster_samples[1]就能快速获取啦。
2. 针对Pandas DataFrame的结构化数据
如果你的数据是带列名的DataFrame,用分组功能会更直观,还能保留特征的名称:
import pandas as pd # 把簇标签添加到原DataFrame中 df = pd.DataFrame(X, columns=["特征A", "特征B"]) df["簇标签"] = kmeans.labels_ # 按簇标签进行分组 cluster_groups = df.groupby("簇标签") # 获取单个簇的样本,比如第2簇 cluster_2_data = cluster_groups.get_group(2) # 要是想遍历所有簇查看数据,可以这么写 for cluster_id, group_data in cluster_groups: print(f"=== 第{cluster_id}簇的样本 ===") print(group_data.head()) # 这里只打印前5行,避免输出太多
小快捷:快速查看单个簇
如果你只是临时需要查看某一个簇的样本,不用写循环,一行代码就能搞定:
# 直接筛选出标签为1的所有样本 cluster_1_samples = X[kmeans.labels_ == 1]
内容的提问来源于stack exchange,提问作者intelligent
相关产品推荐
相关产品推荐

