尝试将亲和力传播用于简单的聚类任务:
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正在后台进行矩阵数学运算,而您的相似性矩阵(全为零)非常退化。为了不出错,该实现在相似性矩阵中添加了一个小的随机矩阵,防止算法在遇到两个相同点时退出。