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

KMeans聚类质心远离数据点的原因排查(Python实现)

KMeans聚类质心偏离数据点的问题解决

问题原因

你对数据做了标准化处理后训练KMeans模型,但绘制质心时用的是标准化后的坐标,而散点图展示的是原始的Polarity(极性)和Subjetivity(主观性)值,两者尺度完全不匹配,导致红色叉号标记的质心远离数据点。

解决方法

需要将KMeans输出的标准化质心,通过StandardScaler的逆变换转换回原始数据的尺度,再与原始数据一同绘图。

修正后的完整代码

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd

# 提取特征数据
data = df[['Polarity', 'Subjetivity']].values

# 标准化处理
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

# 训练KMeans模型
k = 3 
kmeans = KMeans(n_clusters=k).fit(scaled_data)

# 给原始数据添加聚类标签
df['Cluster'] = kmeans.labels_

# 获取标准化后的质心,并逆变换回原始尺度
centroides_scaled = kmeans.cluster_centers_
centroides_original = scaler.inverse_transform(centroides_scaled)

# 转换为DataFrame用于绘图
df_kmeans_center = pd.DataFrame(
    {
        'x1': centroides_original[:, 0],
        'x2': centroides_original[:, 1]
    }
)

# 绘制散点图和质心
sns.scatterplot(x='Polarity', y='Subjetivity', hue='Cluster', data=df, palette="flare")
sns.scatterplot(data=df_kmeans_center, x='x1', y='x2', marker='X', size=500, color='red')
plt.title('推文聚类结果')
plt.xlabel('极性(Polarity)')
plt.ylabel('主观性(Subjetivity)')
plt.show()

关键说明

  • scaler.inverse_transform(centroides_scaled):将标准化后的质心坐标转换回原始数据的取值范围,确保质心与原始散点处于同一尺度空间。
  • 修正后,红色叉号标记的质心会准确落在对应聚类的中心位置,与数据点对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:55:22