我有 N 个对象之间的相似度矩阵。对于每 N 个对象,我可以衡量它们彼此之间的相似程度 - 0 相同(主对角线)并且随着它们变得越来越不相似而增加值。类似的东西(如果我说要聚集在一起的 10 000 个元素,实际矩阵将是 10 000 x 10 000):
[ 0 5 12 7 ]
[ - 0 9 2 ]
[ - - 0 6 ]
[ - - - 0 ]
(假设索引从 0 开始)所以这里 object_0 与 object_1 (5) 最相似,但 object_1 本身与 object_3 (2) 更相似,等等。
我想将其分为 k 组,以最小化总体得分或集群内得分。我不确定这实际上是否会产生很大的不同。我还没有检查过这方面的数学,但我觉得在某些情况下,最小化特定集群的分数不一定会最小化总体分数(在所有集群中)。归根结底,即使严格地考虑可能存在差异,我实际上可能并不关心结果是否足够接近。
一些细节:
- 集群不必大小相等
- 我真的不介意集群的数量是输入还是由算法本身以某种方式决定(我想我更喜欢输入它)
- 通常我会有大约 10 000 个元素进行聚类。如果我推动它,也许 40 000。但后来我可能需要为一堆这样大小的矩阵重复运行它。
在执行此操作的算法/库之上,奖励积分:
- 一些已经实现它的库,所以我希望可以为它正确格式化数据,并在我花费大量时间之前看看它是否能给出好的结果
- 对于这样的lib,支持并行处理
- 其他漂亮的花里胡哨(如最大迭代次数、输入一些停止标准的能力等)
如果做不到这一点,当然它也可能只是一些允许我将它们分组的伪代码。