如何基于成对链接构建集群(相同与否)
Posted
技术标签:
【中文标题】如何基于成对链接构建集群(相同与否)【英文标题】:How to construct clusters based on pairwise linkage (the same or not) 【发布时间】:2018-02-20 05:07:46 【问题描述】:我有一组图像,我在 MTurk 上询问是否给定两张图像,它们是否属于同一类别(这里有更多特定于应用程序的细微差别,但本质上我们是在询问它们是否属于同一类别)。
我的问题是如何根据这些答案构建集群分配,假设集合中所有可能的对都已回答。理想情况下,对噪声也很稳健(我们已经重复了问题并计划使用多数票)。
举个例子,假设有三个图像 A B C D。假设答案如下: A 与 B C 相似 D A 与 C 不同 B 与 C A 不同 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),那就更理想了。但如果没有,我不介意自己实现。
谢谢。
【问题讨论】:
数据集是否完全一致? IE。 A=B, B=C, A!=C 可能吗? 大部分时间。是的。但是,由于它来自 MTurk,所以我想这不是 100% 正确的。 【参考方案1】:听起来你想使用层次聚类。
当你这样做时,例如平均链接,它会合并集群,以便人们最有可能认为它们“相似”。
您确实需要考虑如何处理缺失信息、矛盾信息等 - 例如,您可以使用相似度(x,y)=(0.5+#positiveVotes)/(1+#positiveVotes+#negativeVotes)对于每一对。如果这对没有被评估,这将产生 0.5,在一次赞成票后它变为 0.75,在反对票后为 0.25,并且额外的投票会给你一个更明确的相似性(当然,除非他们不同意)。
【讨论】:
【参考方案2】:人们可以将此视为图论中的一个问题,其中节点和图的边由图像和它们之间的相似性表示。然后可以应用community detection algorithm(例如,已经建议的模块化最大化或层次聚类)对图像进行分类。
sklearn 和scipy 都实现了层次聚类,而且似乎还存在python implementation of Louvain method for community detection。
【讨论】:
以上是关于如何基于成对链接构建集群(相同与否)的主要内容,如果未能解决你的问题,请参考以下文章