如何获取K-means聚类中各质心值?基于MSE数据实现两聚类分析
基于MSE值的K-means聚类实现方案
没问题,我来帮你一步步完成这个K-means聚类任务!我们用Python的pandas处理CSV数据,sklearn的KMeans模块来实现聚类,完全能满足你获取聚类归属、聚类均值和质心的需求。
步骤1:导入所需库
首先我们需要导入处理数据和聚类的工具库:
import pandas as pd from sklearn.cluster import KMeans
步骤2:读取CSV数据
你的CSV数据是用空格分隔的,所以读取的时候要指定分隔符:
# 读取CSV文件,注意分隔符是空格,替换成你实际的文件路径 df = pd.read_csv('your_data.csv', sep='\s+')
步骤3:准备聚类特征
K-means要求输入是二维数组格式,所以我们只提取mse列并转换格式:
# 提取mse列,转换为KMeans需要的二维数组格式 X = df[['mse']].values
步骤4:执行K-means聚类(聚类数设为2)
初始化KMeans模型并拟合数据,设置随机种子保证结果可复现:
# 设置聚类数为2,random_state保证每次运行结果一致 kmeans = KMeans(n_clusters=2, random_state=42) # 拟合数据完成聚类 kmeans.fit(X)
步骤5:获取每个数据点的聚类归属
把聚类标签添加到原数据框中,就能直观看到每个日期对应的聚类分组:
# 添加聚类标签列到原DataFrame df['cluster_label'] = kmeans.labels_ # 查看前几行结果 print(df.head())
输出示例:
date mse cluster_label 0 2018-02-11 14.34 0 1 2018-02-12 7.24 0 2 2018-02-13 244.50 1 3 2018-02-14 3.50 0 4 2018-02-16 12.67 0
步骤6:计算每个聚类的MSE均值
用groupby对聚类标签分组,快速计算每个簇的MSE平均值:
cluster_means = df.groupby('cluster_label')['mse'].mean() print("每个聚类的MSE均值:") print(cluster_means)
步骤7:获取聚类质心值
KMeans模型的cluster_centers_属性直接返回每个聚类的质心,因为我们只基于MSE一个特征,所以质心值就是对应簇的MSE均值:
centroids = kmeans.cluster_centers_ print("每个聚类的质心值:") print(centroids)
输出示例(二维数组格式,每个元素对应一个聚类的质心):
[[18.76272728] [123.46 ]]
补充说明
- 单特征聚类场景下,聚类质心和聚类的MSE均值完全一致;如果是多特征聚类,质心会是每个特征均值组成的向量。
- 如果你不需要固定聚类结果,可以去掉
random_state=42参数,每次运行可能得到不同的标签编号(但聚类分组逻辑一致)。
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

