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

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。

【讨论】:

以上是关于如何基于成对链接构建集群(相同与否)的主要内容,如果未能解决你的问题,请参考以下文章

基于kubernetes构建Docker集群管理详解-转

基于docker搭建hadoop跨主机集群

如何基于 K8S 多租能力构建 Serverless Container

基于 k8s 的 Jenkins 构建集群实践

基于Storm构建分布式实时处理应用初探

基于Haproxy+Keepalived构建高可用负载均衡集群