如何对K-Means聚类后的三维数据集进行标注与3D可视化?
三维数据集K-Means聚类与可视化实现
1. 读取CSV数据集
先用pandas读取你的三维CSV数据,提取x、y、z特征列用于后续聚类:
import pandas as pd # 读取本地CSV文件(替换为你的实际文件路径) df = pd.read_csv("your_data.csv") # 提取三维特征 features = df[['x', 'y', 'z']].values
如果直接用你提供的样本数据,也可以用字符串IO快速加载:
from io import StringIO data_str = """x,y,z, label 2,1,3, A 5,3,1, B 6,2,2, C 9,5,3, B 2,3,4, A 4,1,4, A""" df = pd.read_csv(StringIO(data_str)) features = df[['x', 'y', 'z']].values
2. 执行K-Means聚类
和你处理二维数据的逻辑一致,直接用sklearn的K-Means对三维特征聚类:
from sklearn.cluster import KMeans # 设置聚类数(根据数据规模调整,示例用3类,你原代码的5类也可直接替换) kmeans = KMeans(n_clusters=3, random_state=42) kmeans_labels = kmeans.fit_predict(features) # 将聚类标签追加回原数据集,方便后续对比分析 df['cluster_label'] = kmeans_labels
3. 三维可视化聚类结果
使用matplotlib的3D绘图模块生成带聚类标签的三维散点图:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建3D画布 fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # 绘制三维散点,颜色对应聚类标签 scatter = ax.scatter(features[:, 0], features[:, 1], features[:, 2], c=kmeans_labels, s=50, cmap='Spectral') # 添加坐标轴标签与标题 ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.title('3D K-Means Clustering Result') # 添加聚类标签图例 plt.legend(*scatter.legend_elements(), title="Clusters") plt.show()
额外优化:对比原标签与聚类标签
如果需要同时展示原标签和聚类结果,可以用不同标记区分原标签:
fig = plt.figure(figsize=(10, 8)) ax = fig.add_subplot(111, projection='3d') # 定义不同原标签对应的标记 unique_original_labels = df[' label'].unique() markers = ['o', 's', '^'] for idx, label in enumerate(unique_original_labels): mask = df[' label'] == label ax.scatter(features[mask, 0], features[mask, 1], features[mask, 2], c=kmeans_labels[mask], s=50, marker=markers[idx], cmap='Spectral') ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') plt.title('3D Clustering with Original Labels') plt.legend(unique_original_labels, title="Original Labels") plt.show()
内容的提问来源于stack exchange,提问作者user19555179
相关产品推荐
相关产品推荐

