Affinity Propagation (sklearn) - 奇怪的行为

Posted

技术标签:

【中文标题】Affinity Propagation (sklearn) - 奇怪的行为【英文标题】:Affinity Propagation (sklearn) - strange behavior 【发布时间】:2015-08-30 01:09:45 【问题描述】:

尝试对简单的聚类任务使用相似性传播:

from sklearn.cluster import AffinityPropagation
c = [[0], [0], [0], [0], [0], [0], [0], [0]]
af = AffinityPropagation (affinity = 'euclidean').fit (c)
print (af.labels_)

我得到了这个奇怪的结果: [0 1 0 1 2 1 1 0]

我希望所有样本都在同一个集群中,就像在这种情况下:

c = [[0], [0], [0]]
af = AffinityPropagation (affinity = 'euclidean').fit (c)
print (af.labels_)

这确实将所有样本放在同一个集群中: [0 0 0]

我错过了什么?

谢谢

【问题讨论】:

【参考方案1】:

相信这是因为您的问题本质上是不适定的(您将许多相同的点传递给试图找到不同点之间相似性的算法)。 AffinityPropagation 在幕后进行矩阵数学运算,并且您的相似度矩阵(全为零)非常退化。为了不出错,对相似度矩阵实现adds a small random matrix,防止算法遇到两个相同点时退出。

【讨论】:

以上是关于Affinity Propagation (sklearn) - 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章

R语言Affinity Propagation+AP聚类实战

Affinity Propagation (sklearn) - 奇怪的行为

Affinity Propagation聚类算法的实现

将稀疏矩阵与 sklearn Affinity Propagation 结合使用

如何在 Python 中使用 Affinity Propagation 进行预测

Affinity Propagation聚类算法的实现