K-Means聚类中如何对簇内图像按相似度排序?是否有可用衍生指标?
簇内图像相似度排序可行方案
聚类衍生可用产物说明
首先明确:K-Means聚类没有直接生成可直接用于簇内相似度排序的现成指标,你提到的「类似2D散点到原点的距离」这类原生输出不存在,但是可以复用两类聚类过程的中间产物,不需要重新跑图像特征提取:
- 所有图像的预提取特征向量:K-Means聚类的输入就是你提前算好的图像特征(比如CNN全局特征、CLIP特征等),可以直接拿来做相似度计算
- 簇-样本的映射关系:聚类完成后你已经做好了样本到簇的分配,直接按簇提取对应样本的特征子集即可,不用再做匹配
具体实现方案
方案1:优化你现有的锚点排序思路
你提到的用annoy计算单张参考图和其他样本距离的方案是可行的,只要把随机选参考图改成选距离簇质心最近的样本作为锚点,排序逻辑会更合理:
- 计算当前簇所有样本到簇质心的距离,取距离最小的样本作为锚点(该样本是当前簇的典型代表)
- 计算簇内所有样本和锚点特征的余弦/欧氏距离,按距离从小到大排序
- 给对应图像文件名添加
0001_类的递增前缀即可
如果单簇样本量小于1000,不需要用annoy,直接调用sklearn.metrics.pairwise.cosine_distances计算全量距离即可,实现更简单。
方案2:层次聚类全局排序(相邻样本相似度更高)
如果不想依赖单一锚点,希望排序后相邻的图像相似度尽可能高,整体浏览时渐变更顺滑,可以直接对簇内特征子集做层次聚类:
- 调用
scipy.cluster.hierarchy.linkage计算簇内特征的层次聚类树 - 直接取聚类结果的
leaves_order属性,就能得到全局最优的相似度排序索引,不用自定义规则
方案3:降维投影排序(匹配你想要的2D散点类指标)
如果你需要类似2D散点坐标的可解释排序指标,可以对簇内特征子集做低维降维:
- 用UMAP或TSNE把簇内高维特征降为2维,得到每个样本的(x,y)坐标
- 自定义排序规则即可:比如按x坐标从小到大排序、按到(0,0)点的曼哈顿距离排序,排序结果和你在2D散点图上按规则浏览的顺序完全一致,符合你提到的类似「到原点距离」的量化需求。
内容的提问来源于stack exchange,提问作者Martim Passos
相关产品推荐
相关产品推荐

