如何知道由Affinity Propagation创建的集群的示例

时间:2019-05-30 14:39:55

标签: python cluster-analysis

我正在研究图像匹配,我在Python中使用“相似性传播”来创建图像集群。由于AP为每个群集选择一个样本,我如何知道该群集的样本代表的图像是什么?

1 个答案:

答案 0 :(得分:0)

“亲和力传播” 不是具有规范地对新图像进行“分类”的方式。群集不是由亲缘关系本身分配的,而是由“责任”和“可用性”分配的。大致(但仅是近似的),我认为sklearn的实现在那里不正确-将对象分配给它们的“最近”(最高亲和力,尽管亲和力通常是从距离派生的)群集。但是,如果最接近的点仅具有较低的可用性,而第二个最接近的点几乎具有相同的可用性,但对此点具有更高的可用性和责任感,则可能会将点分配给“最近”的示例。我不确定是否也会发生某种可传递性(如在DBSCAN中)。如果是这样,AP将能够更好地处理直径或形状不同的簇,并且与k均值的相似度更低。在我的实验中,AP与k均值非常相似,但速度却慢得多...不过,对于这种情况,我没有一个简单的测试用例,恕我直言,它通常只会影响几个要点。

尽管如此,将“新点”简单地分配给最近的示例似乎是一种常见的方法。而且,如果您阅读sklearn文档,它就有一种可以做到这一点的方法。我认为这不是一个好主意,因为现在fit然后transform不会产生与fit_transform相同的结果...但是这很可能永远不会因为“向后兼容性”而改变。

sklearn还具有一个属性,该属性将为您提供AP选择的示例的索引,因此您也可以轻松地自己执行此操作(如果使用预先计算的亲和度矩阵,这是必需的。)