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

K-means多次运行的聚类中心数组如何正确计算均值与中位数中心

问题根因

代码返回单个标量结果由两个numpy用法错误导致:

  • 调用np.mean(center_array)时未指定axis参数,numpy默认将输入所有元素展平为一维数组计算全局平均值,仅返回单个数值
  • 对标量形式的全局均值结果调用np.vectorize(np.mean)属于无效操作,无法输出按维度、按聚类划分的中心结果

计算前需先解决两个前置问题,否则即使修正numpy参数也会得到错误结果:

  • 数组结构不规则:从给出的样例看,第一次K-means运行输出3个12维聚类中心,第二次仅输出1个,需先确认K值设置固定,排查是否存在运行时聚类收敛异常、聚类数不一致的问题
  • 聚类标签未对齐:K-means每次运行输出的聚类序号为随机排列,单次运行输出的0号聚类中心,在其他次运行中可能对应2号聚类,直接跨运行计算均值/中位数会完全失真,需先用匈牙利算法等匹配方法,将每次运行的聚类中心与基准中心做最小距离匹配,保证同序号中心对应同一真实聚类
正确计算流程
  1. 规整数组结构:将100次对齐后的聚类中心整理为形状为(n_runs, n_clusters, n_features)的三维numpy数组,若固定K=3、特征数12、共运行100次,数组标准形状为(100, 3, 12)
  2. 计算平均中心:沿运行次数维度(第0轴)计算均值,代码如下:
# centers_all为对齐规整后的三维聚类中心数组
mean_centers = np.mean(centers_all, axis=0)

输出结果mean_centers形状为(3,12),对应3个聚类各特征维度的平均中心。
3. 计算中位数中心:沿第0轴计算中位数即可,代码如下:

median_centers = np.median(centers_all, axis=0)

输出结果median_centers形状为(3,12),每个位置的数值为对应聚类对应特征在100次运行结果中的中位数,即目标中位数中心。

内容的提问来源于stack exchange,提问作者Fábio Pires

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:21:32