尝试将亲和力传播用于简单的群集任务:
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]
我错过了什么?
由于
答案 0 :(得分:4)
我相信这是因为你的问题本质上是不适合的(你将许多相同的观点传递给试图找到不同点之间相似性的算法)。 AffinityPropagation正在进行矩阵数学运算,你的相似性矩阵(全为零)是彻底退化的。为了不出错,执行adds a small random matrix到相似度矩阵,防止算法在遇到两个相同点时退出。