scikit learn - 亲和力传播 (sklearn) - 奇怪的行为



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

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正在后台进行矩阵数学运算,而您的相似性矩阵(全为零)非常退化。为了不出错,该实现在相似性矩阵中添加了一个小的随机矩阵,防止算法在遇到两个相同点时退出。

相关内容

最新更新