如何基于成对链接构建集群(相同与否)

时间:2017-09-11 21:16:22

标签: python algorithm scikit-learn cluster-analysis graph-algorithm

我有一组图像,我在MTurk上询问是否给出了两个图像,它们属于同一类别(这里有更多特定于应用程序的细微差别,但基本上我们在询问它们是否属于同一类别)。

我的问题是如何根据这些答案构建集群分配,假设集合中的所有可能对都得到了回答。理想情况下对噪音也很稳健(我们已经重复了问题,并计划使用多数票)。

一个例子,假设有三个图像A B C D.假设答案如下:类似于B C类似于D A不同于C B不同于C A不同于D B不同于D B不同于D

输出应该是两个簇(A,B)和(C,D)。请注意,我们事先并不知道群集的数量,并希望从答案中推断出来。

我在SO上发现了一些相关问题,但它们并不完全相同。例如,它们可能基于距离而不是布尔答案(是或否)。我或许可以将我的问题缩小到距离的形式,但我想我的问题比距离设置更容易。相关问题:

Clustering given pairwise distances with unknown cluster number?

https://stats.stackexchange.com/questions/2717/clustering-with-a-distance-matrix

算法已经具有python实现(例如,sklearn)会更加理想。但如果没有,我不介意自己实施。

谢谢。

2 个答案:

答案 0 :(得分:3)

听起来你想使用层次聚类。

当你这样做时,例如,平均联系,它会合并群集,以便人们最有可能考虑他们"类似"。

你需要考虑如何处理丢失的信息,矛盾的信息等 - 例如你可以使用相似性(x,y)=(0.5 +#positiveVotes)/(1 +#positiveVotes + #neveVotes)对于每一对。如果未对该对进行评估,则在一次正投票之后,它会产生0.5,在投票结果为0.25之后变为0.75,并且额外投票将给出更确定的相似性(当然,除非他们不同意)。

答案 1 :(得分:2)

人们可以将其视为图论中的一个问题,其中图的节点和边缘由图像和它们之间的相似性表示。然后可以应用community detection algorithm(例如模块化最大化或已建议的层次聚类)来对图像进行分类。

sklearnscipy都有层次聚类的实现,似乎还存在python implementation of Louvain method for community detection