1
I have a matrix x=  
[[0,1,1,1,0,0,0,0],
[1,0,1,1,0,0,0,0],
[1,1,0,1,0,0,0,0],
[1,1,1,0,0,0,0,0],
[0,0,0,0,0,1,1,1],
[0,0,0,0,1,0,1,1],
[0,0,0,0,1,1,0,1],
[0,0,0,0,1,1,1,0],]

在调用AgglomerativeClustering之后,我期望数据被分成 2 个集群(0-3) 和 (4-7) 即 labels_=[0,0,0,0,1,1,1,1] 但设置了标签列表是 [0, 0, 0, 1, 0, 0, 0, 1]

我的代码如下 s=AgglomerativeClustering(affinity='precomputed',n_clusters=2,linkage='complete) s.fit(x)

代码是否包含任何错误?为什么聚类不符合预期

4

2 回答 2

1

在我看来,在玩了几个例子之后,AgglomerativeClustering将“亲和力”矩阵解释为距离矩阵,尽管我无法在任何地方找到这个指定。这意味着您的 0 和 1 应该交换。

此外,它似乎只考虑矩阵的上三角部分(其他一切都是多余的)。

我相信定义x为:

x=  
[[0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,1,1,1,1],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],
[ 0,0,0,0,0,0,0,0],]

会给你预期的结果。

于 2016-03-29T15:32:37.127 回答
0

错误在于您如何指定连接矩阵。根据您的描述,我假设您的矩阵表示点之间的联系,其中 [0/1] 表示 [无链接/链接]。但是,该算法将其视为成对距离矩阵,这就是您得到意外结果的原因。

您可以通过简单的变换将您的亲和力矩阵转换为一种距离矩阵;例如

>>> x = np.array(x)
>>> s.fit(np.exp(-x))
>>> s.labels_
array([1, 1, 1, 1, 0, 0, 0, 0])

更好的做法是对用于生成此亲和矩阵的数据使用实际距离度量。

于 2015-10-24T14:49:26.057 回答