尝试将亲和力传播用于简单的群集任务:
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]
我想念什么?
谢谢
最佳答案
我相信这是因为您的问题本质上是不适当的(您将很多相同的点传递给了试图寻找不同点之间相似性的算法)。 AffinityPropagation在后台进行矩阵数学运算,而您的相似度矩阵(全为零)简直是退化的。为了不出错,将adds a small random matrix实现到相似性矩阵,以防止算法在遇到两个相同点时退出。