如何知道哪个是 Affinity Propagation 创建的集群的样本
How to know which is the exemplar for the cluster created by Affinity Propagation
我正在研究图像匹配,我在 Python 中使用了亲和力传播来创建图像簇。由于 AP 为每个集群选择一个样本,我如何知道哪个图像代表该集群的样本?
亲和力传播 没有 有规范的方法来 "classify" 新图像。集群 不是 由关联本身分配,而是由 "responsibility" 和 "availability" 分配。粗略地 - 但只是大约,我认为 sklearn 实现在那里是不正确的 - 对象被分配给它们的 "nearest" (最高亲和力,尽管亲和力通常来自距离)集群。但是,如果最近的只有低可用性,而第二最近的几乎同样接近但具有更高的可用性和对这一点的责任,那么 点可能不会分配给 "nearest" 样本 .我不确定是否也会发生某种传递性(如在 DBSCAN 中)。如果是这样,AP 将能够更好地处理不同直径或形状的簇,并且与 k-means 不太相似。在我的实验中,AP 与 k-means 非常相似,只是慢得多......不过我没有针对这种情况的简单测试用例,恕我直言,它通常只会影响几个点。
不过,简单地将 "new points" 分配给最近的样本似乎是一种常见的方法。如果您 阅读 sklearn 文档 ,它有一个方法可以做到这一点。我认为这不是一个好主意,因为现在 fit
然后 transform
将 而不是 产生与 fit_transform
相同的结果...但是由于 "backwards compatibility".
,这可能永远不会改变
sklearn 也有一个属性,可以为您提供 AP 选择的范例的索引,因此您也可以轻松地自己执行此操作(如果您使用预先计算的亲和矩阵,这是必需的)。
我正在研究图像匹配,我在 Python 中使用了亲和力传播来创建图像簇。由于 AP 为每个集群选择一个样本,我如何知道哪个图像代表该集群的样本?
亲和力传播 没有 有规范的方法来 "classify" 新图像。集群 不是 由关联本身分配,而是由 "responsibility" 和 "availability" 分配。粗略地 - 但只是大约,我认为 sklearn 实现在那里是不正确的 - 对象被分配给它们的 "nearest" (最高亲和力,尽管亲和力通常来自距离)集群。但是,如果最近的只有低可用性,而第二最近的几乎同样接近但具有更高的可用性和对这一点的责任,那么 点可能不会分配给 "nearest" 样本 .我不确定是否也会发生某种传递性(如在 DBSCAN 中)。如果是这样,AP 将能够更好地处理不同直径或形状的簇,并且与 k-means 不太相似。在我的实验中,AP 与 k-means 非常相似,只是慢得多......不过我没有针对这种情况的简单测试用例,恕我直言,它通常只会影响几个点。
不过,简单地将 "new points" 分配给最近的样本似乎是一种常见的方法。如果您 阅读 sklearn 文档 ,它有一个方法可以做到这一点。我认为这不是一个好主意,因为现在 fit
然后 transform
将 而不是 产生与 fit_transform
相同的结果...但是由于 "backwards compatibility".
sklearn 也有一个属性,可以为您提供 AP 选择的范例的索引,因此您也可以轻松地自己执行此操作(如果您使用预先计算的亲和矩阵,这是必需的)。