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

如何匹配两个相似数据集经KMeans聚类后得到的不同标签分配?

实现思路

方法1:基于质心距离的匈牙利算法匹配(最常用,效果稳定)

这是该类标签对齐场景的标准解决方案,仅要求两个数据集的聚类簇数量完全一致:

  • 提取数据集A的所有聚类质心,记为矩阵 centroids_A,形状为 (n_clusters, 3),索引顺序对应A的原始标签0到n-1
  • 提取数据集B的所有聚类质心,记为矩阵 centroids_B,形状同样为 (n_clusters, 3),索引顺序对应B的原始标签0到n-1
  • 计算两个质心集合的两两距离矩阵:dist_matrix[i][j] 表示A的第i个质心和B的第j个质心的欧氏距离(数据已归一化的场景下也可使用余弦距离)
  • 调用匈牙利算法(Kuhn-Munkres算法)求解该距离矩阵的最小权匹配,得到的匹配结果即为A的标签i对应B的标签j
  • 最后构建标签映射字典,将B的所有原始标签按照映射关系替换为A的对应标签即可完成对齐

Python实现可直接调用scipy的scipy.optimize.linear_sum_assignment接口,示例代码片段:

import numpy as np
from scipy.optimize import linear_sum_assignment

# 输入两个质心矩阵
dist = np.linalg.norm(centroids_A[:, None] - centroids_B[None, :], axis=2)
row_ind, col_ind = linear_sum_assignment(dist)
# 构建映射:B的原始标签 -> A的对应标签
label_map = {col: row for row, col in zip(row_ind, col_ind)}
# 对B的原始标签重映射
aligned_labels_B = np.array([label_map[x] for x in original_labels_B])

方法2:基于A的聚类模型直接预测B的标签(简单高效,适合分布差异极小的场景)

如果两个数据集的分布偏差确实很小,可以不用单独对B执行KMeans聚类:

  • 直接使用数据集A训练完成的KMeans模型,对B的所有样本执行预测,得到的标签天然和A的标签体系对齐,无需额外匹配
  • 该方法实现成本极低,缺点是如果B的簇分布和A存在明显偏移,聚类效果会弱于单独对B执行KMeans的结果

方法3:基于最大重叠的标签匹配(适合存在样本对应关系的场景)

如果两个数据集的样本是一一对应的(比如同一批样本两次采集得到的两个数据集),可以用标签重叠度完成匹配:

  • 统计B的每个标签和A的每个标签的共同样本数量,构建共现矩阵
  • 同样用匈牙利算法求解最大匹配,得到最终的标签映射关系

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:45:08