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后,我期望将数据划分为两个集群,(0-3)和(4-7),即labels_=0,0,0,0,1,1,1,1,但在labels_列表中为0、0、0、1、0、0、0、1。
我的代码如下所示:s=AgglomerativeClustering(affinity='precomputed',n_clusters=2,linkage='complete) s.fit(x)
代码中有错误吗?为什么集群不像预期的那样
发布于 2016-03-29 15:32:37
在我看来,在尝试了几个例子之后,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],]
会给你预期的结果。
发布于 2015-10-24 14:49:26
错误在于如何指定连接矩阵。根据您的描述,我假设您的矩阵表示点之间的链接,其中0/1表示没有链接/链接。然而,该算法将其视为成对距离的矩阵,这就是为什么您会得到意想不到的结果。
你可以用简单的变换把你的亲和矩阵转换成一种距离矩阵。
>>> x = np.array(x)
>>> s.fit(np.exp(-x))
>>> s.labels_
array([1, 1, 1, 1, 0, 0, 0, 0])
更好的做法是对用于生成此关联矩阵的数据使用实际的距离度量。
https://stackoverflow.com/questions/33260582
复制相似问题