在stackoverflow上有一些问题提到了这个问题,但我还没有找到一个具体的解决方案。
我有一个由余弦相似度组成的方阵(值在0和1之间),例如:
| A | B | C | D
A | 1.0 | 0.1 | 0.6 | 0.4
B | 0.1 | 1.0 | 0.1 | 0.2
C | 0.6 | 0.1 | 1.0 | 0.7
D | 0.4 | 0.2 | 0.7 | 1.0
方阵可以是任何大小。我想要获得尽可能最大化聚类内部元素之间值的聚类(数量未知)。例如,对于上面的示例,我应该得到两个聚类:
- B
- A、C、D
原因是C和D之间的值最高,A和C之间的值也最高。
一个项目只能属于一个聚类。
召回率对于这个问题并不那么重要,但精确度非常重要。输出三个聚类是可以接受的:1)B,2)A,3)C,D。但是输出任何将B与另一个元素聚类的解决方案都是不可接受的。
我觉得对角线(1.0)让我感到困惑。我的数据保证至少有一个由两个或更多元素组成的聚类,并且我希望找到尽可能多的聚类而不会牺牲精度。
我将不得不用Python实现这个问题。