Affinity Propagation(sklearn) - 奇怪的行为

Bab*_*aba 8 cluster-analysis scikit-learn

尝试将亲和力传播用于简单的群集任务:

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

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

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

c = [[0], [0], [0]]
af = AffinityPropagation (affinity = 'euclidean').fit (c)
print (af.labels_)
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

谢谢

And*_*eus 4

相信这是因为你的问题本质上是不适定的(你将很多相同的点传递给一个试图找到不同点之间相似性的算法)。AffinityPropagation 正在底层进行矩阵数学运算,而您的相似性矩阵(全为零)是严重退化的。为了不出错,该实现在相似度矩阵中添加了一个小的随机矩阵,以防止算法在遇到两个相同点时退出。