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

Scikit-Learn KMeans聚类可视化与原数据不符问题排查

KMeans聚类可视化差异问题排查与修正

核心问题排查方向

从你描述的情况来看,cluster_df构建错误或前置步骤疏漏是主要原因,以下是逐一排查点:


1. 特征列选择是否准确

先确认你选择训练的两列是否完全匹配数据集列名,避免拼写错误、大小写不一致或多选列:

# 错误示例:列名拼写错误/多选无关列
X = df[['perimetre', 'asymmetry', 'area']]
# 正确操作:严格指定目标列,并用copy避免视图警告
X = df[['perimeter', 'asymmetry']].copy()

2. 特征未做标准化(KMeans核心坑点)

KMeans基于欧氏距离计算,若perimeter和asymmetry数值尺度差异极大,聚类结果会被数值大的特征主导,导致和原分类分布完全偏离。必须先标准化:

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# 标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 训练KMeans(注意n_clusters要和原数据类别数匹配)
kmeans = KMeans(n_clusters=3, random_state=42)
cluster_labels = kmeans.fit_predict(X_scaled)

3. cluster_df构建时索引是否对齐

如果合并聚类标签时索引错位,会导致标签和样本不匹配,可视化自然混乱:

# 错误示例:直接赋值但索引未对齐(比如X是numpy数组且打乱过)
cluster_df = df.copy()
cluster_df['cluster'] = cluster_labels  # 若X的样本顺序和df不一致则出错
# 正确操作:确保标签和原数据样本一一对应
# 方式1:用assign直接添加标签(X是df子集时,样本顺序一致)
cluster_df = df.assign(cluster=cluster_labels)
# 方式2:若X是numpy数组,先检查X和df的样本顺序,再赋值
cluster_df = df.copy()
cluster_df['cluster'] = kmeans.labels_  # KMeans的labels_会按训练样本顺序输出

4. 可视化时是否用了正确的列

确保聚类结果可视化和原数据可视化使用的是同一两列(perimeter和asymmetry),避免误用其他特征:

import matplotlib.pyplot as plt

# 原数据分类可视化(假设原标签列名为'class')
plt.figure(figsize=(8, 4))
plt.subplot(1, 2, 1)
plt.scatter(df['perimeter'], df['asymmetry'], c=df['class'], cmap='viridis')
plt.xlabel('Perimeter')
plt.ylabel('Asymmetry')
plt.title('Original Class')

# 聚类结果可视化
plt.subplot(1, 2, 2)
plt.scatter(cluster_df['perimeter'], cluster_df['asymmetry'], c=cluster_df['cluster'], cmap='viridis')
plt.xlabel('Perimeter')
plt.ylabel('Asymmetry')
plt.title('KMeans Clusters')

plt.tight_layout()
plt.show()

额外检查项

  • 确认n_clusters参数和原数据的类别数量一致,比如原数据是3类,KMeans不能设为2类;
  • 检查X中是否存在缺失值,缺失值会导致聚类结果异常,可通过X.isnull().sum()查看,必要时用X.fillna(X.mean())填充。

内容的提问来源于stack exchange,提问作者Shree_ML

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:27:21