`hclust' 和 `agnes' 使用平均值 link 的不同结果
Different results for `hclust' and `agnes' using average link
我正在将一个简单的聚类程序应用于自定义模拟相似性矩阵。 (https://github.com/ewouddt/Files/blob/master/sim_col.RData)
但是我注意到在使用 平均 link 时 hclust
和 agnes
过程之间的差异(注意:我观察到complete link 的相同行为)
load("sim_col.RData") # A 606 x 606 similarity matrix
library(cluster)
c1 <- hclust(as.dist(1-sim_col),method="average")
c2 <- as.hclust(agnes(as.dist(1-sim_col),diss=TRUE,method="average"))
dev.new()
plot(c1)
dev.new()
plot(c2)
cut1 <- cutree(c1,k=20)
cut2 <- cutree(c2,k=20)
cut1
cut2
sort(table(cut1))
cut1
# cut1
# 10 18 9 19 3 20 4 11 7 15 17 5 6 12 16 2 8 1 13 14
# 2 5 7 8 11 13 14 14 15 19 19 21 23 26 27 31 33 80 95 143
sort(table(cut2))
# cut2
# 18 20 19 11 17 7 8 4 12 5 9 3 10 16 2 6 14 13 1 15
# 4 6 8 9 9 13 13 14 15 16 17 19 20 29 31 31 54 62 115 121
正如预期的那样,由于 hclust
和 agnes
的顺序不同,树状图看起来有所不同。
然而,切割标签(例如在 k=20
处)显示不同(尽管相似)的观察结果。 (例如,您可以看到 2 个结果中标签的数量不同)
我是不是犯了一个愚蠢的错误,或者 hclust
和 agnes
不应该 return 砍树后得到完全相同的结果?
如果2个程序不应该return相同的结果,那2个函数的区别在哪里?
除单link外,聚类结果可能不唯一
考虑以下数据集:
1 2 3 4
三个最小值:合并 1 和 2,或 2 和 3,或 3 和 4。
除了single-link,我们会得到不同的结果,这取决于我们先合并2和3还是其他对
特别是通常的算法并不能够保证找到最优解。如果你想保证这一点,你很可能是 NP 完全的。但这也可能无关紧要。
我正在将一个简单的聚类程序应用于自定义模拟相似性矩阵。 (https://github.com/ewouddt/Files/blob/master/sim_col.RData)
但是我注意到在使用 平均 link 时 hclust
和 agnes
过程之间的差异(注意:我观察到complete link 的相同行为)
load("sim_col.RData") # A 606 x 606 similarity matrix
library(cluster)
c1 <- hclust(as.dist(1-sim_col),method="average")
c2 <- as.hclust(agnes(as.dist(1-sim_col),diss=TRUE,method="average"))
dev.new()
plot(c1)
dev.new()
plot(c2)
cut1 <- cutree(c1,k=20)
cut2 <- cutree(c2,k=20)
cut1
cut2
sort(table(cut1))
cut1
# cut1
# 10 18 9 19 3 20 4 11 7 15 17 5 6 12 16 2 8 1 13 14
# 2 5 7 8 11 13 14 14 15 19 19 21 23 26 27 31 33 80 95 143
sort(table(cut2))
# cut2
# 18 20 19 11 17 7 8 4 12 5 9 3 10 16 2 6 14 13 1 15
# 4 6 8 9 9 13 13 14 15 16 17 19 20 29 31 31 54 62 115 121
正如预期的那样,由于 hclust
和 agnes
的顺序不同,树状图看起来有所不同。
然而,切割标签(例如在 k=20
处)显示不同(尽管相似)的观察结果。 (例如,您可以看到 2 个结果中标签的数量不同)
我是不是犯了一个愚蠢的错误,或者 hclust
和 agnes
不应该 return 砍树后得到完全相同的结果?
如果2个程序不应该return相同的结果,那2个函数的区别在哪里?
除单link外,聚类结果可能不唯一
考虑以下数据集:
1 2 3 4
三个最小值:合并 1 和 2,或 2 和 3,或 3 和 4。
除了single-link,我们会得到不同的结果,这取决于我们先合并2和3还是其他对
特别是通常的算法并不能够保证找到最优解。如果你想保证这一点,你很可能是 NP 完全的。但这也可能无关紧要。