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

使用KMeans聚类时,如何为每行输出对应畸变值并添加至数据集?

给KMeans聚类的每行数据添加对应畸变值的方法

当然可以实现!你不用再按簇拆分数据来计算单个样本的畸变值,直接一次性生成和原始数据集行数匹配的距离列就好,下面是具体的实现步骤和代码:

1. 先训练你的KMeans模型

首先正常完成KMeans的训练,获取模型的簇标签和簇中心:

from sklearn.cluster import KMeans
import pandas as pd
import numpy as np

# 假设你的原始数据集是df,feature_cols是你用来聚类的特征列
X = df[feature_cols]
# 初始化并训练KMeans,这里簇数设为3,你可以根据自己的需求调整
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

2. 计算每个样本到所属簇中心的距离(单条数据的畸变值)

核心思路是利用簇标签,给每个样本匹配对应的簇中心,然后直接计算欧氏距离:

# 获取每个样本对应的簇标签
sample_labels = kmeans.labels_
# 获取所有簇的中心坐标
centers = kmeans.cluster_centers_

# 计算每个样本到其所属簇中心的欧氏距离
# cluster_centers[sample_labels]会自动根据每个样本的标签匹配对应的簇中心
sample_distances = np.sqrt(np.sum((X - centers[sample_labels])**2, axis=1))

这里有个小验证:模型的inertia_属性是所有样本畸变值的平方和,你可以用np.sum(sample_distances ** 2)来验证,结果会和kmeans.inertia_完全一致,说明这个计算是准确的。

3. 将距离列合并到原始数据集

现在sample_distances是一个和原始数据集行数完全一致的一维数组,直接添加为新列即可:

# 给原始数据集添加新列,命名为cluster_distance(你可以自定义)
df['cluster_distance'] = sample_distances

# 如果你要找距离最大的样本,直接排序筛选就行
top_largest_distance_samples = df.sort_values(by='cluster_distance', ascending=False).head(10)

这样你就得到了带每个样本对应畸变值的完整数据集,不用再按簇拆分处理,找最大距离的样本也变得非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:53:48