You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:21:08